source: issm/trunk-jpl/src/c/classes/Elements/Element.h@ 25066

Last change on this file since 25066 was 25066, checked in by Eric.Larour, 5 years ago

CHG: moved GiaIvinsAnalysis to GiaAnalysis.
Made giamme the default gia offline class.
Made giacore handle giaivins, giamme and giacaron classes.
Added gia core to transient core.
Remove gia logic from sea level rise core, back into gia core.

File size: 26.6 KB
Line 
1/*!\file: Element.h
2 * \brief abstract class for Element object
3 * This class is a place holder for the Tria and the Penta elements.
4 * It is derived from Element, so DataSets can contain them.
5*/
6
7#ifndef _ELEMENT_H_
8#define _ELEMENT_H_
9
10/*Headers:*/
11/*{{{*/
12#include "../../datastructures/datastructures.h"
13#include "../../toolkits/toolkits.h"
14class DataSet;
15class Parameters;
16class Parameter;
17class Elements;
18class Loads;
19class Nodes;
20class Node;
21class Vertices;
22class Vertex;
23class Materials;
24class Material;
25class Inputs2;
26class Inputs;
27class Input2;
28class Input;
29class ElementInput2;
30class DatasetInput2;
31class IoModel;
32class SealevelMasks;
33class Gauss;
34class ElementVector;
35template <class doublematrix> class Matrix;
36template <class doubletype> class Vector;
37class ElementMatrix;
38class ElementVector;
39/*}}}*/
40
41class Element: public Object{
42
43 public:
44 int id;
45 int sid;
46 int lid;
47 Inputs2 *inputs2;
48 Node **nodes;
49 Vertex **vertices;
50 Material *material;
51 Parameters *parameters;
52 bool isonsurface;
53 bool isonbase;
54
55 int* element_type_list;
56 int element_type;
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);
100 void GetInputLocalMinMaxOnNodes(IssmDouble* min,IssmDouble* max,IssmDouble* ug);
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();
147 void Ismip6FloatingiceMeltingRate();
148 void LinearFloatingiceMeltingRate();
149 void SpatialLinearFloatingiceMeltingRate();
150 void MantlePlumeGeothermalFlux();
151 void MarshallElement(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction,int numanalyses);
152 void MigrateGroundingLine(IssmDouble* sheet_ungrounding);
153 void MismipFloatingiceMeltingRate();
154 void BeckmannGoosseFloatingiceMeltingRate();
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);
181 void StressMaxPrincipalCreateInput(void);
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);
207 IssmDouble TMeltingPoint(IssmDouble pressure);
208 void EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure);
209 IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure);
210 IssmDouble EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure);
211 IssmDouble PureIceEnthalpy(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");};
226 virtual IssmDouble CharacteristicLength(void)=0;
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;
247 virtual IssmDouble GetGroundedPortion(IssmDouble* xyz_list)=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;
330 virtual void ResetFSBasalBoundaryCondition()=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;
342 virtual IssmDouble StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)=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
Note: See TracBrowser for help on using the repository browser.