Ice Sheet System Model  4.18
Code documentation
Public Member Functions
TetraRef Class Reference

#include <TetraRef.h>

Inheritance diagram for TetraRef:
Tetra

Public Member Functions

 TetraRef ()
 
 ~TetraRef ()
 
void GetInputDerivativeValue (IssmDouble *p, IssmDouble *plist, IssmDouble *xyz_list, GaussTetra *gauss, int finiteelement)
 
void GetInputValue (IssmDouble *p, IssmDouble *plist, Gauss *gauss, int finiteelement)
 
void GetJacobian (IssmDouble *J, IssmDouble *xyz_list, GaussTetra *gauss)
 
void GetJacobianDeterminant (IssmDouble *Jdet, IssmDouble *xyz_list, GaussTetra *gauss)
 
void GetJacobianDeterminantFace (IssmDouble *Jdet, IssmDouble *xyz_list, GaussTetra *gauss)
 
void GetJacobianInvert (IssmDouble *Jinv, IssmDouble *xyz_list, GaussTetra *gauss)
 
void GetNodalFunctions (IssmDouble *basis, Gauss *gauss_in, int finiteelement)
 
void GetNodalFunctionsDerivatives (IssmDouble *dbasis, IssmDouble *xyz_list, GaussTetra *gauss, int finiteelement)
 
void GetNodalFunctionsDerivativesReference (IssmDouble *dbasis, GaussTetra *gauss, int finiteelement)
 
