Ice Sheet System Model  4.18
Code documentation
Element.h
Go to the documentation of this file.
1 
7 #ifndef _ELEMENT_H_
8 #define _ELEMENT_H_
9 
10 /*Headers:*/
11 /*{{{*/
12 #include "../../datastructures/datastructures.h"
13 #include "../../toolkits/toolkits.h"
14 class DataSet;
15 class Parameters;
16 class Parameter;
17 class Elements;
18 class Loads;
19 class Nodes;
20 class Node;
21 class Vertices;
22 class Vertex;
23 class Materials;
24 class Material;
25 class Inputs2;
26 class Inputs;
27 class Input2;
28 class Input;
29 class ElementInput2;
30 class DatasetInput2;
31 class IoModel;
32 class SealevelMasks;
33 class Gauss;
34 class ElementVector;
35 template <class doublematrix> class Matrix;
36 template <class doubletype> class Vector;
37 class ElementMatrix;
38 class ElementVector;
39 /*}}}*/
40 
41 class Element: public Object{
42 
43  public:
44  int id;
45  int sid;
46  int lid;
53  bool isonbase;
54 
57 
58  public:
59  /*Constructors/Destructores*/
60  Element();
61  ~Element();
62 
63  /*Functions*/
64  /*bool AllActive(void);*/
65  /*bool AnyActive(void);*/
66  bool AnyFSet(void);
67  void ComputeLambdaS(void);
68  void ComputeNewDamage();
69  void ComputeStrainRate();
70  void CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array);
71  void DeepEcho();
72  void DeleteMaterials(void);
73  void Delta18oParameterization(void);
74  void Delta18opdParameterization(void);
75  void SmbGradCompParameterization(void);
76  IssmDouble Divergence(void);
77  void dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
78  void dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
79  void dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
80  void dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
81  void Echo();
82  void FindParam(bool* pvalue,int paramenum);
83  void FindParam(int* pvalue,int paramenum);
84  void FindParam(IssmDouble* pvalue,int paramenum);
85  IssmDouble FindParam(int paramenum);
86  void FindParam(int** pvalues,int* psize,int paramenum);
87  IssmDouble FloatingArea(IssmDouble* mask, bool scaled);
88  void GetDofList(int** pdoflist,int approximation_enum,int setenum);
89  void GetDofListPressure(int** pdoflist,int setenum);
90  void GetDofListVelocity(int** pdoflist,int setenum);
91  void GetDofListLocal(int** pdoflist,int approximation_enum,int setenum);
92  void GetDofListLocalPressure(int** pdoflist,int setenum);
93  void GetDofListLocalVelocity(int** pdoflist,int setenum);
94  void GetInputListOnNodes(IssmDouble* pvalue,int enumtype);
95  void GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
96  void GetInputListOnNodesVelocity(IssmDouble* pvalue,int enumtype);
97  void GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
98  void GetInputListOnVerticesAtTime(IssmDouble* pvalue,int enumtype,IssmDouble time);
99  void GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
101  void GetInputValue(bool* pvalue,int enum_type);
102  void GetInputValue(int* pvalue,int enum_type);
103  void GetInput2Value(bool* pvalue,int enum_type);
104  void GetInput2Value(int* pvalue,int enum_type);
105  void GetInput2Value(IssmDouble* pvalue,int enum_type);
106  void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type);
107  Node* GetNode(int nodeindex);
108  int GetNodeIndex(Node* node);
109  void GetNodesLidList(int* lidlist);
110  void GetNodesSidList(int* sidlist);
111  void GetPhi(IssmDouble* phi, IssmDouble* epsilon, IssmDouble viscosity);
112  void GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum);
113  void GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum, int type);
114  void GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum, int type,IssmDouble time);
115  void GetVerticesLidList(int* lidlist);
116  void GetVerticesPidList(int* pidlist);
117  void GetVerticesConnectivityList(int* connectivitylist);
118  void GetVerticesCoordinates(IssmDouble** xyz_list);
119  void GetVerticesSidList(int* sidlist);
120  IssmDouble GetXcoord(IssmDouble* xyz_list,Gauss* gauss);
121  IssmDouble GetYcoord(IssmDouble* xyz_list,Gauss* gauss);
122  IssmDouble GetZcoord(IssmDouble* xyz_list,Gauss* gauss);
123  void GradientIndexing(int* indexing,int control_index);
124  IssmDouble GroundedArea(IssmDouble* mask, bool scaled);
125  bool HasNodeOnBase();
126  bool HasNodeOnSurface();
127  IssmDouble IceMass(bool scaled);
128  IssmDouble IceMass(IssmDouble* mask, bool scaled);
129  IssmDouble IceVolume(IssmDouble* mask, bool scaled);
130  IssmDouble IceVolumeAboveFloatation(IssmDouble* mask, bool scaled);
131  int Id();
132  void InputCreate(IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
133  void ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,Inputs2*inputs2,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id);
134  void DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum);
135  void InputUpdateFromConstant(IssmDouble constant, int name);
136  void InputUpdateFromConstant(int constant, int name);
137  void InputUpdateFromConstant(bool constant, int name);
138 
139  bool IsFloating();
140  bool IsGrounded();
141  bool IsOnBase();
142  bool IsOnSurface();
143  bool IsIceInElement();
144  bool IsIceOnlyInElement();
145  bool IsOceanInElement();
146  bool IsLandInElement();
151  void MarshallElement(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction,int numanalyses);
152  void MigrateGroundingLine(IssmDouble* sheet_ungrounding);
155  void MungsmtpParameterization(void);
156  ElementMatrix* NewElementMatrix(int approximation_enum=NoneApproximationEnum);
157  ElementMatrix* NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
158  ElementVector* NewElementVector(int approximation_enum=NoneApproximationEnum);
159  void PicoUpdateBoxid(int* pmax_boxid_basin);
160  void PicoUpdateBox(int loopboxid);
161  void PicoComputeBasalMelt();
162  void PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac);
163  void PositiveDegreeDaySicopolis(bool isfirnwarming);
164  void ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
165  void ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum);
166  void ResultToMatrix(IssmDouble* values,int ncols,int output_enum);
167  void ResultToVector(Vector<IssmDouble>* vector,int output_enum);
168  void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
169  void SetBoolInput(Inputs2* inputs2,int enum_in,bool value);
170 
171  void SetIntInput(Inputs2* inputs2,int enum_in,int value);
172  void SmbSemic();
173  int Sid();
174  void SmbGemb(IssmDouble timeinputs, int count);
175  void StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
176  void StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
177  void StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
178  void StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
179  void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
180  void StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input);
182  IssmDouble TotalFloatingBmb(IssmDouble* mask, bool scaled);
183  IssmDouble TotalGroundedBmb(IssmDouble* mask, bool scaled);
184  IssmDouble TotalSmb(IssmDouble* mask, bool scaled);
185  void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
186  void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
187  void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
188  void TransformLoadVectorCoord(ElementVector* pe,int cs_enum);
189  void TransformLoadVectorCoord(ElementVector* pe,int* cs_array);
190  void TransformLoadVectorCoord(ElementVector* pe,Node** nodes,int numnodes,int cs_enum);
191  void TransformLoadVectorCoord(ElementVector* pe,Node** nodes,int numnodes,int* cs_array);
192  void TransformLoadVectorCoord(ElementVector* pe,int numnodes,int transformenum){_error_("not implemented yet");};/*Tiling only*/
193  void TransformLoadVectorCoord(ElementVector* pe,int numnodes,int* transformenum_list){_error_("not implemented yet");};/*Tiling only*/
194  void TransformSolutionCoord(IssmDouble* solution,int cs_enum);
195  void TransformSolutionCoord(IssmDouble* solution,int* cs_array);
196  void TransformSolutionCoord(IssmDouble* solution,int numnodes,int cs_enum);
197  void TransformSolutionCoord(IssmDouble* solution,int numnodes,int* cs_array);
198  void TransformSolutionCoord(IssmDouble* solution,Node** nodes,int numnodes,int cs_enum);
199  void TransformSolutionCoord(IssmDouble* solution,Node** nodes,int numnodes,int* cs_array);
200  void TransformStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
201  void TransformStiffnessMatrixCoord(ElementMatrix* Ke,int* cs_array);
202  void TransformStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
203  void TransformStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
204  void TransformStiffnessMatrixCoord(ElementMatrix* Ke,int numnodes,int* transformenum_list){_error_("not implemented yet");};/*Tiling only*/
205  void ViscousHeatingCreateInput(void);
206  void ThermalToEnthalpy(IssmDouble * penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
208  void EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure);
210  IssmDouble EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure);
212 
213 
214  /*Virtual functions*/
215  virtual void AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
216  virtual void AddInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
217  virtual void AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){_error_("not supported yet");};
218  virtual void DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){_error_("not supported");};
219  virtual void AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
220  virtual void BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");};
221  virtual void CalvingRateVonmises(void){_error_("not implemented yet");};
222  virtual void CalvingCrevasseDepth(void){_error_("not implemented yet");};
223  virtual void CalvingRateLevermann(void)=0;
224  virtual void CalvingFluxLevelset(void){_error_("not implemented yet");};
225  virtual void CalvingMeltingFluxLevelset(void){_error_("not implemented yet");};
227  virtual void ComputeBasalStress(void){_error_("not implemented yet");};
228  virtual void ComputeDeviatoricStressTensor(void)=0;
229  virtual void ComputeSigmaNN(void)=0;
230  virtual void ComputeStressTensor(void)=0;
231  virtual void ComputeEsaStrainAndVorticity(void)=0;
232  virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs2* inputs2in)=0;
233  virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M)=0;
234  virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
235  virtual void ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum)=0;
236  virtual void CreateDistanceInputFromSegmentlist(IssmDouble* distances,int distanceenum){_error_("not implemented yet");};
237  virtual void CreateInputTimeAverage(int transientinput_enum,int averagedinput_enum,IssmDouble init_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet "<<this->ObjectEnum());};
238  virtual void ElementResponse(IssmDouble* presponse,int response_enum)=0;
239  virtual void ElementSizes(IssmDouble* phx,IssmDouble* phy,IssmDouble* phz)=0;
240  virtual int FiniteElement(void)=0;
241  virtual IssmDouble FloatingArea(bool scaled)=0;
242  virtual void FSContactMigration(Vector<IssmDouble>* vertex_sigmann,Vector<IssmDouble>* vertex_waterpressure)=0;
243  virtual Element* GetBasalElement(void)=0;
244  virtual int GetElementType(void)=0;
245  virtual IssmDouble GetHorizontalSurfaceArea(void){_error_("not implemented");};
246  virtual void GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating)=0;
248  virtual IssmDouble GetIcefrontArea(){_error_("not implemented");};
249  virtual void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
250  virtual DatasetInput2* GetDatasetInput2(int inputenum){_error_("not implemented");};
251  virtual Input2* GetInput2(int inputenum)=0;
252  virtual Input2* GetInput2(int inputenum,IssmDouble time)=0;
253  virtual Input2* GetInput2(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method)=0;
254  virtual void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");};
255  virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
256  virtual void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0;
257  virtual void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0;
258  virtual void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level)=0;
259  virtual void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues)=0;
260  virtual int GetVertexIndex(Vertex* vertex){_error_("not implemented");};;
261  virtual int GetNumberOfNodes(void)=0;
262  virtual int GetNumberOfNodes(int enum_type)=0;
263  virtual int GetNumberOfVertices(void)=0;
264  virtual void GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset)=0;
265  virtual void GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
266  virtual void GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
267  virtual void GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
268  virtual IssmDouble GroundedArea(bool scaled)=0;
269  virtual IssmDouble IceVolume(bool scaled)=0;
270  virtual IssmDouble IceVolumeAboveFloatation(bool scaled)=0;
271  virtual IssmDouble IcefrontMassFlux(bool scaled){_error_("not implemented");};
272  virtual IssmDouble IcefrontMassFluxLevelset(bool scaled){_error_("not implemented");};
273  virtual IssmDouble GroundinglineMassFlux(bool scaled){_error_("not implemented");};
274  virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type)=0;
275  virtual void DatasetInputExtrude(int input_enum,int start){_error_("not implemented yet");};
276  virtual void InputExtrude(int input_enum,int start)=0;
277  virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0;
278  virtual void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum)=0;
279  #ifdef _HAVE_DAKOTA_
280  virtual void InputUpdateFromMatrixDakota(IssmDouble* matrix, int rows, int ncols, int name, int type)=0;
281  virtual void InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type)=0;
282  #endif
283  virtual void InputUpdateFromIoModel(int index, IoModel* iomodel)=0;
284  virtual void InputUpdateFromVector(IssmDouble* vector, int name, int type)=0;
285  virtual bool IsFaceOnBoundary(void)=0;
286  virtual bool IsIcefront(void)=0;
287  virtual bool IsNodeOnShelfFromFlags(IssmDouble* flags)=0;
288 
289  virtual bool IsZeroLevelset(int levelset_enum)=0;
290  virtual void JacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0;
291  virtual void JacobianDeterminantBase(IssmDouble* Jdet,IssmDouble* xyz_list_base,Gauss* gauss)=0;
292  virtual void JacobianDeterminantLine(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0;
293  virtual void JacobianDeterminantSurface(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0;
294  virtual void JacobianDeterminantTop(IssmDouble* Jdet,IssmDouble* xyz_list_base,Gauss* gauss)=0;
295  virtual void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction)=0;
296  virtual IssmDouble Masscon(IssmDouble* levelset)=0;
297  virtual IssmDouble MassFlux(IssmDouble* segment)=0;
298  virtual IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id)=0;
299  virtual IssmDouble MinEdgeLength(IssmDouble* xyz_list)=0;
300  virtual IssmDouble Misfit(int modelenum,int observationenum,int weightsenum)=0;
301  virtual IssmDouble MisfitArea(int weightsenum)=0;
302  virtual Gauss* NewGauss(void)=0;
303  virtual Gauss* NewGauss(int order)=0;
304  virtual Gauss* NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order)=0;
305  virtual Gauss* NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert)=0;
306  virtual Gauss* NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order)=0;
307  virtual Gauss* NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order)=0;
308  virtual Gauss* NewGaussBase(int order)=0;
309  virtual Gauss* NewGaussLine(int vertex1,int vertex2,int order)=0;
310  virtual Gauss* NewGaussTop(int order)=0;
311  virtual void NodalFunctions(IssmDouble* basis,Gauss* gauss)=0;
312  virtual void NodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
313  virtual void NodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
314  virtual void NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
315  virtual void NodalFunctionsPressure(IssmDouble* basis, Gauss* gauss)=0;
316  virtual void NodalFunctionsP1(IssmDouble* basis,Gauss* gauss)=0;
317  virtual void NodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
318  virtual void NodalFunctionsP2(IssmDouble* basis,Gauss* gauss)=0;
319  virtual void NodalFunctionsVelocity(IssmDouble* basis, Gauss* gauss)=0;
320  virtual void NodalFunctionsTensor(IssmDouble* basis, Gauss* gauss)=0;
321  virtual int NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0;
322  virtual void NormalBase(IssmDouble* normal,IssmDouble* xyz_list)=0;
323  virtual void NormalSection(IssmDouble* normal,IssmDouble* xyz_list)=0;
324  virtual void NormalTop(IssmDouble* normal,IssmDouble* xyz_list)=0;
325  virtual int NumberofNodesPressure(void)=0;
326  virtual int NumberofNodesVelocity(void)=0;
327  virtual void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
328  virtual int PressureInterpolation()=0;
329  virtual void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0;
331  virtual void ResetHooks()=0;
332  virtual void RignotMeltParameterization(void){_error_("not implemented yet");};
333  virtual void SetElementInput(int enum_in,IssmDouble values){_error_("not implemented yet");};
334  virtual void SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values){_error_("not implemented yet");};
335  virtual void SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){_error_("not implemented yet");};
336  virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M)=0;
337  virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
338  virtual void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
339  virtual void SetTemporaryElementType(int element_type_in)=0;
340  virtual Element* SpawnBasalElement(void)=0;
341  virtual Element* SpawnTopElement(void)=0;
343  virtual void StabilizationParameterAnisotropic(IssmDouble* tau_parameter_anisotropic, IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble hx, IssmDouble hy, IssmDouble hz, IssmDouble kappa)=0;
344  virtual void StrainRateparallel(void)=0;
345  virtual void StrainRateperpendicular(void)=0;
346  virtual void StressIntensityFactor(void)=0;
347  virtual IssmDouble SurfaceArea(void)=0;
348  virtual int TensorInterpolation()=0;
349  virtual IssmDouble TimeAdapt()=0;
350  virtual IssmDouble TotalCalvingFluxLevelset(bool scaled){_error_("not implemented");};
351  virtual IssmDouble TotalCalvingMeltingFluxLevelset(bool scaled){_error_("not implemented");};
352  virtual IssmDouble TotalFloatingBmb(bool scaled)=0;
353  virtual IssmDouble TotalGroundedBmb(bool scaled)=0;
354  virtual IssmDouble TotalSmb(bool scaled)=0;
355  virtual void Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
356  virtual void UpdateConstraintsExtrudeFromBase(void)=0;
357  virtual void UpdateConstraintsExtrudeFromTop(void)=0;
358  virtual int UpdatePotentialUngrounding(IssmDouble* potential_sheet_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf)=0;
359  virtual void ValueP1DerivativesOnGauss(IssmDouble* dvalue,IssmDouble* values,IssmDouble* xyz_list,Gauss* gauss)=0;
360  virtual void ValueP1OnGauss(IssmDouble* pvalue,IssmDouble* values,Gauss* gauss)=0;
361  virtual int VelocityInterpolation()=0;
362  virtual int VertexConnectivity(int vertexindex)=0;
363  virtual void VerticalSegmentIndices(int** pindices,int* pnumseg)=0;
364  virtual void VerticalSegmentIndicesBase(int** pindices,int* pnumseg)=0;
365  virtual void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){_error_("not implemented yet");};
366  virtual void WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");};
367 
368  #ifdef _HAVE_GIA_
369  virtual void GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
370  #endif
371  #ifdef _HAVE_ESA_
372  virtual void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy)=0;
373  virtual void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz)=0;
374  #endif
375  #ifdef _HAVE_SEALEVELRISE_
376  virtual void SetSealevelMasks(SealevelMasks* masks)=0;
377  virtual IssmDouble GetArea3D(void)=0;
378  virtual IssmDouble GetAreaSpherical(void)=0;
379  virtual IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks)=0;
380  virtual void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks)=0;
381  virtual void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks,IssmDouble oceanarea)=0;
382  virtual void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz)=0;
383  virtual void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old,SealevelMasks* mask)=0;
384  virtual void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks)=0;
385  #endif
386 
387 };
388 #endif
Matrix
Definition: Matrix.h:27
Element::IsGrounded
bool IsGrounded()
Definition: Element.cpp:2011
Element::StrainRateESA
void StrainRateESA(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4035
Element::TotalFloatingBmb
IssmDouble TotalFloatingBmb(IssmDouble *mask, bool scaled)
Definition: Element.cpp:4260
Element::GetVerticesConnectivityList
void GetVerticesConnectivityList(int *connectivitylist)
Definition: Element.cpp:1440
Element::TransformStiffnessMatrixCoord
void TransformStiffnessMatrixCoord(ElementMatrix *Ke, int cs_enum)
Definition: Element.cpp:4473
Element::lid
int lid
Definition: Element.h:46
Element::TransformStiffnessMatrixCoord
void TransformStiffnessMatrixCoord(ElementMatrix *Ke, int numnodes, int *transformenum_list)
Definition: Element.h:204
Vertices
Declaration of Vertices class.
Definition: Vertices.h:15
Element::SetIntInput
void SetIntInput(Inputs2 *inputs2, int enum_in, int value)
Definition: Element.cpp:3362
Element::GetElementType
virtual int GetElementType(void)=0
Element::DeepEcho
void DeepEcho()
Definition: Element.cpp:397
Element::ComputeStrainRate
void ComputeStrainRate()
Definition: Element.cpp:244
Element::GetInputListOnNodes
void GetInputListOnNodes(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1106
Element::TransformStiffnessMatrixCoord
void TransformStiffnessMatrixCoord(ElementMatrix *Ke, Node **nodes, int numnodes, int cs_enum)
IssmDouble
double IssmDouble
Definition: types.h:37
Element::NormalSection
virtual void NormalSection(IssmDouble *normal, IssmDouble *xyz_list)=0
Element::TransformSolutionCoord
void TransformSolutionCoord(IssmDouble *solution, int cs_enum)
Definition: Element.cpp:4397
Element::IsOnBase
bool IsOnBase()
Definition: Element.cpp:1984
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
Element::TransformLoadVectorCoord
void TransformLoadVectorCoord(ElementVector *pe, int numnodes, int *transformenum_list)
Definition: Element.h:193
DatasetInput2
Definition: DatasetInput2.h:14
Element::GetIcefrontArea
virtual IssmDouble GetIcefrontArea()
Definition: Element.h:248
Element::GetDofList
void GetDofList(int **pdoflist, int approximation_enum, int setenum)
Definition: Element.cpp:961
Element::GetNumberOfNodes
virtual int GetNumberOfNodes(void)=0
Element::SurfaceArea
virtual IssmDouble SurfaceArea(void)=0
Element::FindParam
void FindParam(bool *pvalue, int paramenum)
Definition: Element.cpp:933
Element::GetNumberOfNodes
virtual int GetNumberOfNodes(int enum_type)=0
Element::SetBoolInput
void SetBoolInput(Inputs2 *inputs2, int enum_in, bool value)
Definition: Element.cpp:3355
Element::NodalFunctionsTensor
virtual void NodalFunctionsTensor(IssmDouble *basis, Gauss *gauss)=0
Element::dViscositydDSSA
void dViscositydDSSA(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:874
Element::NewGaussBase
virtual Gauss * NewGaussBase(int order)=0
Element::DatasetInputExtrude
virtual void DatasetInputExtrude(int input_enum, int start)
Definition: Element.h:275
Element::GetVectorFromControlInputs
virtual void GetVectorFromControlInputs(Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data)=0
Element::SetControlInputsFromVector
virtual void SetControlInputsFromVector(IssmDouble *vector, int control_enum, int control_index, int offset, int N, int M)=0
Element::PicoUpdateBoxid
void PicoUpdateBoxid(int *pmax_boxid_basin)
Definition: Element.cpp:2509
Element::HasNodeOnSurface
bool HasNodeOnSurface()
Definition: Element.cpp:1565
Element::IsZeroLevelset
virtual bool IsZeroLevelset(int levelset_enum)=0
Element::SmbGradCompParameterization
void SmbGradCompParameterization(void)
Definition: Element.cpp:657
Element::VerticalSegmentIndices
virtual void VerticalSegmentIndices(int **pindices, int *pnumseg)=0
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
Element::IceVolume
virtual IssmDouble IceVolume(bool scaled)=0
Element::PressureInterpolation
virtual int PressureInterpolation()=0
Element::TransformInvStiffnessMatrixCoord
void TransformInvStiffnessMatrixCoord(ElementMatrix *Ke, int cs_enum)
Definition: Element.cpp:4299
Element::SpawnBasalElement
virtual Element * SpawnBasalElement(void)=0
Element::NewElementMatrixCoupling
ElementMatrix * NewElementMatrixCoupling(int number_nodes, int approximation_enum=NoneApproximationEnum)
Definition: Element.cpp:2501
Element::PotentialUngrounding
virtual void PotentialUngrounding(Vector< IssmDouble > *potential_sheet_ungrounding)=0
Element::IceVolumeAboveFloatation
IssmDouble IceVolumeAboveFloatation(IssmDouble *mask, bool scaled)
Definition: Element.cpp:1607
Element::StrainRateFS
void StrainRateFS(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
Definition: Element.cpp:4055
Element::dViscositydBHO
void dViscositydBHO(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:800
Element::CalvingRateVonmises
virtual void CalvingRateVonmises(void)
Definition: Element.h:221
Element::ResultToVector
void ResultToVector(Vector< IssmDouble > *vector, int output_enum)
Definition: Element.cpp:3299
Element::TimeAdapt
virtual IssmDouble TimeAdapt()=0
Element::MantlePlumeGeothermalFlux
void MantlePlumeGeothermalFlux()
Definition: Element.cpp:2175
Element::MassFlux
virtual IssmDouble MassFlux(IssmDouble *segment)=0
Element::EnthalpyDiffusionParameter
IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy, IssmDouble pressure)
Definition: Element.cpp:4618
Elements
Declaration of Elements class.
Definition: Elements.h:17
Element::TransformLoadVectorCoord
void TransformLoadVectorCoord(ElementVector *pe, int cs_enum)
Definition: Element.cpp:4346
Element::NewGauss
virtual Gauss * NewGauss(IssmDouble *xyz_list, IssmDouble *xyz_list_front, int order_horiz, int order_vert)=0
Element::GetDofListPressure
void GetDofListPressure(int **pdoflist, int setenum)
Definition: Element.cpp:1007
Element::PicoUpdateBox
void PicoUpdateBox(int loopboxid)
Definition: Element.cpp:2550
Element::ResetFSBasalBoundaryCondition
virtual void ResetFSBasalBoundaryCondition()=0
Element::GroundedArea
IssmDouble GroundedArea(IssmDouble *mask, bool scaled)
Definition: Element.cpp:1548
Element::vertices
Vertex ** vertices
Definition: Element.h:49
Element::ComputeBasalStress
virtual void ComputeBasalStress(void)
Definition: Element.h:227
Element::WriteFieldIsovalueSegment
virtual void WriteFieldIsovalueSegment(DataSet *segments, int fieldenum, IssmDouble fieldvalue)
Definition: Element.h:366
Material
Definition: Material.h:21
Element::GetInputListOnVerticesAtTime
void GetInputListOnVerticesAtTime(IssmDouble *pvalue, int enumtype, IssmDouble time)
Definition: Element.cpp:1139
Element::StrainRateparallel
virtual void StrainRateparallel(void)=0
Element::GetZcoord
IssmDouble GetZcoord(IssmDouble *xyz_list, Gauss *gauss)
Definition: Element.cpp:1494
Element::GetNodesSidList
void GetNodesSidList(int *sidlist)
Definition: Element.cpp:1234
Element::PureIceEnthalpy
IssmDouble PureIceEnthalpy(IssmDouble pressure)
Definition: Element.cpp:4681
Element::Masscon
virtual IssmDouble Masscon(IssmDouble *levelset)=0
Element::NewGauss
virtual Gauss * NewGauss(IssmDouble *xyz_list, IssmDouble *xyz_list_front, int order)=0
Element::JacobianDeterminantBase
virtual void JacobianDeterminantBase(IssmDouble *Jdet, IssmDouble *xyz_list_base, Gauss *gauss)=0
Element::JacobianDeterminantTop
virtual void JacobianDeterminantTop(IssmDouble *Jdet, IssmDouble *xyz_list_base, Gauss *gauss)=0
Element::IsFloating
bool IsFloating()
Definition: Element.cpp:1987
Element::NormalBase
virtual void NormalBase(IssmDouble *normal, IssmDouble *xyz_list)=0
Element::TotalCalvingFluxLevelset
virtual IssmDouble TotalCalvingFluxLevelset(bool scaled)
Definition: Element.h:350
Element::Sid
int Sid()
Definition: Element.cpp:3578
Element::ResultToPatch
void ResultToPatch(IssmDouble *values, int nodesperelement, int output_enum)
Definition: Element.cpp:3270
Element::NewGauss
virtual Gauss * NewGauss(int order)=0
Element::NodalFunctionsP1Derivatives
virtual void NodalFunctionsP1Derivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
Element::SetElementInput
virtual void SetElementInput(Inputs2 *inputs2, int numindices, int *indices, IssmDouble *values, int enum_in)
Definition: Element.h:335
Element::ControlToVectors
virtual void ControlToVectors(Vector< IssmPDouble > *vector_control, Vector< IssmPDouble > *vector_gradient, int control_enum)=0
Element::SetControlInputsFromVector
virtual void SetControlInputsFromVector(IssmDouble *vector, int control_enum, int control_index)=0
Element::AddControlInput
virtual void AddControlInput(int input_enum, Inputs2 *inputs2, IoModel *iomodel, IssmDouble *values, IssmDouble *values_min, IssmDouble *values_max, int interpolation_enum, int id)
Definition: Element.h:217
Element::isonbase
bool isonbase
Definition: Element.h:53
Element::ComputeNewDamage
void ComputeNewDamage()
Definition: Element.cpp:144
Element::FloatingArea
IssmDouble FloatingArea(IssmDouble *mask, bool scaled)
Definition: Element.cpp:948
Element::NodalFunctionsPressure
virtual void NodalFunctionsPressure(IssmDouble *basis, Gauss *gauss)=0
Element::TransformLoadVectorCoord
void TransformLoadVectorCoord(ElementVector *pe, int numnodes, int transformenum)
Definition: Element.h:192
Element::IsNodeOnShelfFromFlags
virtual bool IsNodeOnShelfFromFlags(IssmDouble *flags)=0
Element::UpdateConstraintsExtrudeFromTop
virtual void UpdateConstraintsExtrudeFromTop(void)=0
Element::NodalValue
virtual int NodalValue(IssmDouble *pvalue, int index, int natureofdataenum)=0
Element::ThermalToEnthalpy
void ThermalToEnthalpy(IssmDouble *penthalpy, IssmDouble temperature, IssmDouble waterfraction, IssmDouble pressure)
Definition: Element.cpp:4561
ElementInput2
Definition: ElementInput2.h:7
Element::GetDofListLocalPressure
void GetDofListLocalPressure(int **pdoflist, int setenum)
Definition: Element.cpp:1054
Element::StressIntensityFactor
virtual void StressIntensityFactor(void)=0
Element::GetInput2
virtual Input2 * GetInput2(int inputenum)=0
Element::NewGauss
virtual Gauss * NewGauss(int point1, IssmDouble fraction1, IssmDouble fraction2, int order)=0
Element::DeleteMaterials
void DeleteMaterials(void)
Definition: Element.cpp:429
Element::GetHorizontalSurfaceArea
virtual IssmDouble GetHorizontalSurfaceArea(void)
Definition: Element.h:245
Element::nodes
Node ** nodes
Definition: Element.h:48
Element
Definition: Element.h:41
Element::NodalFunctions
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
Element::SetwiseNodeConnectivity
void SetwiseNodeConnectivity(int *d_nz, int *o_nz, Node *node, bool *flags, int *flagsindices, int set1_enum, int set2_enum)
Definition: Element.cpp:3369
Element::ValueP1OnGauss
virtual void ValueP1OnGauss(IssmDouble *pvalue, IssmDouble *values, Gauss *gauss)=0
Element::TotalSmb
virtual IssmDouble TotalSmb(bool scaled)=0
Element::IcefrontMassFlux
virtual IssmDouble IcefrontMassFlux(bool scaled)
Definition: Element.h:271
Element::SmbSemic
void SmbSemic()
Element::GetDatasetInput2
virtual DatasetInput2 * GetDatasetInput2(int inputenum)
Definition: Element.h:250
Element::~Element
~Element()
Definition: Element.cpp:45
Element::GetPhi
void GetPhi(IssmDouble *phi, IssmDouble *epsilon, IssmDouble viscosity)
Definition: Element.cpp:1244
Element::ComputeStressTensor
virtual void ComputeStressTensor(void)=0
Element::IsIceOnlyInElement
bool IsIceOnlyInElement()
Definition: Element.cpp:2026
Element::dViscositydBFS
void dViscositydBFS(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
Definition: Element.cpp:763
Element::ElementSizes
virtual void ElementSizes(IssmDouble *phx, IssmDouble *phy, IssmDouble *phz)=0
Element::ElementResponse
virtual void ElementResponse(IssmDouble *presponse, int response_enum)=0
Element::InputCreate
void InputCreate(IssmDouble *vector, Inputs2 *inputs2, IoModel *iomodel, int M, int N, int vector_type, int vector_enum, int code)
Definition: Element.cpp:1626
Element::MismipFloatingiceMeltingRate
void MismipFloatingiceMeltingRate()
Definition: Element.cpp:2331
Element::GetVectorFromControlInputs
virtual void GetVectorFromControlInputs(Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data, int offset)=0
Element::NodalFunctionsP1
virtual void NodalFunctionsP1(IssmDouble *basis, Gauss *gauss)=0
Element::NewElementVector
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
Definition: Element.cpp:2505
Object
Definition: Object.h:13
Element::SmbGemb
void SmbGemb(IssmDouble timeinputs, int count)
Definition: Element.cpp:3584
Element::Divergence
IssmDouble Divergence(void)
Definition: Element.cpp:720
Element::ControlInputSetGradient
virtual void ControlInputSetGradient(IssmDouble *gradient, int enum_type, int control_index, int offset, int N, int M)=0
Element::Ismip6FloatingiceMeltingRate
void Ismip6FloatingiceMeltingRate()
Definition: Element.cpp:2041
Element::PositiveDegreeDay
void PositiveDegreeDay(IssmDouble *pdds, IssmDouble *pds, IssmDouble signorm, bool ismungsm, bool issetpddfac)
Definition: Element.cpp:2788
Element::GroundinglineMassFlux
virtual IssmDouble GroundinglineMassFlux(bool scaled)
Definition: Element.h:273
Element::TotalCalvingMeltingFluxLevelset
virtual IssmDouble TotalCalvingMeltingFluxLevelset(bool scaled)
Definition: Element.h:351
Element::inputs2
Inputs2 * inputs2
Definition: Element.h:47
NoneApproximationEnum
@ NoneApproximationEnum
Definition: EnumDefinitions.h:1201
Materials
Declaration of Materials class.
Definition: Materials.h:16
Element::id
int id
Definition: Element.h:44
Element::IceVolume
IssmDouble IceVolume(IssmDouble *mask, bool scaled)
Definition: Element.cpp:1594
Element::sid
int sid
Definition: Element.h:45
Element::GetGroundedPart
virtual void GetGroundedPart(int *point1, IssmDouble *fraction1, IssmDouble *fraction2, bool *mainlyfloating)=0
Element::AddInput2
virtual void AddInput2(int input_enum, IssmDouble *values, int interpolation_enum)
Definition: Element.h:216
Element::TensorInterpolation
virtual int TensorInterpolation()=0
Element::Id
int Id()
Definition: Element.cpp:1620
Element::InputUpdateFromVector
virtual void InputUpdateFromVector(IssmDouble *vector, int name, int type)=0
Element::NewGauss
virtual Gauss * NewGauss(void)=0
Element::MungsmtpParameterization
void MungsmtpParameterization(void)
Definition: Element.cpp:2400
Element::dViscositydBSSA
void dViscositydBSSA(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:837
Element::VerticalSegmentIndicesBase
virtual void VerticalSegmentIndicesBase(int **pindices, int *pnumseg)=0
Element::GetInputValue
virtual void GetInputValue(IssmDouble *pvalue, Vertex *vertex, int enumtype)
Definition: Element.h:254
Element::InputUpdateFromSolutionOneDof
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
Element::element_type_list
int * element_type_list
Definition: Element.h:55
Element::CoordinateSystemTransform
void CoordinateSystemTransform(IssmDouble **ptransform, Node **nodes, int numnodes, int *cs_array)
Definition: Element.cpp:323
Element::PositiveDegreeDaySicopolis
void PositiveDegreeDaySicopolis(bool isfirnwarming)
Definition: Element.cpp:2975
Element::ComputeSigmaNN
virtual void ComputeSigmaNN(void)=0
Element::GetInputListOnVertices
virtual void GetInputListOnVertices(IssmDouble *pvalue, Input2 *input, IssmDouble default_value)=0
Element::Misfit
virtual IssmDouble Misfit(int modelenum, int observationenum, int weightsenum)=0
Element::NormalTop
virtual void NormalTop(IssmDouble *normal, IssmDouble *xyz_list)=0
Element::TotalSmb
IssmDouble TotalSmb(IssmDouble *mask, bool scaled)
Definition: Element.cpp:4286
Element::ReduceMatrices
virtual void ReduceMatrices(ElementMatrix *Ke, ElementVector *pe)=0
Element::GetInput2Value
void GetInput2Value(bool *pvalue, int enum_type)
Definition: Element.cpp:1185
Element::BeckmannGoosseFloatingiceMeltingRate
void BeckmannGoosseFloatingiceMeltingRate()
Definition: Element.cpp:2360
Element::ComputeEsaStrainAndVorticity
virtual void ComputeEsaStrainAndVorticity(void)=0
Element::Delta18opdParameterization
void Delta18opdParameterization(void)
Definition: Element.cpp:531
Element::StrainRateSSA1d
void StrainRateSSA1d(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input)
Definition: Element.cpp:4157
Element::StabilizationParameterAnisotropic
virtual void StabilizationParameterAnisotropic(IssmDouble *tau_parameter_anisotropic, IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble hx, IssmDouble hy, IssmDouble hz, IssmDouble kappa)=0
Element::GetVerticesCoordinates
void GetVerticesCoordinates(IssmDouble **xyz_list)
Definition: Element.cpp:1446
Element::GetNode
Node * GetNode(int nodeindex)
Definition: Element.cpp:1207
Element::ResultToMatrix
void ResultToMatrix(IssmDouble *values, int ncols, int output_enum)
Definition: Element.cpp:3290
Element::ComputeLambdaS
void ComputeLambdaS(void)
Definition: Element.cpp:61
Element::ResetHooks
virtual void ResetHooks()=0
Element::GetVectorFromInputs
void GetVectorFromInputs(Vector< IssmDouble > *vector, int name_enum, int type)
Definition: Element.cpp:1331
Element::UpdateConstraintsExtrudeFromBase
virtual void UpdateConstraintsExtrudeFromBase(void)=0
Element::SetTemporaryElementType
virtual void SetTemporaryElementType(int element_type_in)=0
Element::SpatialLinearFloatingiceMeltingRate
void SpatialLinearFloatingiceMeltingRate()
Definition: Element.cpp:2146
Element::IsFaceOnBoundary
virtual bool IsFaceOnBoundary(void)=0
Element::GetIcefrontCoordinates
virtual void GetIcefrontCoordinates(IssmDouble **pxyz_front, IssmDouble *xyz_list, int levelsetenum)=0
Element::NumberofNodesPressure
virtual int NumberofNodesPressure(void)=0
Inputs2
Declaration of Inputs class.
Definition: Inputs2.h:23
Element::InputExtrude
virtual void InputExtrude(int input_enum, int start)=0
Element::ViscousHeatingCreateInput
void ViscousHeatingCreateInput(void)
Definition: Element.cpp:4522
Element::NewGaussLine
virtual Gauss * NewGaussLine(int vertex1, int vertex2, int order)=0
Element::Echo
void Echo()
Definition: Element.cpp:901
Object::ObjectEnum
virtual int ObjectEnum()=0
Element::NodalFunctionsDerivativesVelocity
virtual void NodalFunctionsDerivativesVelocity(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
Input2
Definition: Input2.h:18
Element::GetDofListLocal
void GetDofListLocal(int **pdoflist, int approximation_enum, int setenum)
Definition: Element.cpp:984
Element::Marshall
virtual void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)=0
Element::GetVerticesSidList
void GetVerticesSidList(int *sidlist)
Definition: Element.cpp:1456
Element::CreateDistanceInputFromSegmentlist
virtual void CreateDistanceInputFromSegmentlist(IssmDouble *distances, int distanceenum)
Definition: Element.h:236
Element::TMeltingPoint
IssmDouble TMeltingPoint(IssmDouble pressure)
Definition: Element.cpp:4583
Element::StabilizationParameter
virtual IssmDouble StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)=0
Element::AddBasalInput2
virtual void AddBasalInput2(int input_enum, IssmDouble *values, int interpolation_enum)
Definition: Element.h:215
Element::SetElementInput
virtual void SetElementInput(int enum_in, IssmDouble values)
Definition: Element.h:333
Element::GetLevelCoordinates
virtual void GetLevelCoordinates(IssmDouble **pxyz_front, IssmDouble *xyz_list, int levelsetenum, IssmDouble level)=0
Element::GetInputListOnNodes
virtual void GetInputListOnNodes(IssmDouble *pvalue, Input2 *input, IssmDouble default_value)=0
Element::ValueP1DerivativesOnGauss
virtual void ValueP1DerivativesOnGauss(IssmDouble *dvalue, IssmDouble *values, IssmDouble *xyz_list, Gauss *gauss)=0
Element::JacobianDeterminantSurface
virtual void JacobianDeterminantSurface(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
Element::CalvingMeltingFluxLevelset
virtual void CalvingMeltingFluxLevelset(void)
Definition: Element.h:225
Element::Element
Element()
Definition: Element.cpp:34
Element::DatasetInputCreate
virtual void DatasetInputCreate(IssmDouble *array, int M, int N, int *individual_enums, int num_inputs, Inputs2 *inputs2, IoModel *iomodel, int input_enum)
Definition: Element.h:218
Element::NodalFunctionsVelocity
virtual void NodalFunctionsVelocity(IssmDouble *basis, Gauss *gauss)=0
Element::IsIceInElement
bool IsIceInElement()
Definition: Element.cpp:2021
Element::MigrateGroundingLine
void MigrateGroundingLine(IssmDouble *sheet_ungrounding)
Definition: Element.cpp:2238
Loads
Declaration of Loads class.
Definition: Loads.h:16
Element::IsOceanInElement
bool IsOceanInElement()
Definition: Element.cpp:2036
Element::GetVertexIndex
virtual int GetVertexIndex(Vertex *vertex)
Definition: Element.h:260
Element::TotalFloatingBmb
virtual IssmDouble TotalFloatingBmb(bool scaled)=0
Node
Definition: Node.h:23
Element::StrainRateHO
void StrainRateHO(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4084
Element::GetSolutionFromInputsOneDof
void GetSolutionFromInputsOneDof(Vector< IssmDouble > *solution, int solutionenum)
Definition: Element.cpp:1281
Element::LinearFloatingiceMeltingRate
void LinearFloatingiceMeltingRate()
Definition: Element.cpp:2106
Element::BasalNodeIndices
virtual void BasalNodeIndices(int *pnumindices, int **pindices, int finiteelement)
Definition: Element.h:220
Element::GetVerticesCoordinatesBase
virtual void GetVerticesCoordinatesBase(IssmDouble **xyz_list)=0
Element::ResultInterpolation
void ResultInterpolation(int *pinterpolation, int *nodesperelement, int *parray_size, int output_enum)
Definition: Element.cpp:3162
Element::AnyFSet
bool AnyFSet(void)
Definition: Element.cpp:51
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Element::GetLevelsetPositivePart
virtual void GetLevelsetPositivePart(int *point1, IssmDouble *fraction1, IssmDouble *fraction2, bool *mainlynegative, IssmDouble *levelsetvalues)=0
Element::parameters
Parameters * parameters
Definition: Element.h:51
Element::SpawnTopElement
virtual Element * SpawnTopElement(void)=0
Element::GetYcoord
IssmDouble GetYcoord(IssmDouble *xyz_list, Gauss *gauss)
Definition: Element.cpp:1478
Element::CharacteristicLength
virtual IssmDouble CharacteristicLength(void)=0
min
IssmDouble min(IssmDouble a, IssmDouble b)
Definition: extrema.cpp:14
Element::MassFlux
virtual IssmDouble MassFlux(IssmDouble x1, IssmDouble y1, IssmDouble x2, IssmDouble y2, int segment_id)=0
Element::StrainRateperpendicular
virtual void StrainRateperpendicular(void)=0
Element::GetGroundedPortion
virtual IssmDouble GetGroundedPortion(IssmDouble *xyz_list)=0
Element::InputUpdateFromConstant
void InputUpdateFromConstant(IssmDouble constant, int name)
Definition: Element.cpp:1963
Element::NodalFunctionsP2
virtual void NodalFunctionsP2(IssmDouble *basis, Gauss *gauss)=0
Element::JacobianDeterminant
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
Element::Update
virtual void Update(Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finite_element)=0
Element::GetInputValue
void GetInputValue(bool *pvalue, int enum_type)
Definition: Element.cpp:1177
Element::PicoComputeBasalMelt
void PicoComputeBasalMelt()
Definition: Element.cpp:2684
Element::GetBasalElement
virtual Element * GetBasalElement(void)=0
Element::EnthalpyDiffusionParameterVolume
IssmDouble EnthalpyDiffusionParameterVolume(int numvertices, IssmDouble *enthalpy, IssmDouble *pressure)
Definition: Element.cpp:4634
Element::CalvingFluxLevelset
virtual void CalvingFluxLevelset(void)
Definition: Element.h:224
Element::TransformLoadVectorCoord
void TransformLoadVectorCoord(ElementVector *pe, Node **nodes, int numnodes, int cs_enum)
Element::VelocityInterpolation
virtual int VelocityInterpolation()=0
Element::ControlInputCreate
void ControlInputCreate(IssmDouble *doublearray, IssmDouble *independents_min, IssmDouble *independents_max, Inputs2 *inputs2, IoModel *iomodel, int M, int N, IssmDouble scale, int input_enum, int id)
Definition: Element.cpp:1753
Element::FiniteElement
virtual int FiniteElement(void)=0
Element::GetInputValue
virtual void GetInputValue(IssmDouble *pvalue, Node *node, int enumtype)
Definition: Element.h:255
Element::NewGauss
virtual Gauss * NewGauss(int point1, IssmDouble fraction1, IssmDouble fraction2, bool mainlyfloating, int order)=0
Element::GetVerticesPidList
void GetVerticesPidList(int *pidlist)
Definition: Element.cpp:1433
Element::IsLandInElement
bool IsLandInElement()
Definition: Element.cpp:2031
Element::CalvingCrevasseDepth
virtual void CalvingCrevasseDepth(void)
Definition: Element.h:222
Element::TotalGroundedBmb
IssmDouble TotalGroundedBmb(IssmDouble *mask, bool scaled)
Definition: Element.cpp:4273
Element::VertexConnectivity
virtual int VertexConnectivity(int vertexindex)=0
Element::GetNodeIndex
int GetNodeIndex(Node *node)
Definition: Element.cpp:1212
Element::SetCurrentConfiguration
virtual void SetCurrentConfiguration(Elements *elements, Loads *loads, Nodes *nodes, Materials *materials, Parameters *parameters)=0
Element::SetElementInput
virtual void SetElementInput(Inputs2 *inputs2, int enum_in, IssmDouble values)
Definition: Element.h:334
Element::CreateInputTimeAverage
virtual void CreateInputTimeAverage(int transientinput_enum, int averagedinput_enum, IssmDouble init_time, IssmDouble end_time, int averaging_method)
Definition: Element.h:237
ElementVector
Definition: ElementVector.h:20
Element::StrainRateSSA
void StrainRateSSA(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4138
Element::MarshallElement
void MarshallElement(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction, int numanalyses)
Definition: Element.cpp:2222
Element::CalvingRateLevermann
virtual void CalvingRateLevermann(void)=0
Vertex
Definition: Vertex.h:19
Element::GroundedArea
virtual IssmDouble GroundedArea(bool scaled)=0
Element::GetVerticesCoordinatesTop
virtual void GetVerticesCoordinatesTop(IssmDouble **xyz_list)=0
Element::ViscousHeating
virtual void ViscousHeating(IssmDouble *pphi, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
Definition: Element.h:365
Element::HasNodeOnBase
bool HasNodeOnBase()
Definition: Element.cpp:1561
Element::IsOnSurface
bool IsOnSurface()
Definition: Element.cpp:1981
Element::InputDepthAverageAtBase
virtual void InputDepthAverageAtBase(int enum_type, int average_enum_type)=0
IoModel
Definition: IoModel.h:48
Element::NewGaussTop
virtual Gauss * NewGaussTop(int order)=0
Element::ControlInputSetGradient
virtual void ControlInputSetGradient(IssmDouble *gradient, int enum_type, int control_index)=0
Element::DatasetInputAdd
void DatasetInputAdd(int enum_type, IssmDouble *vector, Inputs2 *inputs2, IoModel *iomodel, int M, int N, int vector_type, int vector_enum, int code, int input_enum)
Definition: Element.cpp:1831
Element::RignotMeltParameterization
virtual void RignotMeltParameterization(void)
Definition: Element.h:332
Element::MisfitArea
virtual IssmDouble MisfitArea(int weightsenum)=0
Element::StrainRateHO2dvertical
void StrainRateHO2dvertical(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4114
max
IssmDouble max(IssmDouble a, IssmDouble b)
Definition: extrema.cpp:24
Element::InputUpdateFromIoModel
virtual void InputUpdateFromIoModel(int index, IoModel *iomodel)=0
Element::IceMass
IssmDouble IceMass(bool scaled)
Definition: Element.cpp:1569
Element::GetInput2
virtual Input2 * GetInput2(int inputenum, IssmDouble start_time, IssmDouble end_time, int averaging_method)=0
Element::GetNumberOfVertices
virtual int GetNumberOfVertices(void)=0
DataSet
Declaration of DataSet class.
Definition: DataSet.h:14
Element::JacobianDeterminantLine
virtual void JacobianDeterminantLine(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
Element::GetInputListOnVertices
void GetInputListOnVertices(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1131
Element::TransformInvStiffnessMatrixCoord
void TransformInvStiffnessMatrixCoord(ElementMatrix *Ke, Node **nodes, int numnodes, int cs_enum)
ElementMatrix
Definition: ElementMatrix.h:19
Element::GetInputListOnNodesVelocity
void GetInputListOnNodesVelocity(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1114
Vector
Definition: Vector.h:25
Element::GradientIndexing
void GradientIndexing(int *indexing, int control_index)
Definition: Element.cpp:1510
Element::AverageOntoPartition
virtual void AverageOntoPartition(Vector< IssmDouble > *partition_contributions, Vector< IssmDouble > *partition_areas, IssmDouble *vertex_response, IssmDouble *qmu_part)=0
Element::isonsurface
bool isonsurface
Definition: Element.h:52
Element::Configure
virtual void Configure(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters, Inputs2 *inputs2in)=0
Element::Delta18oParameterization
void Delta18oParameterization(void)
Definition: Element.cpp:432
Element::InputUpdateFromSolutionOneDofCollapsed
virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble *solution, int inputenum)=0
Element::IsIcefront
virtual bool IsIcefront(void)=0
Element::element_type
int element_type
Definition: Element.h:56
Gauss
Definition: Gauss.h:8
Element::material
Material * material
Definition: Element.h:50
Element::GetDofListLocalVelocity
void GetDofListLocalVelocity(int **pdoflist, int setenum)
Definition: Element.cpp:1078
Element::GetDofListVelocity
void GetDofListVelocity(int **pdoflist, int setenum)
Definition: Element.cpp:1031
Element::IcefrontMassFluxLevelset
virtual IssmDouble IcefrontMassFluxLevelset(bool scaled)
Definition: Element.h:272
Element::GetVerticesLidList
void GetVerticesLidList(int *lidlist)
Definition: Element.cpp:1426
Element::FSContactMigration
virtual void FSContactMigration(Vector< IssmDouble > *vertex_sigmann, Vector< IssmDouble > *vertex_waterpressure)=0
Element::TotalGroundedBmb
virtual IssmDouble TotalGroundedBmb(bool scaled)=0
SealevelMasks
Definition: SealevelMasks.h:10
Element::UpdatePotentialUngrounding
virtual int UpdatePotentialUngrounding(IssmDouble *potential_sheet_ungrounding, Vector< IssmDouble > *vec_nodes_on_iceshelf, IssmDouble *nodes_on_iceshelf)=0
Element::GetInputLocalMinMaxOnNodes
void GetInputLocalMinMaxOnNodes(IssmDouble *min, IssmDouble *max, IssmDouble *ug)
Definition: Element.cpp:1152
Element::GetXcoord
IssmDouble GetXcoord(IssmDouble *xyz_list, Gauss *gauss)
Definition: Element.cpp:1462
Element::GetInput2
virtual Input2 * GetInput2(int inputenum, IssmDouble time)=0
Element::NodalFunctionsDerivatives
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
Element::NodalFunctionsMINIDerivatives
virtual void NodalFunctionsMINIDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
Element::FloatingArea
virtual IssmDouble FloatingArea(bool scaled)=0
Element::NumberofNodesVelocity
virtual int NumberofNodesVelocity(void)=0
Element::IceVolumeAboveFloatation
virtual IssmDouble IceVolumeAboveFloatation(bool scaled)=0
Element::GetNodesLidList
void GetNodesLidList(int *lidlist)
Definition: Element.cpp:1224
Element::ComputeDeviatoricStressTensor
virtual void ComputeDeviatoricStressTensor(void)=0
Element::EnthalpyToThermal
void EnthalpyToThermal(IssmDouble *ptemperature, IssmDouble *pwaterfraction, IssmDouble enthalpy, IssmDouble pressure)
Definition: Element.cpp:4593
Element::MinEdgeLength
virtual IssmDouble MinEdgeLength(IssmDouble *xyz_list)=0
Element::NewElementMatrix
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)
Definition: Element.cpp:2497
Element::StressMaxPrincipalCreateInput
void StressMaxPrincipalCreateInput(void)
Definition: Element.cpp:4172