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

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

CHG: new dsl class to take care of the dynamic sea level in our sealevelrise_core. We made a new field
to the model class to fit the dsl fields. The fields come from the slr steric rates class essentially.
We also added GetStericRate and GetDynamicRate to the sea level core, which splits what used to be only
the steric rate field.

File size: 26.7 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 Gauss;
33class ElementVector;
34template <class doublematrix> class Matrix;
35template <class doubletype> class Vector;
36class ElementMatrix;
37class ElementVector;
38/*}}}*/
39
40class Element: public Object{
41
42 public:
43 int id;
44 int sid;
45 int lid;
46 Inputs2 *inputs2;
47 Node **nodes;
48 Vertex **vertices;
49 Material *material;
50 Parameters *parameters;
51 bool isonsurface;
52 bool isonbase;
53
54 int* element_type_list;
55 int element_type;
56
57 public:
58 /*Constructors/Destructores*/
59 Element();
60 ~Element();
61
62 /*Functions*/
63 /*bool AllActive(void);*/
64 /*bool AnyActive(void);*/
65 bool AnyFSet(void);
66 void ComputeLambdaS(void);
67 void ComputeNewDamage();
68 void ComputeStrainRate();
69 void CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array);
70 void DeepEcho();
71 void DeleteMaterials(void);
72 void Delta18oParameterization(void);
73 void Delta18opdParameterization(void);
74 void SmbGradCompParameterization(void);
75 IssmDouble Divergence(void);
76 void dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
77 void dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
78 void dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
79 void dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
80 void Echo();
81 void FindParam(bool* pvalue,int paramenum);
82 void FindParam(int* pvalue,int paramenum);
83 void FindParam(IssmDouble* pvalue,int paramenum);
84 IssmDouble FindParam(int paramenum);
85 void FindParam(int** pvalues,int* psize,int paramenum);
86 IssmDouble FloatingArea(IssmDouble* mask, bool scaled);
87 void GetDofList(int** pdoflist,int approximation_enum,int setenum);
88 void GetDofListPressure(int** pdoflist,int setenum);
89 void GetDofListVelocity(int** pdoflist,int setenum);
90 void GetDofListLocal(int** pdoflist,int approximation_enum,int setenum);
91 void GetDofListLocalPressure(int** pdoflist,int setenum);
92 void GetDofListLocalVelocity(int** pdoflist,int setenum);
93 void GetInputListOnNodes(IssmDouble* pvalue,int enumtype);
94 void GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
95 void GetInputListOnNodesVelocity(IssmDouble* pvalue,int enumtype);
96 void GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
97 void GetInputListOnVerticesAtTime(IssmDouble* pvalue,int enumtype,IssmDouble time);
98 void GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
99 void GetInputLocalMinMaxOnNodes(IssmDouble* min,IssmDouble* max,IssmDouble* ug);
100 void GetInputValue(bool* pvalue,int enum_type);
101 void GetInputValue(int* pvalue,int enum_type);
102 void GetInput2Value(bool* pvalue,int enum_type);
103 void GetInput2Value(int* pvalue,int enum_type);
104 void GetInputValue(IssmDouble* pvalue,int enum_type);
105 void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type);
106 Node* GetNode(int nodeindex);
107 int GetNodeIndex(Node* node);
108 void GetNodesLidList(int* lidlist);
109 void GetNodesSidList(int* sidlist);
110 void GetPhi(IssmDouble* phi, IssmDouble* epsilon, IssmDouble viscosity);
111 void GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum);
112 void GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum, int type);
113 void GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum, int type,IssmDouble time);
114 void GetVerticesLidList(int* lidlist);
115 void GetVerticesPidList(int* pidlist);
116 void GetVerticesConnectivityList(int* connectivitylist);
117 void GetVerticesCoordinates(IssmDouble** xyz_list);
118 void GetVerticesSidList(int* sidlist);
119 IssmDouble GetXcoord(IssmDouble* xyz_list,Gauss* gauss);
120 IssmDouble GetYcoord(IssmDouble* xyz_list,Gauss* gauss);
121 IssmDouble GetZcoord(IssmDouble* xyz_list,Gauss* gauss);
122 void GradientIndexing(int* indexing,int control_index);
123 IssmDouble GroundedArea(IssmDouble* mask, bool scaled);
124 bool HasNodeOnBase();
125 bool HasNodeOnSurface();
126 IssmDouble IceMass(bool scaled);
127 IssmDouble IceMass(IssmDouble* mask, bool scaled);
128 IssmDouble IceVolume(IssmDouble* mask, bool scaled);
129 IssmDouble IceVolumeAboveFloatation(IssmDouble* mask, bool scaled);
130 int Id();
131 void InputCreate(IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
132 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);
133 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);
134 void InputUpdateFromConstant(IssmDouble constant, int name);
135 void InputUpdateFromConstant(int constant, int name);
136 void InputUpdateFromConstant(bool constant, int name);
137
138 bool IsFloating();
139 bool IsGrounded();
140 bool IsOnBase();
141 bool IsOnSurface();
142 bool IsIceInElement();
143 bool IsIceOnlyInElement();
144 bool IsLandInElement();
145 void Ismip6FloatingiceMeltingRate();
146 bool IsWaterInElement();
147 void LinearFloatingiceMeltingRate();
148 void SpatialLinearFloatingiceMeltingRate();
149 void MantlePlumeGeothermalFlux();
150 void MarshallElement(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction,int numanalyses);
151 void MigrateGroundingLine(IssmDouble* sheet_ungrounding);
152 void MismipFloatingiceMeltingRate();
153 void BeckmannGoosseFloatingiceMeltingRate();
154 void MungsmtpParameterization(void);
155 ElementMatrix* NewElementMatrix(int approximation_enum=NoneApproximationEnum);
156 ElementMatrix* NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
157 ElementVector* NewElementVector(int approximation_enum=NoneApproximationEnum);
158 void PicoUpdateBoxid(int* pmax_boxid_basin);
159 void PicoUpdateBox(int loopboxid);
160 void PicoComputeBasalMelt();
161 void PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac);
162 void PositiveDegreeDaySicopolis(bool isfirnwarming);
163 void ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
164 void ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum);
165 void ResultToMatrix(IssmDouble* values,int ncols,int output_enum);
166 void ResultToVector(Vector<IssmDouble>* vector,int output_enum);
167 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
168 void SetBoolInput(Inputs2* inputs2,int enum_in,bool value);
169
170 void SetIntInput(Inputs2* inputs2,int enum_in,int value);
171 void SmbSemic();
172 int Sid();
173 void SmbGemb();
174 void StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
175 void StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
176 void StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
177 void StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
178 void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
179 void StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input);
180 void StressMaxPrincipalCreateInput(void);
181 IssmDouble TotalFloatingBmb(IssmDouble* mask, bool scaled);
182 IssmDouble TotalGroundedBmb(IssmDouble* mask, bool scaled);
183 IssmDouble TotalSmb(IssmDouble* mask, bool scaled);
184 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
185 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
186 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
187 void TransformLoadVectorCoord(ElementVector* pe,int cs_enum);
188 void TransformLoadVectorCoord(ElementVector* pe,int* cs_array);
189 void TransformLoadVectorCoord(ElementVector* pe,Node** nodes,int numnodes,int cs_enum);
190 void TransformLoadVectorCoord(ElementVector* pe,Node** nodes,int numnodes,int* cs_array);
191 void TransformLoadVectorCoord(ElementVector* pe,int numnodes,int transformenum){_error_("not implemented yet");};/*Tiling only*/
192 void TransformLoadVectorCoord(ElementVector* pe,int numnodes,int* transformenum_list){_error_("not implemented yet");};/*Tiling only*/
193 void TransformSolutionCoord(IssmDouble* solution,int cs_enum);
194 void TransformSolutionCoord(IssmDouble* solution,int* cs_array);
195 void TransformSolutionCoord(IssmDouble* solution,int numnodes,int cs_enum);
196 void TransformSolutionCoord(IssmDouble* solution,int numnodes,int* cs_array);
197 void TransformSolutionCoord(IssmDouble* solution,Node** nodes,int numnodes,int cs_enum);
198 void TransformSolutionCoord(IssmDouble* solution,Node** nodes,int numnodes,int* cs_array);
199 void TransformStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
200 void TransformStiffnessMatrixCoord(ElementMatrix* Ke,int* cs_array);
201 void TransformStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
202 void TransformStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
203 void TransformStiffnessMatrixCoord(ElementMatrix* Ke,int numnodes,int* transformenum_list){_error_("not implemented yet");};/*Tiling only*/
204 void ViscousHeatingCreateInput(void);
205 void ThermalToEnthalpy(IssmDouble * penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
206 IssmDouble TMeltingPoint(IssmDouble pressure);
207 void EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure);
208 IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure);
209 IssmDouble EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure);
210 IssmDouble PureIceEnthalpy(IssmDouble pressure);
211
212
213 /*Virtual functions*/
214 virtual void AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
215 virtual void AddInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
216 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");};
217 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");};
218 virtual void AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
219 virtual void BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");};
220 virtual void CalvingRateVonmises(void){_error_("not implemented yet");};
221 virtual void CalvingCrevasseDepth(void){_error_("not implemented yet");};
222 virtual void CalvingRateLevermann(void)=0;
223 virtual void CalvingFluxLevelset(void){_error_("not implemented yet");};
224 virtual void CalvingMeltingFluxLevelset(void){_error_("not implemented yet");};
225 virtual IssmDouble CharacteristicLength(void)=0;
226 virtual void ComputeBasalStress(void){_error_("not implemented yet");};
227 virtual void ComputeDeviatoricStressTensor(void)=0;
228 virtual void ComputeSigmaNN(void)=0;
229 virtual void ComputeStressTensor(void)=0;
230 virtual void ComputeEsaStrainAndVorticity(void)=0;
231 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs2* inputs2in)=0;
232 virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M)=0;
233 virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
234 virtual void ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum)=0;
235 virtual void CreateDistanceInputFromSegmentlist(IssmDouble* distances,int distanceenum){_error_("not implemented yet");};
236 virtual void CreateInputTimeAverage(int transientinput_enum,int averagedinput_enum,IssmDouble init_time,IssmDouble end_time){_error_("not implemented yet "<<this->ObjectEnum());};
237 virtual void ElementResponse(IssmDouble* presponse,int response_enum)=0;
238 virtual void ElementSizes(IssmDouble* phx,IssmDouble* phy,IssmDouble* phz)=0;
239 virtual int FiniteElement(void)=0;
240 virtual IssmDouble FloatingArea(bool scaled)=0;
241 virtual void FSContactMigration(Vector<IssmDouble>* vertex_sigmann,Vector<IssmDouble>* vertex_waterpressure)=0;
242 virtual Element* GetBasalElement(void)=0;
243 virtual int GetElementType(void)=0;
244 virtual IssmDouble GetHorizontalSurfaceArea(void){_error_("not implemented");};
245 virtual void GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating)=0;
246 virtual IssmDouble GetGroundedPortion(IssmDouble* xyz_list)=0;
247 virtual IssmDouble GetIcefrontArea(){_error_("not implemented");};
248 virtual void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
249 virtual DatasetInput2* GetDatasetInput2(int inputenum){_error_("not implemented");};
250 virtual Input2* GetInput2(int inputenum)=0;
251 virtual Input2* GetInput2(int inputenum,IssmDouble time)=0;
252 virtual void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");};
253 virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
254 virtual void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0;
255 virtual void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0;
256 virtual void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level)=0;
257 virtual void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues)=0;
258 virtual int GetVertexIndex(Vertex* vertex){_error_("not implemented");};;
259 virtual int GetNumberOfNodes(void)=0;
260 virtual int GetNumberOfNodes(int enum_type)=0;
261 virtual int GetNumberOfVertices(void)=0;
262 virtual void GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset)=0;
263 virtual void GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
264 virtual void GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
265 virtual void GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
266 virtual IssmDouble GroundedArea(bool scaled)=0;
267 virtual IssmDouble IceVolume(bool scaled)=0;
268 virtual IssmDouble IceVolumeAboveFloatation(bool scaled)=0;
269 virtual IssmDouble IcefrontMassFlux(bool scaled){_error_("not implemented");};
270 virtual IssmDouble IcefrontMassFluxLevelset(bool scaled){_error_("not implemented");};
271 virtual IssmDouble GroundinglineMassFlux(bool scaled){_error_("not implemented");};
272 virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type)=0;
273 virtual void DatasetInputExtrude(int input_enum,int start){_error_("not implemented yet");};
274 virtual void InputExtrude(int input_enum,int start)=0;
275 virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0;
276 virtual void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum)=0;
277 #ifdef _HAVE_DAKOTA_
278 virtual void InputUpdateFromMatrixDakota(IssmDouble* matrix, int rows, int ncols, int name, int type)=0;
279 virtual void InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type)=0;
280 #endif
281 virtual void InputUpdateFromIoModel(int index, IoModel* iomodel)=0;
282 virtual void InputUpdateFromVector(IssmDouble* vector, int name, int type)=0;
283 virtual bool IsFaceOnBoundary(void)=0;
284 virtual bool IsIcefront(void)=0;
285 virtual bool IsNodeOnShelfFromFlags(IssmDouble* flags)=0;
286
287 virtual bool IsZeroLevelset(int levelset_enum)=0;
288 virtual void JacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0;
289 virtual void JacobianDeterminantBase(IssmDouble* Jdet,IssmDouble* xyz_list_base,Gauss* gauss)=0;
290 virtual void JacobianDeterminantLine(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0;
291 virtual void JacobianDeterminantSurface(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0;
292 virtual void JacobianDeterminantTop(IssmDouble* Jdet,IssmDouble* xyz_list_base,Gauss* gauss)=0;
293 virtual void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction)=0;
294 virtual IssmDouble Masscon(IssmDouble* levelset)=0;
295 virtual IssmDouble MassFlux(IssmDouble* segment)=0;
296 virtual IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id)=0;
297 virtual IssmDouble MinEdgeLength(IssmDouble* xyz_list)=0;
298 virtual IssmDouble Misfit(int modelenum,int observationenum,int weightsenum)=0;
299 virtual IssmDouble MisfitArea(int weightsenum)=0;
300 virtual Gauss* NewGauss(void)=0;
301 virtual Gauss* NewGauss(int order)=0;
302 virtual Gauss* NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order)=0;
303 virtual Gauss* NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert)=0;
304 virtual Gauss* NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order)=0;
305 virtual Gauss* NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order)=0;
306 virtual Gauss* NewGaussBase(int order)=0;
307 virtual Gauss* NewGaussLine(int vertex1,int vertex2,int order)=0;
308 virtual Gauss* NewGaussTop(int order)=0;
309 virtual void NodalFunctions(IssmDouble* basis,Gauss* gauss)=0;
310 virtual void NodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
311 virtual void NodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
312 virtual void NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
313 virtual void NodalFunctionsPressure(IssmDouble* basis, Gauss* gauss)=0;
314 virtual void NodalFunctionsP1(IssmDouble* basis,Gauss* gauss)=0;
315 virtual void NodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0;
316 virtual void NodalFunctionsP2(IssmDouble* basis,Gauss* gauss)=0;
317 virtual void NodalFunctionsVelocity(IssmDouble* basis, Gauss* gauss)=0;
318 virtual void NodalFunctionsTensor(IssmDouble* basis, Gauss* gauss)=0;
319 virtual int NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0;
320 virtual void NormalBase(IssmDouble* normal,IssmDouble* xyz_list)=0;
321 virtual void NormalSection(IssmDouble* normal,IssmDouble* xyz_list)=0;
322 virtual void NormalTop(IssmDouble* normal,IssmDouble* xyz_list)=0;
323 virtual int NumberofNodesPressure(void)=0;
324 virtual int NumberofNodesVelocity(void)=0;
325 virtual void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
326 virtual int PressureInterpolation()=0;
327 virtual void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0;
328 virtual void ResetFSBasalBoundaryCondition()=0;
329 virtual void ResetHooks()=0;
330 virtual void RignotMeltParameterization(void){_error_("not implemented yet");};
331 virtual void SetElementInput(int enum_in,IssmDouble values){_error_("not implemented yet");};
332 virtual void SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values){_error_("not implemented yet");};
333 virtual void SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){_error_("not implemented yet");};
334 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M)=0;
335 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
336 virtual void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
337 virtual void SetTemporaryElementType(int element_type_in)=0;
338 virtual Element* SpawnBasalElement(void)=0;
339 virtual Element* SpawnTopElement(void)=0;
340 virtual IssmDouble StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)=0;
341 virtual void StabilizationParameterAnisotropic(IssmDouble* tau_parameter_anisotropic, IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble hx, IssmDouble hy, IssmDouble hz, IssmDouble kappa)=0;
342 virtual void StrainRateparallel(void)=0;
343 virtual void StrainRateperpendicular(void)=0;
344 virtual void StressIntensityFactor(void)=0;
345 virtual IssmDouble SurfaceArea(void)=0;
346 virtual int TensorInterpolation()=0;
347 virtual IssmDouble TimeAdapt()=0;
348 virtual IssmDouble TotalCalvingFluxLevelset(bool scaled){_error_("not implemented");};
349 virtual IssmDouble TotalCalvingMeltingFluxLevelset(bool scaled){_error_("not implemented");};
350 virtual IssmDouble TotalFloatingBmb(bool scaled)=0;
351 virtual IssmDouble TotalGroundedBmb(bool scaled)=0;
352 virtual IssmDouble TotalSmb(bool scaled)=0;
353 virtual void Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
354 virtual void UpdateConstraintsExtrudeFromBase(void)=0;
355 virtual void UpdateConstraintsExtrudeFromTop(void)=0;
356 virtual int UpdatePotentialUngrounding(IssmDouble* potential_sheet_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf)=0;
357 virtual void ValueP1DerivativesOnGauss(IssmDouble* dvalue,IssmDouble* values,IssmDouble* xyz_list,Gauss* gauss)=0;
358 virtual void ValueP1OnGauss(IssmDouble* pvalue,IssmDouble* values,Gauss* gauss)=0;
359 virtual int VelocityInterpolation()=0;
360 virtual int VertexConnectivity(int vertexindex)=0;
361 virtual void VerticalSegmentIndices(int** pindices,int* pnumseg)=0;
362 virtual void VerticalSegmentIndicesBase(int** pindices,int* pnumseg)=0;
363 virtual void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){_error_("not implemented yet");};
364 virtual void WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");};
365
366 #ifdef _HAVE_GIAIVINS_
367 virtual void GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
368 #endif
369 #ifdef _HAVE_ESA_
370 virtual void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy)=0;
371 virtual void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea)=0;
372 #endif
373 #ifdef _HAVE_SEALEVELRISE_
374 virtual void UpdateStericRate(int dslmodel)=0;
375 virtual void UpdateDynamicRate(int dslmodel)=0;
376 virtual IssmDouble GetArea3D(void)=0;
377 virtual IssmDouble GetAreaSpherical(void)=0;
378 virtual IssmDouble OceanAverage(IssmDouble* Sg)=0;
379 virtual IssmDouble OceanArea(void)=0;
380 virtual void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,IssmDouble eartharea)=0;
381 virtual void SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea)=0;
382 virtual void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea)=0;
383 virtual void SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz)=0;
384 #endif
385
386};
387#endif
Note: See TracBrowser for help on using the repository browser.