void Marshall (char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
 
int NumberofNodes (int finiteelement)
 
int PressureInterpolation (int fe_stokes)
 
int TensorInterpolation (int fe_stokes)
 
int VelocityInterpolation (int fe_stokes)
 

Detailed Description

Definition at line 12 of file TetraRef.h.

Constructor & Destructor Documentation

◆ TetraRef()

TetraRef::TetraRef ( )

Definition at line 25 of file TetraRef.cpp.

25  {/*{{{*/
26 }

◆ ~TetraRef()

TetraRef::~TetraRef ( )

Definition at line 28 of file TetraRef.cpp.

28  {/*{{{*/
29 }

Member Function Documentation

◆ GetInputDerivativeValue()

void TetraRef::GetInputDerivativeValue ( IssmDouble p,
IssmDouble plist,
IssmDouble xyz_list,
GaussTetra gauss,
int  finiteelement 
)

Definition at line 33 of file TetraRef.cpp.

33  {/*{{{*/
34  /*From node values of parameter p (p_list[0], p_list[1], p_list[2],
35  * p_list[3], p_list[4] and p_list[4]), return parameter derivative value at
36  * gaussian point specified by gauss_coord:
37  * dp/dx=p_list[0]*dh1/dx+p_list[1]*dh2/dx+p_list[2]*dh3/dx+p_list[3]*dh4/dx+p_list[4]*dh5/dx+p_list[5]*dh6/dx;
38  * dp/dy=p_list[0]*dh1/dy+p_list[1]*dh2/dy+p_list[2]*dh3/dy+p_list[3]*dh4/dy+p_list[4]*dh5/dy+p_list[5]*dh6/dy;
39  * dp/dz=p_list[0]*dh1/dz+p_list[1]*dh2/dz+p_list[2]*dh3/dz+p_list[3]*dh4/dz+p_list[4]*dh5/dz+p_list[5]*dh6/dz;
40  *
41  * p is a vector of size 3x1 already allocated.
42  *
43  * WARNING: For a significant gain in performance, it is better to use
44  * static memory allocation instead of dynamic.
45  */
46 
47  /*Allocate derivatives of basis functions*/
48  IssmDouble dbasis[3*NUMNODESMAX];
49 
50  /*Fetch number of nodes for this finite element*/
51  int numnodes = this->NumberofNodes(finiteelement);
52  _assert_(numnodes<=NUMNODESMAX);
53 
54  /*Get basis functions derivatives at this point*/
55  GetNodalFunctionsDerivatives(&dbasis[0],xyz_list,gauss,finiteelement);
56 
57  /*Calculate parameter for this Gauss point*/
58  IssmDouble dpx=0.;
59  IssmDouble dpy=0.;
60  IssmDouble dpz=0.;
61  for(int i=0;i<numnodes;i++) dpx += dbasis[0*numnodes+i]*plist[i];
62  for(int i=0;i<numnodes;i++) dpy += dbasis[1*numnodes+i]*plist[i];
63  for(int i=0;i<numnodes;i++) dpz += dbasis[2*numnodes+i]*plist[i];
64 
65  /*Assign values*/
66  p[0]=dpx;
67  p[1]=dpy;
68  p[2]=dpz;
69 }

◆ GetInputValue()

void TetraRef::GetInputValue ( IssmDouble p,
IssmDouble plist,
Gauss gauss,
int  finiteelement 
)

Definition at line 71 of file TetraRef.cpp.

71  {/*{{{*/
72  /* WARNING: For a significant gain in performance, it is better to use
73  * static memory allocation instead of dynamic.*/
74 
75  /*Allocate basis functions*/
76  IssmDouble basis[NUMNODESMAX];
77 
78  /*Fetch number of nodes for this finite element*/
79  int numnodes = this->NumberofNodes(finiteelement);
80  _assert_(numnodes<=NUMNODESMAX);
81 
82  /*Get basis functions at this point*/
83  GetNodalFunctions(&basis[0],gauss,finiteelement);
84 
85  /*Calculate parameter for this Gauss point*/
86  IssmDouble value =0.;
87  for(int i=0;i<numnodes;i++) value += basis[i]*plist[i];
88 
89  /*Assign output pointer*/
90  *p = value;
91 }

◆ GetJacobian()

void TetraRef::GetJacobian ( IssmDouble J,
IssmDouble xyz_list,
GaussTetra gauss 
)

Definition at line 93 of file TetraRef.cpp.

93  {/*{{{*/
94  /*The Jacobian is constant over the element, discard the gaussian points.
95  * J is assumed to have been allocated of size 1*/
96 
97  IssmDouble x1=xyz_list[3*0+0];
98  IssmDouble x2=xyz_list[3*1+0];
99  IssmDouble x3=xyz_list[3*2+0];
100  IssmDouble x4=xyz_list[3*3+0];
101 
102  IssmDouble y1=xyz_list[3*0+1];
103  IssmDouble y2=xyz_list[3*1+1];
104  IssmDouble y3=xyz_list[3*2+1];
105  IssmDouble y4=xyz_list[3*3+1];
106 
107  IssmDouble z1=xyz_list[3*0+2];
108  IssmDouble z2=xyz_list[3*1+2];
109  IssmDouble z3=xyz_list[3*2+2];
110  IssmDouble z4=xyz_list[3*3+2];
111 
112  J[3*0+0] = x2-x1;
113  J[3*0+1] = y2-y1;
114  J[3*0+2] = z2-z1;
115 
116  J[3*1+0] = x3-x1;
117  J[3*1+1] = y3-y1;
118  J[3*1+2] = z3-z1;
119 
120  J[3*2+0] = x4-x1;
121  J[3*2+1] = y4-y1;
122  J[3*2+2] = z4-z1;
123 }

◆ GetJacobianDeterminant()

void TetraRef::GetJacobianDeterminant ( IssmDouble Jdet,
IssmDouble xyz_list,
GaussTetra gauss 
)

Definition at line 125 of file TetraRef.cpp.

125  {/*{{{*/
126  /*The Jacobian determinant is constant over the element, discard the gaussian points.
127  * J is assumed to have been allocated of size 2x2.*/
128  IssmDouble J[3][3];
129 
130  /*Call Jacobian routine to get the jacobian:*/
131  GetJacobian(&J[0][0],xyz_list, gauss);
132 
133  /*Get Determinant*/
134  Matrix3x3Determinant(Jdet,&J[0][0]);
135  if(*Jdet<0) _error_("negative jacobian determinant!");
136 
137 }

◆ GetJacobianDeterminantFace()

void TetraRef::GetJacobianDeterminantFace ( IssmDouble Jdet,
IssmDouble xyz_list,
GaussTetra gauss 
)

Definition at line 139 of file TetraRef.cpp.

139  {/*{{{*/
140  /*The Jacobian determinant is constant over the element, discard the gaussian points.
141  * J is assumed to have been allocated of size 2x2.*/
142 
143  IssmDouble x1=xyz_list[3*0+0];
144  IssmDouble y1=xyz_list[3*0+1];
145  IssmDouble z1=xyz_list[3*0+2];
146  IssmDouble x2=xyz_list[3*1+0];
147  IssmDouble y2=xyz_list[3*1+1];
148  IssmDouble z2=xyz_list[3*1+2];
149  IssmDouble x3=xyz_list[3*2+0];
150  IssmDouble y3=xyz_list[3*2+1];
151  IssmDouble z3=xyz_list[3*2+2];
152 
153  /*Jdet = norm( AB ^ AC ) / (2 * area of the reference triangle), with areaRef=sqrt(3) */
154  *Jdet=SQRT3/6.*pow(pow(((y2-y1)*(z3-z1)-(z2-z1)*(y3-y1)),2)+pow(((z2-z1)*(x3-x1)-(x2-x1)*(z3-z1)),2)+pow(((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)),2),0.5);
155  if(*Jdet<0) _error_("negative jacobian determinant!");
156 }

◆ GetJacobianInvert()

void TetraRef::GetJacobianInvert ( IssmDouble Jinv,
IssmDouble xyz_list,
GaussTetra gauss 
)

Definition at line 158 of file TetraRef.cpp.

158  {/*{{{*/
159 
160  /*Jacobian*/
161  IssmDouble J[3][3];
162 
163  /*Call Jacobian routine to get the jacobian:*/
164  GetJacobian(&J[0][0], xyz_list, gauss);
165 
166  /*Invert Jacobian matrix: */
167  Matrix3x3Invert(Jinv,&J[0][0]);
168 }

◆ GetNodalFunctions()

void TetraRef::GetNodalFunctions ( IssmDouble basis,
Gauss gauss_in,
int  finiteelement 
)

Definition at line 170 of file TetraRef.cpp.

170  {/*{{{*/
171  /*This routine returns the values of the nodal functions at the gaussian point.*/
172 
173  _assert_(basis);
174 
175  /*Cast gauss to GaussTetra*/
176  _assert_(gauss_in->Enum()==GaussTetraEnum);
177  GaussTetra* gauss = xDynamicCast<GaussTetra*>(gauss_in);
178 
179  switch(finiteelement){
180  case P0Enum:
181  basis[0]=1.;
182  return;
183  case P1Enum: case P1DGEnum:
184  basis[0]=gauss->coord1;
185  basis[1]=gauss->coord2;
186  basis[2]=gauss->coord3;
187  basis[3]=gauss->coord4;
188  return;
190  /*Corner nodes*/
191  basis[0]=gauss->coord1;
192  basis[1]=gauss->coord2;
193  basis[2]=gauss->coord3;
194  basis[3]=gauss->coord4;
195  /*bubble*/
196  basis[4]=256.*gauss->coord1*gauss->coord2*gauss->coord3*gauss->coord4;
197  return;
198  case P2Enum:
199  /*Vertices*/
200  basis[0]=gauss->coord1*(2.*gauss->coord1-1.);
201  basis[1]=gauss->coord2*(2.*gauss->coord2-1.);
202  basis[2]=gauss->coord3*(2.*gauss->coord3-1.);
203  basis[3]=gauss->coord4*(2.*gauss->coord4-1.);
204  /*Edges*/
205  basis[4]=4.*gauss->coord2*gauss->coord3;
206  basis[5]=4.*gauss->coord1*gauss->coord3;
207  basis[6]=4.*gauss->coord1*gauss->coord2;
208  basis[7]=4.*gauss->coord2*gauss->coord4;
209  basis[8]=4.*gauss->coord3*gauss->coord4;
210  basis[9]=4.*gauss->coord1*gauss->coord4;
211  return;
212  default:
213  _error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
214  }
215 }

◆ GetNodalFunctionsDerivatives()

void TetraRef::GetNodalFunctionsDerivatives ( IssmDouble dbasis,
IssmDouble xyz_list,
GaussTetra gauss,
int  finiteelement 
)

Definition at line 217 of file TetraRef.cpp.

217  {/*{{{*/
218 
219  /*This routine returns the values of the nodal functions derivatives (with respect to the
220  * actual coordinate system): */
221  IssmDouble Jinv[3][3];
222 
223  /*Fetch number of nodes for this finite element*/
224  int numnodes = this->NumberofNodes(finiteelement);
225 
226  /*Get nodal functions derivatives in reference triangle*/
227  IssmDouble dbasis_ref[3*NUMNODESMAX];
228  GetNodalFunctionsDerivativesReference(dbasis_ref,gauss,finiteelement);
229 
230  /*Get Jacobian invert: */
231  GetJacobianInvert(&Jinv[0][0], xyz_list, gauss);
232 
233  /*Build dbasis:
234  *
235  * [dhi/dx]= Jinv'*[dhi/dr]
236  * [dhi/dy] [dhi/ds]
237  * [dhi/dz] [dhi/dzeta]
238  */
239 
240  for(int i=0;i<numnodes;i++){
241  dbasis[numnodes*0+i]=Jinv[0][0]*dbasis_ref[0*numnodes+i]+Jinv[0][1]*dbasis_ref[1*numnodes+i]+Jinv[0][2]*dbasis_ref[2*numnodes+i];
242  dbasis[numnodes*1+i]=Jinv[1][0]*dbasis_ref[0*numnodes+i]+Jinv[1][1]*dbasis_ref[1*numnodes+i]+Jinv[1][2]*dbasis_ref[2*numnodes+i];
243  dbasis[numnodes*2+i]=Jinv[2][0]*dbasis_ref[0*numnodes+i]+Jinv[2][1]*dbasis_ref[1*numnodes+i]+Jinv[2][2]*dbasis_ref[2*numnodes+i];
244  }
245 }

◆ GetNodalFunctionsDerivativesReference()

void TetraRef::GetNodalFunctionsDerivativesReference ( IssmDouble dbasis,
GaussTetra gauss,
int  finiteelement 
)

Definition at line 247 of file TetraRef.cpp.

247  {/*{{{*/
248  /*This routine returns the values of the nodal functions derivatives (with respect to the
249  * natural coordinate system) at the gaussian point. */
250 
251  _assert_(dbasis && gauss);
252 
253  switch(finiteelement){
254  case P0Enum:
255  /*Nodal function 1*/
256  dbasis[NUMNODESP0*0+0] = 0.;
257  dbasis[NUMNODESP0*1+0] = 0.;
258  dbasis[NUMNODESP0*2+0] = 0.;
259  return;
260  case P1Enum: case P1DGEnum:
261  dbasis[NUMNODESP1*0+0] = -1.;
262  dbasis[NUMNODESP1*1+0] = -1.;
263  dbasis[NUMNODESP1*2+0] = -1.;
264 
265  dbasis[NUMNODESP1*0+1] = 1.;
266  dbasis[NUMNODESP1*1+1] = 0.;
267  dbasis[NUMNODESP1*2+1] = 0.;
268 
269  dbasis[NUMNODESP1*0+2] = 0.;
270  dbasis[NUMNODESP1*1+2] = 1.;
271  dbasis[NUMNODESP1*2+2] = 0.;
272 
273  dbasis[NUMNODESP1*0+3] = 0.;
274  dbasis[NUMNODESP1*1+3] = 0.;
275  dbasis[NUMNODESP1*2+3] = 1.;
276  return;
278  dbasis[NUMNODESP1b*0+0] = -1.;
279  dbasis[NUMNODESP1b*1+0] = -1.;
280  dbasis[NUMNODESP1b*2+0] = -1.;
281 
282  dbasis[NUMNODESP1b*0+1] = 1.;
283  dbasis[NUMNODESP1b*1+1] = 0.;
284  dbasis[NUMNODESP1b*2+1] = 0.;
285 
286  dbasis[NUMNODESP1b*0+2] = 0.;
287  dbasis[NUMNODESP1b*1+2] = 1.;
288  dbasis[NUMNODESP1b*2+2] = 0.;
289 
290  dbasis[NUMNODESP1b*0+3] = 0.;
291  dbasis[NUMNODESP1b*1+3] = 0.;
292  dbasis[NUMNODESP1b*2+3] = 1.;
293 
294  dbasis[NUMNODESP1b*0+4] = 256.*(-gauss->coord2*gauss->coord3*gauss->coord4+gauss->coord1*gauss->coord3*gauss->coord4);
295  dbasis[NUMNODESP1b*1+4] = 256.*(-gauss->coord2*gauss->coord3*gauss->coord4+gauss->coord1*gauss->coord2*gauss->coord4);
296  dbasis[NUMNODESP1b*2+4] = 256.*(-gauss->coord2*gauss->coord3*gauss->coord4+gauss->coord1*gauss->coord2*gauss->coord3);
297  return;
298  case P2Enum:
299  dbasis[NUMNODESP2*0+0] = -4.*gauss->coord1+1.;
300  dbasis[NUMNODESP2*1+0] = -4.*gauss->coord1+1.;
301  dbasis[NUMNODESP2*2+0] = -4.*gauss->coord1+1.;
302 
303  dbasis[NUMNODESP2*0+1] = 4.*gauss->coord2-1.;
304  dbasis[NUMNODESP2*1+1] = 0.;
305  dbasis[NUMNODESP2*2+1] = 0.;
306 
307  dbasis[NUMNODESP2*0+2] = 0.;
308  dbasis[NUMNODESP2*1+2] = 4.*gauss->coord3-1.;
309  dbasis[NUMNODESP2*2+2] = 0.;
310 
311  dbasis[NUMNODESP2*0+3] = 0.;
312  dbasis[NUMNODESP2*1+3] = 0.;
313  dbasis[NUMNODESP2*2+3] = 4.*gauss->coord4-1.;
314 
315  dbasis[NUMNODESP2*0+4] = 4.*gauss->coord3;
316  dbasis[NUMNODESP2*1+4] = 4.*gauss->coord2;
317  dbasis[NUMNODESP2*2+4] = 0.;
318 
319  dbasis[NUMNODESP2*0+5] = -4.*gauss->coord3;
320  dbasis[NUMNODESP2*1+5] = 4.*(gauss->coord1-gauss->coord3);
321  dbasis[NUMNODESP2*2+5] = -4.*gauss->coord3;
322 
323  dbasis[NUMNODESP2*0+6] = 4.*(gauss->coord1-gauss->coord2);
324  dbasis[NUMNODESP2*1+6] = -4.*gauss->coord2;
325  dbasis[NUMNODESP2*2+6] = -4.*gauss->coord2;
326 
327  dbasis[NUMNODESP2*0+7] = 4.*gauss->coord4;
328  dbasis[NUMNODESP2*1+7] = 0.;
329  dbasis[NUMNODESP2*2+7] = 4.*gauss->coord2;
330 
331  dbasis[NUMNODESP2*0+8] = 0.;
332  dbasis[NUMNODESP2*1+8] = 4.*gauss->coord4;
333  dbasis[NUMNODESP2*2+8] = 4.*gauss->coord3;
334 
335  dbasis[NUMNODESP2*0+9] = -4.*gauss->coord4;
336  dbasis[NUMNODESP2*1+9] = -4.*gauss->coord4;
337  dbasis[NUMNODESP2*2+9] = 4.*(gauss->coord1-gauss->coord4);
338  return;
339  default:
340  _error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
341  }
342 
343 }

◆ Marshall()

void TetraRef::Marshall ( char **  pmarshalled_data,
int *  pmarshalled_data_size,
int  marshall_direction 
)
inline

Definition at line 27 of file TetraRef.h.

27 { /*do nothing */};

◆ NumberofNodes()

int TetraRef::NumberofNodes ( int  finiteelement)

Definition at line 345 of file TetraRef.cpp.

345  {/*{{{*/
346 
347  switch(finiteelement){
348  case P0Enum: return NUMNODESP0;
349  case P1Enum: return NUMNODESP1;
350  case P1DGEnum: return NUMNODESP1;
351  case P1bubbleEnum: return NUMNODESP1b;
352  case P1bubblecondensedEnum: return NUMNODESP1b;
353  case P2Enum: return NUMNODESP2;
354  case P1P1Enum: return NUMNODESP1*2;
355  case P1P1GLSEnum: return NUMNODESP1*2;
357  case MINIEnum: return NUMNODESP1b+NUMNODESP1;
358  case TaylorHoodEnum: return NUMNODESP2+NUMNODESP1;
359  case LATaylorHoodEnum: return NUMNODESP2;
361  default: _error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
362  }
363 
364  return -1;
365 }

◆ PressureInterpolation()

int TetraRef::PressureInterpolation ( int  fe_stokes)

Definition at line 367 of file TetraRef.cpp.

367  {/*{{{*/
368 
369  switch(fe_stokes){
370  case P1P1Enum: return P1Enum;
371  case P1P1GLSEnum: return P1Enum;
372  case MINIcondensedEnum: return P1Enum;
373  case MINIEnum: return P1Enum;
374  case TaylorHoodEnum: return P1Enum;
375  case LATaylorHoodEnum: return NoneEnum;
376  case XTaylorHoodEnum: return P1Enum;
377  default: _error_("Element type "<<EnumToStringx(fe_stokes)<<" not supported yet");
378  }
379 
380  return -1;
381 }/*}}}*/

◆ TensorInterpolation()

int TetraRef::TensorInterpolation ( int  fe_stokes)

Definition at line 382 of file TetraRef.cpp.

382  {/*{{{*/
383  /*This routine returns the values of the nodal functions at the gaussian point.*/
384 
385  switch(fe_stokes){
386  case XTaylorHoodEnum: return P1DGEnum;
387  default: _error_("Element type "<<EnumToStringx(fe_stokes)<<" not supported yet");
388  }
389 }

◆ VelocityInterpolation()

int TetraRef::VelocityInterpolation ( int  fe_stokes)

Definition at line 391 of file TetraRef.cpp.

391  {/*{{{*/
392 
393  switch(fe_stokes){
394  case P1P1Enum: return P1Enum;
395  case P1P1GLSEnum: return P1Enum;
396  case MINIcondensedEnum: return P1bubbleEnum;
397  case MINIEnum: return P1bubbleEnum;
398  case TaylorHoodEnum: return P2Enum;
399  case LATaylorHoodEnum: return P2Enum;
400  case XTaylorHoodEnum: return P2Enum;
401  default: _error_("Element type "<<EnumToStringx(fe_stokes)<<" not supported yet");
402  }
403 
404  return -1;
405 }

The documentation for this class was generated from the following files:
GaussTetra
Definition: GaussTetra.h:12
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
IssmDouble
double IssmDouble
Definition: types.h:37
MINIEnum
@ MINIEnum
Definition: EnumDefinitions.h:1156
P0Enum
@ P0Enum
Definition: EnumDefinitions.h:661
NUMNODESP0
#define NUMNODESP0
Definition: TetraRef.cpp:18
GaussTetra::coord4
IssmDouble coord4
Definition: GaussTetra.h:26
P1DGEnum
@ P1DGEnum
Definition: EnumDefinitions.h:1215
NUMNODESP1b
#define NUMNODESP1b
Definition: TetraRef.cpp:20
P1bubblecondensedEnum
@ P1bubblecondensedEnum
Definition: EnumDefinitions.h:1219
TetraRef::GetNodalFunctionsDerivativesReference
void GetNodalFunctionsDerivativesReference(IssmDouble *dbasis, GaussTetra *gauss, int finiteelement)
Definition: TetraRef.cpp:247
GaussTetraEnum
@ GaussTetraEnum
Definition: EnumDefinitions.h:1080
TetraRef::NumberofNodes
int NumberofNodes(int finiteelement)
Definition: TetraRef.cpp:345
P1Enum
@ P1Enum
Definition: EnumDefinitions.h:662
TaylorHoodEnum
@ TaylorHoodEnum
Definition: EnumDefinitions.h:1299
Matrix3x3Invert
void Matrix3x3Invert(IssmDouble *Ainv, IssmDouble *A)
Definition: MatrixUtils.cpp:448
LATaylorHoodEnum
@ LATaylorHoodEnum
Definition: EnumDefinitions.h:1139
GaussTetra::coord1
IssmDouble coord1
Definition: GaussTetra.h:23
GaussTetra::coord3
IssmDouble coord3
Definition: GaussTetra.h:25
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
P1P1Enum
@ P1P1Enum
Definition: EnumDefinitions.h:1216
MINIcondensedEnum
@ MINIcondensedEnum
Definition: EnumDefinitions.h:1157
Gauss::Enum
virtual int Enum(void)=0
TetraRef::GetJacobianInvert
void GetJacobianInvert(IssmDouble *Jinv, IssmDouble *xyz_list, GaussTetra *gauss)
Definition: TetraRef.cpp:158
P1bubbleEnum
@ P1bubbleEnum
Definition: EnumDefinitions.h:1218
NUMNODESP2
#define NUMNODESP2
Definition: TetraRef.cpp:21
TetraRef::GetNodalFunctionsDerivatives
void GetNodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, GaussTetra *gauss, int finiteelement)
Definition: TetraRef.cpp:217
NoneEnum
@ NoneEnum
Definition: EnumDefinitions.h:1202
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
NUMNODESP1
#define NUMNODESP1
Definition: TetraRef.cpp:19
Matrix3x3Determinant
void Matrix3x3Determinant(IssmDouble *Adet, IssmDouble *A)
Definition: MatrixUtils.cpp:431
TetraRef::GetNodalFunctions
void GetNodalFunctions(IssmDouble *basis, Gauss *gauss_in, int finiteelement)
Definition: TetraRef.cpp:170
P2Enum
@ P2Enum
Definition: EnumDefinitions.h:1223
P1P1GLSEnum
@ P1P1GLSEnum
Definition: EnumDefinitions.h:1217
SQRT3
#define SQRT3
Definition: constants.h:10
GaussTetra::coord2
IssmDouble coord2
Definition: GaussTetra.h:24
XTaylorHoodEnum
@ XTaylorHoodEnum
Definition: EnumDefinitions.h:1329
TetraRef::GetJacobian
void GetJacobian(IssmDouble *J, IssmDouble *xyz_list, GaussTetra *gauss)
Definition: TetraRef.cpp:93
NUMNODESMAX
#define NUMNODESMAX
Definition: TetraRef.cpp:22