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

#include <Tetra.h>

Inheritance diagram for Tetra:
Element ElementHook TetraRef Object

Public Member Functions

 Tetra ()
 
 Tetra (int tet_id, int tet_sid, int tet_lid, IoModel *iomodel, int nummodels)
 
 ~Tetra ()
 
Objectcopy ()
 
void Marshall (char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
 
int ObjectEnum ()
 
void AverageOntoPartition (Vector< IssmDouble > *partition_contributions, Vector< IssmDouble > *partition_areas, IssmDouble *vertex_response, IssmDouble *qmu_part)
 
void CalvingRateLevermann (void)
 
IssmDouble CharacteristicLength (void)
 
void ComputeSigmaNN ()
 
void ComputeStressTensor ()
 
void ComputeDeviatoricStressTensor ()
 
void ComputeEsaStrainAndVorticity ()
 
void Configure (Elements *elements, Loads *loads, Nodes *nodesin, Vertices *verticesin, Materials *materials, Parameters *parameters, Inputs2 *inputs2in)
 
void ControlInputSetGradient (IssmDouble *gradient, int enum_type, int control_index, int offset, int N, int M)
 
void ControlInputSetGradient (IssmDouble *gradient, int enum_type, int control_index)
 
void ControlToVectors (Vector< IssmPDouble > *vector_control, Vector< IssmPDouble > *vector_gradient, int control_enum)
 
IssmDouble DragCoefficientAbsGradient (void)
 
void ElementResponse (IssmDouble *presponse, int response_enum)
 
void ElementSizes (IssmDouble *hx, IssmDouble *hy, IssmDouble *hz)
 
void FaceOnBaseIndices (int *pindex1, int *pindex2, int *pindex3)
 
void FaceOnFrontIndices (int *pindex1, int *pindex2, int *pindex3)
 
void FaceOnSurfaceIndices (int *pindex1, int *pindex2, int *pindex3)
 
int FiniteElement (void)
 
IssmDouble FloatingArea (bool scaled)
 
void FSContactMigration (Vector< IssmDouble > *vertexgrounded, Vector< IssmDouble > *vertexfloating)
 
IssmDouble GetArea3D (void)
 
IssmDouble GetAreaSpherical (void)
 
ElementGetBasalElement (void)
 
int GetElementType (void)
 
void GetGroundedPart (int *point1, IssmDouble *fraction1, IssmDouble *fraction2, bool *mainlyfloating)
 
IssmDouble GetGroundedPortion (IssmDouble *xyz_list)
 
void GetIcefrontCoordinates (IssmDouble **pxyz_front, IssmDouble *xyz_list, int levelsetenum)
 
Input2GetInput2 (int enumtype)
 
Input2GetInput2 (int enumtype, IssmDouble time)
 
Input2GetInput2 (int inputenum, IssmDouble start_time, IssmDouble end_time, int averaging_method)
 
void GetInputListOnVertices (IssmDouble *pvalue, Input2 *input, IssmDouble default_value)
 
void GetInputListOnNodes (IssmDouble *pvalue, Input2 *input, IssmDouble default_value)
 
void GetInputValue (IssmDouble *pvalue, Node *node, int enumtype)
 
void GetLevelCoordinates (IssmDouble **pxyz_front, IssmDouble *xyz_list, int levelsetenum, IssmDouble level)
 
void GetLevelsetPositivePart (int *point1, IssmDouble *fraction1, IssmDouble *fraction2, bool *mainlynegative, IssmDouble *levelsetvalues)
 
int GetNumberOfNodes (void)
 
int GetNumberOfNodes (int enum_type)
 
int GetNumberOfVertices (void)
 
void GetVectorFromControlInputs (Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data, int offset)
 
void GetVectorFromControlInputs (Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data)
 
void GetVerticesCoordinatesBase (IssmDouble **pxyz_list)
 
void GetVerticesCoordinatesTop (IssmDouble **pxyz_list)
 
void GradientIndexing (int *indexing, int control_index)
 
IssmDouble GroundedArea (bool scaled)
 
bool HasFaceOnBase ()
 
bool HasFaceOnSurface ()
 
IssmDouble IceVolume (bool scaled)
 
IssmDouble IceVolumeAboveFloatation (bool scaled)
 
bool IsFaceOnBoundary (void)
 
bool IsIcefront (void)
 
bool IsNodeOnShelfFromFlags (IssmDouble *flags)
 
bool IsZeroLevelset (int levelset_enum)
 
void InputDepthAverageAtBase (int enum_type, int average_enum_type)
 
void InputExtrude (int enum_type, int start)
 
void InputUpdateFromIoModel (int index, IoModel *iomodel)
 
void InputUpdateFromSolutionOneDof (IssmDouble *solution, int inputenum)
 
void InputUpdateFromSolutionOneDofCollapsed (IssmDouble *solution, int inputenum)
 
void InputUpdateFromVector (IssmDouble *vector, int name, int type)
 
void JacobianDeterminant (IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)
 
void JacobianDeterminantBase (IssmDouble *pJdet, IssmDouble *xyz_list_base, Gauss *gauss)
 
void JacobianDeterminantLine (IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)
 
void JacobianDeterminantSurface (IssmDouble *pJdet, IssmDouble *xyz_list, Gauss *gauss)
 
void JacobianDeterminantTop (IssmDouble *pJdet, IssmDouble *xyz_list_base, Gauss *gauss)
 
IssmDouble Masscon (IssmDouble *levelset)
 
IssmDouble MassFlux (IssmDouble *segment)
 
IssmDouble MassFlux (IssmDouble x1, IssmDouble y1, IssmDouble x2, IssmDouble y2, int segment_id)
 
void MaterialUpdateFromTemperature (void)
 
IssmDouble MinEdgeLength (IssmDouble *xyz_list)
 
IssmDouble Misfit (int modelenum, int observationenum, int weightsenum)
 
IssmDouble MisfitArea (int weightsenum)
 
GaussNewGauss (void)
 
GaussNewGauss (int order)
 
GaussNewGauss (IssmDouble *xyz_list, IssmDouble *xyz_list_front, int order)
 
GaussNewGauss (IssmDouble *xyz_list, IssmDouble *xyz_list_front, int order_horiz, int order_vert)
 
GaussNewGauss (int point1, IssmDouble fraction1, IssmDouble fraction2, bool mainlyfloating, int order)
 
GaussNewGauss (int point1, IssmDouble fraction1, IssmDouble fraction2, int order)
 
GaussNewGaussBase (int order)
 
GaussNewGaussLine (int vertex1, int vertex2, int order)
 
GaussNewGaussTop (int order)
 
void NodalFunctions (IssmDouble *basis, Gauss *gauss)
 
void NodalFunctionsDerivatives (IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)
 
void NodalFunctionsDerivativesVelocity (IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)
 
void NodalFunctionsMINIDerivatives (IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)
 
void NodalFunctionsPressure (IssmDouble *basis, Gauss *gauss)
 
void NodalFunctionsP1 (IssmDouble *basis, Gauss *gauss)
 
void NodalFunctionsP1Derivatives (IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)
 
void NodalFunctionsP2 (IssmDouble *basis, Gauss *gauss)
 
void NodalFunctionsTensor (IssmDouble *basis, Gauss *gauss)
 
void NodalFunctionsVelocity (IssmDouble *basis, Gauss *gauss)
 
int NodalValue (IssmDouble *pvalue, int index, int natureofdataenum)
 
void NormalBase (IssmDouble *normal, IssmDouble *xyz_list)
 
void NormalSection (IssmDouble *normal, IssmDouble *xyz_list)
 
void NormalTop (IssmDouble *normal, IssmDouble *xyz_list)
 
int NumberofNodesPressure (void)
 
int NumberofNodesVelocity (void)
 
void PotentialUngrounding (Vector< IssmDouble > *potential_sheet_ungrounding)
 
int PressureInterpolation (void)
 
void ResetFSBasalBoundaryCondition (void)
 
void ResetHooks ()
 
void ReduceMatrices (ElementMatrix *Ke, ElementVector *pe)
 
void SetControlInputsFromVector (IssmDouble *vector, int control_enum, int control_index, int offset, int N, int M)
 
void SetControlInputsFromVector (IssmDouble *vector, int control_enum, int control_index)
 
void SetCurrentConfiguration (Elements *elements, Loads *loads, Nodes *nodes, Materials *materials, Parameters *parameters)
 
void SetTemporaryElementType (int element_type_in)
 
ElementSpawnBasalElement (void)
 
ElementSpawnTopElement (void)
 
TriaSpawnTria (int index1, int index2, int index3)
 
IssmDouble StabilizationParameter (IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)
 
void StabilizationParameterAnisotropic (IssmDouble *tau_parameter_anisotropic, IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble hx, IssmDouble hy, IssmDouble hz, IssmDouble kappa)
 
void StrainRateparallel (void)
 
void StrainRateperpendicular (void)
 
void StressIntensityFactor (void)
 
IssmDouble SurfaceArea (void)
 
int TensorInterpolation (void)
 
IssmDouble TimeAdapt ()
 
IssmDouble TotalFloatingBmb (bool scaled)
 
IssmDouble TotalGroundedBmb (bool scaled)
 
IssmDouble TotalSmb (bool scaled)
 
void Update (Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finitelement)
 
void UpdateConstraintsExtrudeFromBase ()
 
void UpdateConstraintsExtrudeFromTop ()
 
int UpdatePotentialUngrounding (IssmDouble *vertices_potentially_ungrounding, Vector< IssmDouble > *vec_nodes_on_iceshelf, IssmDouble *nodes_on_iceshelf)
 
void ValueP1DerivativesOnGauss (IssmDouble *dvalue, IssmDouble *values, IssmDouble *xyz_list, Gauss *gauss)
 
void ValueP1OnGauss (IssmDouble *pvalue, IssmDouble *values, Gauss *gauss)
 
int VelocityInterpolation (void)
 
int VertexConnectivity (int vertexindex)
 
void VerticalSegmentIndices (int **pindices, int *pnumseg)
 
void VerticalSegmentIndicesBase (int **pindices, int *pnumseg)
 
void ViscousHeating (IssmDouble *pphi, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
 
- Public Member Functions inherited from Element
 Element ()
 
 ~Element ()
 
bool AnyFSet (void)
 
void ComputeLambdaS (void)
 
void ComputeNewDamage ()
 
void ComputeStrainRate ()
 
void CoordinateSystemTransform (IssmDouble **ptransform, Node **nodes, int numnodes, int *cs_array)
 
void DeepEcho ()
 
void DeleteMaterials (void)
 
void Delta18oParameterization (void)
 
void Delta18opdParameterization (void)
 
void SmbGradCompParameterization (void)
 
IssmDouble Divergence (void)
 
void dViscositydBFS (IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
 
void dViscositydBHO (IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void dViscositydBSSA (IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void dViscositydDSSA (IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void Echo ()
 
void FindParam (bool *pvalue, int paramenum)
 
void FindParam (int *pvalue, int paramenum)
 
void FindParam (IssmDouble *pvalue, int paramenum)
 
IssmDouble FindParam (int paramenum)
 
void FindParam (int **pvalues, int *psize, int paramenum)
 
IssmDouble FloatingArea (IssmDouble *mask, bool scaled)
 
void GetDofList (int **pdoflist, int approximation_enum, int setenum)
 
void GetDofListPressure (int **pdoflist, int setenum)
 
void GetDofListVelocity (int **pdoflist, int setenum)
 
void GetDofListLocal (int **pdoflist, int approximation_enum, int setenum)
 
void GetDofListLocalPressure (int **pdoflist, int setenum)
 
void GetDofListLocalVelocity (int **pdoflist, int setenum)
 
void GetInputListOnNodes (IssmDouble *pvalue, int enumtype)
 
void GetInputListOnNodes (IssmDouble *pvalue, int enumtype, IssmDouble defaultvalue)
 
void GetInputListOnNodesVelocity (IssmDouble *pvalue, int enumtype)
 
void GetInputListOnVertices (IssmDouble *pvalue, int enumtype)
 
void GetInputListOnVerticesAtTime (IssmDouble *pvalue, int enumtype, IssmDouble time)
 
void GetInputListOnVertices (IssmDouble *pvalue, int enumtype, IssmDouble defaultvalue)
 
void GetInputLocalMinMaxOnNodes (IssmDouble *min, IssmDouble *max, IssmDouble *ug)
 
void GetInputValue (bool *pvalue, int enum_type)
 
void GetInputValue (int *pvalue, int enum_type)
 
void GetInput2Value (bool *pvalue, int enum_type)
 
void GetInput2Value (int *pvalue, int enum_type)
 
void GetInput2Value (IssmDouble *pvalue, int enum_type)
 
void GetInputValue (IssmDouble *pvalue, Gauss *gauss, int enum_type)
 
NodeGetNode (int nodeindex)
 
int GetNodeIndex (Node *node)
 
void GetNodesLidList (int *lidlist)
 
void GetNodesSidList (int *sidlist)
 
void GetPhi (IssmDouble *phi, IssmDouble *epsilon, IssmDouble viscosity)
 
void GetSolutionFromInputsOneDof (Vector< IssmDouble > *solution, int solutionenum)
 
void GetVectorFromInputs (Vector< IssmDouble > *vector, int name_enum, int type)
 
void GetVectorFromInputs (Vector< IssmDouble > *vector, int name_enum, int type, IssmDouble time)
 
void GetVerticesLidList (int *lidlist)
 
void GetVerticesPidList (int *pidlist)
 
void GetVerticesConnectivityList (int *connectivitylist)
 
void GetVerticesCoordinates (IssmDouble **xyz_list)
 
void GetVerticesSidList (int *sidlist)
 
IssmDouble GetXcoord (IssmDouble *xyz_list, Gauss *gauss)
 
IssmDouble GetYcoord (IssmDouble *xyz_list, Gauss *gauss)
 
IssmDouble GetZcoord (IssmDouble *xyz_list, Gauss *gauss)
 
void GradientIndexing (int *indexing, int control_index)
 
IssmDouble GroundedArea (IssmDouble *mask, bool scaled)
 
bool HasNodeOnBase ()
 
bool HasNodeOnSurface ()
 
IssmDouble IceMass (bool scaled)
 
IssmDouble IceMass (IssmDouble *mask, bool scaled)
 
IssmDouble IceVolume (IssmDouble *mask, bool scaled)
 
IssmDouble IceVolumeAboveFloatation (IssmDouble *mask, bool scaled)
 
int Id ()
 
void InputCreate (IssmDouble *vector, Inputs2 *inputs2, IoModel *iomodel, int M, int N, int vector_type, int vector_enum, int code)
 
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)
 
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)
 
void InputUpdateFromConstant (IssmDouble constant, int name)
 
void InputUpdateFromConstant (int constant, int name)
 
void InputUpdateFromConstant (bool constant, int name)
 
bool IsFloating ()
 
bool IsGrounded ()
 
bool IsOnBase ()
 
bool IsOnSurface ()
 
bool IsIceInElement ()
 
bool IsIceOnlyInElement ()
 
bool IsOceanInElement ()
 
bool IsLandInElement ()
 
void Ismip6FloatingiceMeltingRate ()
 
void LinearFloatingiceMeltingRate ()
 
void SpatialLinearFloatingiceMeltingRate ()
 
void MantlePlumeGeothermalFlux ()
 
void MarshallElement (char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction, int numanalyses)
 
void MigrateGroundingLine (IssmDouble *sheet_ungrounding)
 
void MismipFloatingiceMeltingRate ()
 
void BeckmannGoosseFloatingiceMeltingRate ()
 
void MungsmtpParameterization (void)
 
ElementMatrixNewElementMatrix (int approximation_enum=NoneApproximationEnum)
 
ElementMatrixNewElementMatrixCoupling (int number_nodes, int approximation_enum=NoneApproximationEnum)
 
ElementVectorNewElementVector (int approximation_enum=NoneApproximationEnum)
 
void PicoUpdateBoxid (int *pmax_boxid_basin)
 
void PicoUpdateBox (int loopboxid)
 
void PicoComputeBasalMelt ()
 
void PositiveDegreeDay (IssmDouble *pdds, IssmDouble *pds, IssmDouble signorm, bool ismungsm, bool issetpddfac)
 
void PositiveDegreeDaySicopolis (bool isfirnwarming)
 
void ResultInterpolation (int *pinterpolation, int *nodesperelement, int *parray_size, int output_enum)
 
void ResultToPatch (IssmDouble *values, int nodesperelement, int output_enum)
 
void ResultToMatrix (IssmDouble *values, int ncols, int output_enum)
 
void ResultToVector (Vector< IssmDouble > *vector, int output_enum)
 
void SetwiseNodeConnectivity (int *d_nz, int *o_nz, Node *node, bool *flags, int *flagsindices, int set1_enum, int set2_enum)
 
void SetBoolInput (Inputs2 *inputs2, int enum_in, bool value)
 
void SetIntInput (Inputs2 *inputs2, int enum_in, int value)
 
void SmbSemic ()
 
int Sid ()
 
void SmbGemb (IssmDouble timeinputs, int count)
 
void StrainRateESA (IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void StrainRateFS (IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
 
void StrainRateHO (IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void StrainRateHO2dvertical (IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void StrainRateSSA (IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
 
void StrainRateSSA1d (IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input)
 
void StressMaxPrincipalCreateInput (void)
 
IssmDouble TotalFloatingBmb (IssmDouble *mask, bool scaled)
 
IssmDouble TotalGroundedBmb (IssmDouble *mask, bool scaled)
 
IssmDouble TotalSmb (IssmDouble *mask, bool scaled)
 
void TransformInvStiffnessMatrixCoord (ElementMatrix *Ke, int cs_enum)
 
void TransformInvStiffnessMatrixCoord (ElementMatrix *Ke, Node **nodes, int numnodes, int cs_enum)
 
void TransformInvStiffnessMatrixCoord (ElementMatrix *Ke, Node **nodes, int numnodes, int *cs_array)
 
void TransformLoadVectorCoord (ElementVector *pe, int cs_enum)
 
void TransformLoadVectorCoord (ElementVector *pe, int *cs_array)
 
void TransformLoadVectorCoord (ElementVector *pe, Node **nodes, int numnodes, int cs_enum)
 
void TransformLoadVectorCoord (ElementVector *pe, Node **nodes, int numnodes, int *cs_array)
 
void TransformLoadVectorCoord (ElementVector *pe, int numnodes, int transformenum)
 
void TransformLoadVectorCoord (ElementVector *pe, int numnodes, int *transformenum_list)
 
void TransformSolutionCoord (IssmDouble *solution, int cs_enum)
 
void TransformSolutionCoord (IssmDouble *solution, int *cs_array)
 
void TransformSolutionCoord (IssmDouble *solution, int numnodes, int cs_enum)
 
void TransformSolutionCoord (IssmDouble *solution, int numnodes, int *cs_array)
 
void TransformSolutionCoord (IssmDouble *solution, Node **nodes, int numnodes, int cs_enum)
 
void TransformSolutionCoord (IssmDouble *solution, Node **nodes, int numnodes, int *cs_array)
 
void TransformStiffnessMatrixCoord (ElementMatrix *Ke, int cs_enum)
 
void TransformStiffnessMatrixCoord (ElementMatrix *Ke, int *cs_array)
 
void TransformStiffnessMatrixCoord (ElementMatrix *Ke, Node **nodes, int numnodes, int cs_enum)
 
void TransformStiffnessMatrixCoord (ElementMatrix *Ke, Node **nodes, int numnodes, int *cs_array)
 
void TransformStiffnessMatrixCoord (ElementMatrix *Ke, int numnodes, int *transformenum_list)
 
void ViscousHeatingCreateInput (void)
 
void ThermalToEnthalpy (IssmDouble *penthalpy, IssmDouble temperature, IssmDouble waterfraction, IssmDouble pressure)
 
IssmDouble TMeltingPoint (IssmDouble pressure)
 
void EnthalpyToThermal (IssmDouble *ptemperature, IssmDouble *pwaterfraction, IssmDouble enthalpy, IssmDouble pressure)
 
IssmDouble EnthalpyDiffusionParameter (IssmDouble enthalpy, IssmDouble pressure)
 
IssmDouble EnthalpyDiffusionParameterVolume (int numvertices, IssmDouble *enthalpy, IssmDouble *pressure)
 
IssmDouble PureIceEnthalpy (IssmDouble pressure)
 
virtual void AddBasalInput2 (int input_enum, IssmDouble *values, int interpolation_enum)
 
virtual void AddInput2 (int input_enum, IssmDouble *values, int interpolation_enum)
 
virtual void AddControlInput (int input_enum, Inputs2 *inputs2, IoModel *iomodel, IssmDouble *values, IssmDouble *values_min, IssmDouble *values_max, int interpolation_enum, int id)
 
virtual void DatasetInputCreate (IssmDouble *array, int M, int N, int *individual_enums, int num_inputs, Inputs2 *inputs2, IoModel *iomodel, int input_enum)
 
virtual void BasalNodeIndices (int *pnumindices, int **pindices, int finiteelement)
 
virtual void CalvingRateVonmises (void)
 
virtual void CalvingCrevasseDepth (void)
 
virtual void CalvingFluxLevelset (void)
 
virtual void CalvingMeltingFluxLevelset (void)
 
virtual void ComputeBasalStress (void)
 
virtual void CreateDistanceInputFromSegmentlist (IssmDouble *distances, int distanceenum)
 
virtual void CreateInputTimeAverage (int transientinput_enum, int averagedinput_enum, IssmDouble init_time, IssmDouble end_time, int averaging_method)
 
virtual IssmDouble GetHorizontalSurfaceArea (void)
 
virtual IssmDouble GetIcefrontArea ()
 
virtual DatasetInput2GetDatasetInput2 (int inputenum)
 
virtual void GetInputValue (IssmDouble *pvalue, Vertex *vertex, int enumtype)
 
virtual int GetVertexIndex (Vertex *vertex)
 
virtual IssmDouble IcefrontMassFlux (bool scaled)
 
virtual IssmDouble IcefrontMassFluxLevelset (bool scaled)
 
virtual IssmDouble GroundinglineMassFlux (bool scaled)
 
virtual void DatasetInputExtrude (int input_enum, int start)
 
virtual void RignotMeltParameterization (void)
 
virtual void SetElementInput (int enum_in, IssmDouble values)
 
virtual void SetElementInput (Inputs2 *inputs2, int enum_in, IssmDouble values)
 
virtual void SetElementInput (Inputs2 *inputs2, int numindices, int *indices, IssmDouble *values, int enum_in)
 
virtual IssmDouble TotalCalvingFluxLevelset (bool scaled)
 
virtual IssmDouble TotalCalvingMeltingFluxLevelset (bool scaled)
 
virtual void WriteFieldIsovalueSegment (DataSet *segments, int fieldenum, IssmDouble fieldvalue)
 
- Public Member Functions inherited from Object
virtual ~Object ()
 
- Public Member Functions inherited from ElementHook
 ElementHook ()
 
 ElementHook (int in_numanalyses, int material_id, int numvertices, IoModel *iomodel)
 
 ~ElementHook ()
 
void Marshall (char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
 
void DeepEcho ()
 
void Echo ()
 
void InitHookNeighbors (int *element_ids)
 
void SetHookNodes (int *node_ids, int numnodes, int analysis_counter)
 
void SpawnSegHook (ElementHook *triahook, int ndex1, int index2)
 
void SpawnTriaHook (ElementHook *triahook, int index1, int index2, int index3)
 
- Public Member Functions inherited from TetraRef
 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)
 

Additional Inherited Members

- Data Fields inherited from Element
int id
 
int sid
 
int lid
 
Inputs2inputs2
 
Node ** nodes
 
Vertex ** vertices
 
Materialmaterial
 
Parametersparameters
 
bool isonsurface
 
bool isonbase
 
int * element_type_list
 
int element_type
 
- Data Fields inherited from ElementHook
int numanalyses
 
Hook ** hnodes
 
Hookhvertices
 
Hookhmaterial
 
Hookhneighbors
 

Detailed Description

Definition at line 27 of file Tetra.h.

Constructor & Destructor Documentation

◆ Tetra() [1/2]

Tetra::Tetra ( )
inline

Definition at line 32 of file Tetra.h.

32 {};

◆ Tetra() [2/2]

Tetra::Tetra ( int  tet_id,
int  tet_sid,
int  tet_lid,
IoModel iomodel,
int  nummodels 
)

Definition at line 23 of file Tetra.cpp.

24  :ElementHook(nummodels,tet_id,NUMVERTICES,iomodel){
25 
26  /*id: */
27  this->id = tet_id;
28  this->sid = tet_sid;
29  this->lid = tet_lid;
30 
31  /*surface and base*/
32  this->isonsurface = false;
33  this->isonbase = false;
34 
35  //this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
36  this->parameters = NULL;
37 
38  /*initialize pointers:*/
39  this->nodes = NULL;
40  this->vertices = NULL;
41  this->material = NULL;
42 
43  /*Only allocate pointer*/
44  this->element_type_list=xNew<int>(nummodels);
45 
46  /*surface and base*/
47  _assert_(iomodel->Data("md.mesh.vertexonsurface"));
48  _assert_(iomodel->Data("md.mesh.vertexonbase"));
49  this->isonsurface = false;
50  this->isonbase = false;
51  IssmDouble sum = 0.;
52  for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonsurface")[reCast<int>(iomodel->elements[(tet_id-1)*NUMVERTICES+i])-1];
53  _assert_(sum>=0 && sum<4);
54  if(sum>2.5) this->isonsurface = true;
55  sum = 0.;
56  for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonbase")[reCast<int>(iomodel->elements[(tet_id-1)*NUMVERTICES+i])-1];
57  _assert_(sum>=0 && sum<4);
58  if(sum>2.5) this->isonbase = true;
59  }

◆ ~Tetra()

Tetra::~Tetra ( )

Definition at line 61 of file Tetra.cpp.

61  {/*{{{*/
62  this->parameters=NULL;
63 }

Member Function Documentation

◆ copy()

Object * Tetra::copy ( void  )
virtual

Implements Object.

Definition at line 65 of file Tetra.cpp.

65  {/*{{{*/
66 
67  int i;
68  Tetra* tetra=NULL;
69 
70  tetra=new Tetra();
71 
72  //deal with TetraRef mother class
73  int nanalyses = this->numanalyses;
74  if(nanalyses > 0){
75  tetra->element_type_list=xNew<int>(nanalyses);
76  for(i=0;i<nanalyses;i++){
77  if (this->element_type_list[i]) tetra->element_type_list[i]=this->element_type_list[i];
78  else tetra->element_type_list[i] = 0;
79  }
80  }
81  else tetra->element_type_list = NULL;
82  tetra->element_type=this->element_type;
83  tetra->numanalyses=nanalyses;
84 
85  //deal with ElementHook mother class
86  if (this->hnodes){
87  tetra->hnodes=xNew<Hook*>(tetra->numanalyses);
88  for(i=0;i<tetra->numanalyses;i++){
89  if (this->hnodes[i]) tetra->hnodes[i] = (Hook*)(this->hnodes[i]->copy());
90  else tetra->hnodes[i] = NULL;
91  }
92  }
93  else tetra->hnodes = NULL;
94 
95  tetra->hvertices = (Hook*)this->hvertices->copy();
96  tetra->hmaterial = (Hook*)this->hmaterial->copy();
97  tetra->hneighbors = NULL;
98 
99  /*deal with Tria fields: */
100  tetra->id = this->id;
101  tetra->sid = this->sid;
102  tetra->lid = this->lid;
103  tetra->isonbase = this->isonbase;
104  tetra->isonsurface = this->isonsurface;
105 
106  /*point parameters: */
107  tetra->parameters=this->parameters;
108 
109  /*recover objects: */
110  unsigned int num_nodes = 4;
111  tetra->nodes = xNew<Node*>(num_nodes); //we cannot rely on an analysis_counter to tell us which analysis_type we are running, so we just copy the nodes.
112  for(i=0;i<num_nodes;i++) if(this->nodes[i]) tetra->nodes[i]=this->nodes[i]; else tetra->nodes[i] = NULL;
113 
114  tetra->vertices = (Vertex**)this->hvertices->deliverp();
115  tetra->material = (Material*)this->hmaterial->delivers();
116 
117  return tetra;
118 }

◆ Marshall()

void Tetra::Marshall ( char **  pmarshalled_data,
int *  pmarshalled_data_size,
int  marshall_direction 
)
virtual

Implements Element.

Definition at line 120 of file Tetra.cpp.

120  { /*{{{*/
121 
123  MARSHALLING(this->isonsurface);
124  MARSHALLING(this->isonbase);
125 
126  /*Call parent classes: */
127  ElementHook::Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
128  Element::MarshallElement(pmarshalled_data,pmarshalled_data_size,marshall_direction,this->numanalyses);
129  TetraRef::Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
130 
131  vertices = (Vertex**)this->hvertices->deliverp();
132  material = (Material*)this->hmaterial->delivers();
133 
134 }

◆ ObjectEnum()

int Tetra::ObjectEnum ( void  )
virtual

Implements Object.

Definition at line 638 of file Tetra.cpp.

638  {/*{{{*/
639 
640  return TetraEnum;
641 
642 }/*}}}*/

◆ AverageOntoPartition()

void Tetra::AverageOntoPartition ( Vector< IssmDouble > *  partition_contributions,
Vector< IssmDouble > *  partition_areas,
IssmDouble vertex_response,
IssmDouble qmu_part 
)
inlinevirtual

Implements Element.

Definition at line 42 of file Tetra.h.

42 {_error_("not implemented yet");};

◆ CalvingRateLevermann()

void Tetra::CalvingRateLevermann ( void  )
inlinevirtual

Implements Element.

Definition at line 43 of file Tetra.h.

43 {_error_("not implemented yet");};

◆ CharacteristicLength()

IssmDouble Tetra::CharacteristicLength ( void  )
inlinevirtual

Implements Element.

Definition at line 44 of file Tetra.h.

44 {_error_("not implemented yet");};

◆ ComputeSigmaNN()

void Tetra::ComputeSigmaNN ( void  )
inlinevirtual

Implements Element.

Definition at line 45 of file Tetra.h.

45 {_error_("not implemented yet");};

◆ ComputeStressTensor()

void Tetra::ComputeStressTensor ( void  )
inlinevirtual

Implements Element.

Definition at line 46 of file Tetra.h.

46 {_error_("not implemented yet");};

◆ ComputeDeviatoricStressTensor()

void Tetra::ComputeDeviatoricStressTensor ( void  )
inlinevirtual

Implements Element.

Definition at line 47 of file Tetra.h.

47 {_error_("not implemented yet");};

◆ ComputeEsaStrainAndVorticity()

void Tetra::ComputeEsaStrainAndVorticity ( void  )
inlinevirtual

Implements Element.

Definition at line 48 of file Tetra.h.

48 {_error_("not implemented yet!");};

◆ Configure()

void Tetra::Configure ( Elements elements,
Loads loads,
Nodes nodesin,
Vertices verticesin,
Materials materials,
Parameters parameters,
Inputs2 inputs2in 
)
virtual

Implements Element.

Definition at line 137 of file Tetra.cpp.

137  {/*{{{*/
138 
139  int analysis_counter;
140 
141  /*go into parameters and get the analysis_counter: */
142  parametersin->FindParam(&analysis_counter,AnalysisCounterEnum);
143 
144  /*Get Element type*/
145  this->element_type=this->element_type_list[analysis_counter];
146 
147  /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective
148  * datasets, using internal ids and offsets hidden in hooks: */
149  if (this->hnodes[analysis_counter]) this->hnodes[analysis_counter]->configure(nodesin);
150  this->hvertices->configure(verticesin);
151  this->hmaterial->configure(materialsin);
152 
153  /*Now, go pick up the objects inside the hooks: */
154  if (this->hnodes[analysis_counter]) this->nodes=(Node**)this->hnodes[analysis_counter]->deliverp();
155  else this->nodes=NULL;
156  this->vertices = (Vertex**)this->hvertices->deliverp();
157  this->material = (Material*)this->hmaterial->delivers();
158 
159  /*point parameters to real dataset: */
160  this->parameters=parametersin;
161  this->inputs2=inputs2in;
162 }

◆ ControlInputSetGradient() [1/2]

void Tetra::ControlInputSetGradient ( IssmDouble gradient,
int  enum_type,
int  control_index,
int  offset,
int  N,
int  M 
)
inlinevirtual

Implements Element.

Definition at line 50 of file Tetra.h.

50 {_error_("not implemented yet");};

◆ ControlInputSetGradient() [2/2]

void Tetra::ControlInputSetGradient ( IssmDouble gradient,
int  enum_type,
int  control_index 
)
inlinevirtual

Implements Element.

Definition at line 51 of file Tetra.h.

51 {_error_("not implemented yet");};

◆ ControlToVectors()

void Tetra::ControlToVectors ( Vector< IssmPDouble > *  vector_control,
Vector< IssmPDouble > *  vector_gradient,
int  control_enum 
)
inlinevirtual

Implements Element.

Definition at line 52 of file Tetra.h.

52 {_error_("not implemented yet");};

◆ DragCoefficientAbsGradient()

IssmDouble Tetra::DragCoefficientAbsGradient ( void  )
inline

Definition at line 53 of file Tetra.h.

53 {_error_("not implemented yet");};

◆ ElementResponse()

void Tetra::ElementResponse ( IssmDouble presponse,
int  response_enum 
)
inlinevirtual

Implements Element.

Definition at line 54 of file Tetra.h.

54 {_error_("not implemented yet");};

◆ ElementSizes()

void Tetra::ElementSizes ( IssmDouble hx,
IssmDouble hy,
IssmDouble hz 
)
virtual

Implements Element.

Definition at line 164 of file Tetra.cpp.

164  {/*{{{*/
165 
166  IssmDouble xyz_list[NUMVERTICES][3];
167  IssmDouble xmin,ymin,zmin;
168  IssmDouble xmax,ymax,zmax;
169 
170  /*Get xyz list: */
172  xmin=xyz_list[0][0]; xmax=xyz_list[0][0];
173  ymin=xyz_list[0][1]; ymax=xyz_list[0][1];
174  zmin=xyz_list[0][2]; zmax=xyz_list[0][2];
175 
176  for(int i=1;i<NUMVERTICES;i++){
177  if(xyz_list[i][0]<xmin) xmin=xyz_list[i][0];
178  if(xyz_list[i][0]>xmax) xmax=xyz_list[i][0];
179  if(xyz_list[i][1]<ymin) ymin=xyz_list[i][1];
180  if(xyz_list[i][1]>ymax) ymax=xyz_list[i][1];
181  if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
182  if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
183  }
184 
185  *hx=xmax-xmin;
186  *hy=ymax-ymin;
187  *hz=zmax-zmin;
188 }

◆ FaceOnBaseIndices()

void Tetra::FaceOnBaseIndices ( int *  pindex1,
int *  pindex2,
int *  pindex3 
)

Definition at line 190 of file Tetra.cpp.

190  {/*{{{*/
191 
192  IssmDouble values[NUMVERTICES];
193  int indices[4][3] = {{0,1,2},{0,3,1},{1,3,2},{0,2,3}};
194 
195  /*Retrieve all inputs and parameters*/
197 
198  for(int i=0;i<4;i++){
199  if(values[indices[i][0]] == 1. && values[indices[i][1]] == 1. && values[indices[i][2]] == 1.){
200  *pindex1 = indices[i][0];
201  *pindex2 = indices[i][1];
202  *pindex3 = indices[i][2];
203  return;
204  }
205  }
206 
207  _error_("Could not find 3 vertices on bed");
208 }

◆ FaceOnFrontIndices()

void Tetra::FaceOnFrontIndices ( int *  pindex1,
int *  pindex2,
int *  pindex3 
)

Definition at line 210 of file Tetra.cpp.

210  {/*{{{*/
211 
212  IssmDouble values[NUMVERTICES];
213  int indices[4][3] = {{0,1,2},{0,3,1},{1,3,2},{0,2,3}};
214 
215  /*Retrieve all inputs and parameters*/
217 
218  for(int i=0;i<4;i++){
219  if(values[indices[i][0]] == 0. && values[indices[i][1]] == 0. && values[indices[i][2]] == 0.){
220  *pindex1 = indices[i][0];
221  *pindex2 = indices[i][1];
222  *pindex3 = indices[i][2];
223  return;
224  }
225  }
226 
227  _error_("Could not find 3 vertices on bed");
228 }

◆ FaceOnSurfaceIndices()

void Tetra::FaceOnSurfaceIndices ( int *  pindex1,
int *  pindex2,
int *  pindex3 
)

Definition at line 230 of file Tetra.cpp.

230  {/*{{{*/
231 
232  IssmDouble values[NUMVERTICES];
233  int indices[4][3] = {{0,1,2},{0,3,1},{1,3,2},{0,2,3}};
234 
235  /*Retrieve all inputs and parameters*/
237 
238  for(int i=0;i<4;i++){
239  if(values[indices[i][0]] == 1. && values[indices[i][1]] == 1. && values[indices[i][2]] == 1.){
240  *pindex1 = indices[i][0];
241  *pindex2 = indices[i][1];
242  *pindex3 = indices[i][2];
243  return;
244  }
245  }
246 
247  _error_("Could not find 3 vertices on bed");
248 }

◆ FiniteElement()

int Tetra::FiniteElement ( void  )
virtual

Implements Element.

Definition at line 250 of file Tetra.cpp.

250  {/*{{{*/
251  return this->element_type;
252 } /*}}}*/

◆ FloatingArea()

IssmDouble Tetra::FloatingArea ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 60 of file Tetra.h.

60 {_error_("not implemented yet");};

◆ FSContactMigration()

void Tetra::FSContactMigration ( Vector< IssmDouble > *  vertexgrounded,
Vector< IssmDouble > *  vertexfloating 
)
inlinevirtual

Implements Element.

Definition at line 61 of file Tetra.h.

61 {_error_("not implemented yet");};

◆ GetArea3D()

IssmDouble Tetra::GetArea3D ( void  )
inline

Definition at line 62 of file Tetra.h.

62 {_error_("not implemented yet!");};

◆ GetAreaSpherical()

IssmDouble Tetra::GetAreaSpherical ( void  )
inline

Definition at line 63 of file Tetra.h.

63 {_error_("not implemented yet!");};

◆ GetBasalElement()

Element* Tetra::GetBasalElement ( void  )
inlinevirtual

Implements Element.

Definition at line 64 of file Tetra.h.

64 {_error_("not implemented yet");};

◆ GetElementType()

int Tetra::GetElementType ( void  )
virtual

Implements Element.

Definition at line 253 of file Tetra.cpp.

253  {/*{{{*/
254 
255  /*return TetraRef field*/
256  return this->element_type;
257 }

◆ GetGroundedPart()

void Tetra::GetGroundedPart ( int *  point1,
IssmDouble fraction1,
IssmDouble fraction2,
bool *  mainlyfloating 
)
inlinevirtual

Implements Element.

Definition at line 66 of file Tetra.h.

66 {_error_("not implemented yet");};

◆ GetGroundedPortion()

IssmDouble Tetra::GetGroundedPortion ( IssmDouble xyz_list)
inlinevirtual

Implements Element.

Definition at line 67 of file Tetra.h.

67 {_error_("not implemented yet");};

◆ GetIcefrontCoordinates()

void Tetra::GetIcefrontCoordinates ( IssmDouble **  pxyz_front,
IssmDouble xyz_list,
int  levelsetenum 
)
inlinevirtual

Implements Element.

Definition at line 68 of file Tetra.h.

68 {_error_("not implemented yet");};

◆ GetInput2() [1/3]

Input2 * Tetra::GetInput2 ( int  enumtype)
virtual

Implements Element.

Definition at line 259 of file Tetra.cpp.

259  {/*{{{*/
260  _error_("not implemented yet");
261 }/*}}}*/

◆ GetInput2() [2/3]

Input2 * Tetra::GetInput2 ( int  enumtype,
IssmDouble  time 
)
virtual

Implements Element.

Definition at line 262 of file Tetra.cpp.

262  {/*{{{*/
263  _error_("not implemented yet");
264 }/*}}}*/

◆ GetInput2() [3/3]

Input2* Tetra::GetInput2 ( int  inputenum,
IssmDouble  start_time,
IssmDouble  end_time,
int  averaging_method 
)
inlinevirtual

Implements Element.

Definition at line 71 of file Tetra.h.

71 {_error_("not implemented yet!");};

◆ GetInputListOnVertices()

void Tetra::GetInputListOnVertices ( IssmDouble pvalue,
Input2 input,
IssmDouble  default_value 
)
virtual

Implements Element.

Definition at line 265 of file Tetra.cpp.

265  {/*{{{*/
266 
267  /*Checks in debugging mode*/
268  _assert_(pvalue);
269 
270  /* Start looping on the number of vertices: */
271  if(input){
272  GaussTetra gauss;
273  for(int iv=0;iv<NUMVERTICES;iv++){
274  gauss.GaussVertex(iv);
275  input->GetInputValue(&pvalue[iv],&gauss);
276  }
277  }
278  else{
279  for(int iv=0;iv<NUMVERTICES;iv++) pvalue[iv] = default_value;
280  }
281 }

◆ GetInputListOnNodes()

void Tetra::GetInputListOnNodes ( IssmDouble pvalue,
Input2 input,
IssmDouble  default_value 
)
virtual

Implements Element.

Definition at line 283 of file Tetra.cpp.

283  {/*{{{*/
284 
285  /*Checks in debugging mode*/
286  _assert_(pvalue);
287 
288  /*What type of finite element are we dealing with?*/
289  int fe = this->FiniteElement();
290  int numnodes = this->GetNumberOfNodes();
291 
292  /* Start looping on the number of vertices: */
293  if(input){
294  GaussTetra gauss;
295  for(int iv=0;iv<numnodes;iv++){
296  gauss.GaussNode(fe,iv);
297  input->GetInputValue(&pvalue[iv],&gauss);
298  }
299  }
300  else{
301  for(int iv=0;iv<numnodes;iv++) pvalue[iv] = default_value;
302  }
303 }

◆ GetInputValue()

void Tetra::GetInputValue ( IssmDouble pvalue,
Node node,
int  enumtype 
)
virtual

Reimplemented from Element.

Definition at line 305 of file Tetra.cpp.

305  {/*{{{*/
306 
307  Input2* input=this->GetInput2(enumtype);
308  if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
309 
310  GaussTetra* gauss=new GaussTetra();
311  gauss->GaussVertex(this->GetNodeIndex(node));
312 
313  input->GetInputValue(pvalue,gauss);
314  delete gauss;
315 }

◆ GetLevelCoordinates()

void Tetra::GetLevelCoordinates ( IssmDouble **  pxyz_front,
IssmDouble xyz_list,
int  levelsetenum,
IssmDouble  level 
)
inlinevirtual

Implements Element.

Definition at line 75 of file Tetra.h.

75 {_error_("not implemented yet");};

◆ GetLevelsetPositivePart()

void Tetra::GetLevelsetPositivePart ( int *  point1,
IssmDouble fraction1,
IssmDouble fraction2,
bool *  mainlynegative,
IssmDouble levelsetvalues 
)
inlinevirtual

Implements Element.

Definition at line 76 of file Tetra.h.

76 {_error_("not implemented yet");};

◆ GetNumberOfNodes() [1/2]

int Tetra::GetNumberOfNodes ( void  )
virtual

Implements Element.

Definition at line 317 of file Tetra.cpp.

317  {/*{{{*/
318  return this->NumberofNodes(this->element_type);
319 }

◆ GetNumberOfNodes() [2/2]

int Tetra::GetNumberOfNodes ( int  enum_type)
inlinevirtual

Implements Element.

Definition at line 78 of file Tetra.h.

78 {_error_("not implemented yet");};

◆ GetNumberOfVertices()

int Tetra::GetNumberOfVertices ( void  )
virtual

Implements Element.

Definition at line 321 of file Tetra.cpp.

321  {/*{{{*/
322  return NUMVERTICES;
323 }

◆ GetVectorFromControlInputs() [1/2]

void Tetra::GetVectorFromControlInputs ( Vector< IssmDouble > *  gradient,
int  control_enum,
int  control_index,
const char *  data,
int  offset 
)
inlinevirtual

Implements Element.

Definition at line 80 of file Tetra.h.

80 {_error_("not implemented yet");};

◆ GetVectorFromControlInputs() [2/2]

void Tetra::GetVectorFromControlInputs ( Vector< IssmDouble > *  gradient,
int  control_enum,
int  control_index,
const char *  data 
)
inlinevirtual

Implements Element.

Definition at line 81 of file Tetra.h.

81 {_error_("not implemented yet");};

◆ GetVerticesCoordinatesBase()

void Tetra::GetVerticesCoordinatesBase ( IssmDouble **  pxyz_list)
virtual

Implements Element.

Definition at line 325 of file Tetra.cpp.

325  {/*{{{*/
326 
327  int indices[3];
328  IssmDouble xyz_list[NUMVERTICES][3];
329 
330  /*Element XYZ list*/
331  ::GetVerticesCoordinates(&xyz_list[0][0],this->vertices,NUMVERTICES);
332 
333  /*Allocate Output*/
334  IssmDouble* xyz_list_edge = xNew<IssmDouble>(3*3);
335  this->FaceOnBaseIndices(&indices[0],&indices[1],&indices[2]);
336  for(int i=0;i<3;i++) for(int j=0;j<3;j++) xyz_list_edge[i*3+j]=xyz_list[indices[i]][j];
337 
338  /*Assign output pointer*/
339  *pxyz_list = xyz_list_edge;
340 
341 }/*}}}*/

◆ GetVerticesCoordinatesTop()

void Tetra::GetVerticesCoordinatesTop ( IssmDouble **  pxyz_list)
virtual

Implements Element.

Definition at line 342 of file Tetra.cpp.

342  {/*{{{*/
343 
344  int indices[3];
345  IssmDouble xyz_list[NUMVERTICES][3];
346 
347  /*Element XYZ list*/
348  ::GetVerticesCoordinates(&xyz_list[0][0],this->vertices,NUMVERTICES);
349 
350  /*Allocate Output*/
351  IssmDouble* xyz_list_edge = xNew<IssmDouble>(3*3);
352  this->FaceOnSurfaceIndices(&indices[0],&indices[1],&indices[2]);
353  for(int i=0;i<3;i++) for(int j=0;j<3;j++) xyz_list_edge[i*3+j]=xyz_list[indices[i]][j];
354 
355  /*Assign output pointer*/
356  *pxyz_list = xyz_list_edge;
357 
358 }/*}}}*/

◆ GradientIndexing()

void Tetra::GradientIndexing ( int *  indexing,
int  control_index 
)
inline

Definition at line 84 of file Tetra.h.

84 {_error_("not implemented yet");};

◆ GroundedArea()

IssmDouble Tetra::GroundedArea ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 85 of file Tetra.h.

85 {_error_("not implemented yet");};

◆ HasFaceOnBase()

bool Tetra::HasFaceOnBase ( )

Definition at line 359 of file Tetra.cpp.

359  {/*{{{*/
360 
361  IssmDouble values[NUMVERTICES];
362  IssmDouble sum;
363 
364  /*Retrieve all inputs and parameters*/
366  sum = values[0]+values[1]+values[2]+values[3];
367 
368  _assert_(sum==0. || sum==1. || sum==2. || sum==3.);
369 
370  if(sum==3){
371  return true;
372  }
373  else{
374  return false;
375  }
376 }

◆ HasFaceOnSurface()

bool Tetra::HasFaceOnSurface ( )

Definition at line 378 of file Tetra.cpp.

378  {/*{{{*/
379 
380  IssmDouble values[NUMVERTICES];
381  IssmDouble sum;
382 
383  /*Retrieve all inputs and parameters*/
385  sum = values[0]+values[1]+values[2]+values[3];
386 
387  _assert_(sum==0. || sum==1. || sum==2. || sum==3.);
388 
389  if(sum==3){
390  return true;
391  }
392  else{
393  return false;
394  }
395 }

◆ IceVolume()

IssmDouble Tetra::IceVolume ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 88 of file Tetra.h.

88 {_error_("not implemented yet");};

◆ IceVolumeAboveFloatation()

IssmDouble Tetra::IceVolumeAboveFloatation ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 89 of file Tetra.h.

89 {_error_("not implemented yet");};

◆ IsFaceOnBoundary()

bool Tetra::IsFaceOnBoundary ( void  )
inlinevirtual

Implements Element.

Definition at line 90 of file Tetra.h.

90 {_error_("not implemented yet");};

◆ IsIcefront()

bool Tetra::IsIcefront ( void  )
virtual

Implements Element.

Definition at line 451 of file Tetra.cpp.

451  {/*{{{*/
452 
453  /*Retrieve all inputs and parameters*/
456 
457  /* If only one vertex has ice, there is an ice front here */
458  if(IsIceInElement()){
459  int nrice=0;
460  for(int i=0;i<NUMVERTICES;i++) if(ls[i]<0.) nrice++;
461  if(nrice==1) return true;
462  }
463  return false;
464 }/*}}}*/

◆ IsNodeOnShelfFromFlags()

bool Tetra::IsNodeOnShelfFromFlags ( IssmDouble flags)
inlinevirtual

Implements Element.

Definition at line 92 of file Tetra.h.

92 {_error_("not implemented yet");};

◆ IsZeroLevelset()

bool Tetra::IsZeroLevelset ( int  levelset_enum)
inlinevirtual

Implements Element.

Definition at line 93 of file Tetra.h.

93 {_error_("not implemented");};

◆ InputDepthAverageAtBase()

void Tetra::InputDepthAverageAtBase ( int  enum_type,
int  average_enum_type 
)
inlinevirtual

Implements Element.

Definition at line 94 of file Tetra.h.

94 {_error_("not implemented yet");};

◆ InputExtrude()

void Tetra::InputExtrude ( int  enum_type,
int  start 
)
inlinevirtual

Implements Element.

Definition at line 95 of file Tetra.h.

95 {_error_("not implemented"); /*For penta only*/};

◆ InputUpdateFromIoModel()

void Tetra::InputUpdateFromIoModel ( int  index,
IoModel iomodel 
)
virtual

Implements Element.

Definition at line 397 of file Tetra.cpp.

397  { /*{{{*/
398 
399  /*Intermediaries*/
400  int i,j;
401  int tetra_vertex_ids[NUMVERTICES];
402  IssmDouble nodeinputs[NUMVERTICES];
403  IssmDouble cmmininputs[NUMVERTICES];
404  IssmDouble cmmaxinputs[NUMVERTICES];
405 
406  IssmDouble yts;
407  bool control_analysis;
408  char** controls = NULL;
409  int num_control_type,num_responses;
410 
411  /*Fetch parameters: */
412  iomodel->FindConstant(&yts,"md.constants.yts");
413  iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
414  if(control_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
415  if(control_analysis) iomodel->FindConstant(&num_responses,"md.inversion.num_cost_functions");
416 
417  /*Recover vertices ids needed to initialize inputs*/
418  _assert_(iomodel->elements);
419  for(i=0;i<NUMVERTICES;i++){
420  tetra_vertex_ids[i]=iomodel->elements[NUMVERTICES*index+i]; //ids for vertices are in the elements array from Matlab
421  }
422 }

◆ InputUpdateFromSolutionOneDof()

void Tetra::InputUpdateFromSolutionOneDof ( IssmDouble solution,
int  inputenum 
)
virtual

Implements Element.

Definition at line 424 of file Tetra.cpp.

424  {/*{{{*/
425 
426  /*Intermediary*/
427  int* doflist = NULL;
428 
429  /*Fetch number of nodes for this finite element*/
430  int numnodes = this->NumberofNodes(this->element_type);
431 
432  /*Fetch dof list and allocate solution vector*/
434  IssmDouble* values = xNew<IssmDouble>(numnodes);
435 
436  /*Use the dof list to index into the solution vector: */
437  for(int i=0;i<numnodes;i++){
438  values[i]=solution[doflist[i]];
439  if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
440  if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
441  }
442 
443  /*Add input to the element: */
444  this->AddInput2(enum_type,values,this->element_type);
445 
446  /*Free ressources:*/
447  xDelete<IssmDouble>(values);
448  xDelete<int>(doflist);
449 }

◆ InputUpdateFromSolutionOneDofCollapsed()

void Tetra::InputUpdateFromSolutionOneDofCollapsed ( IssmDouble solution,
int  inputenum 
)
inlinevirtual

Implements Element.

Definition at line 98 of file Tetra.h.

98 {_error_("not implemented yet");};

◆ InputUpdateFromVector()

void Tetra::InputUpdateFromVector ( IssmDouble vector,
int  name,
int  type 
)
inlinevirtual

Implements Element.

Definition at line 99 of file Tetra.h.

99 {_error_("not implemented yet");};

◆ JacobianDeterminant()

void Tetra::JacobianDeterminant ( IssmDouble Jdet,
IssmDouble xyz_list,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 465 of file Tetra.cpp.

465  {/*{{{*/
466 
467  _assert_(gauss->Enum()==GaussTetraEnum);
468  this->GetJacobianDeterminant(pJdet,xyz_list,(GaussTetra*)gauss);
469 
470 }

◆ JacobianDeterminantBase()

void Tetra::JacobianDeterminantBase ( IssmDouble pJdet,
IssmDouble xyz_list_base,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 472 of file Tetra.cpp.

472  {/*{{{*/
473 
474  _assert_(gauss->Enum()==GaussTetraEnum);
475  this->GetJacobianDeterminantFace(pJdet,xyz_list_base,(GaussTetra*)gauss);
476 
477 }

◆ JacobianDeterminantLine()

void Tetra::JacobianDeterminantLine ( IssmDouble Jdet,
IssmDouble xyz_list,
Gauss gauss 
)
inlinevirtual

Implements Element.

Definition at line 102 of file Tetra.h.

102 {_error_("not implemented yet");};

◆ JacobianDeterminantSurface()

void Tetra::JacobianDeterminantSurface ( IssmDouble pJdet,
IssmDouble xyz_list,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 479 of file Tetra.cpp.

479  {/*{{{*/
480 
481  _assert_(gauss->Enum()==GaussTetraEnum);
482  this->GetJacobianDeterminantFace(pJdet,xyz_list,(GaussTetra*)gauss);
483 
484 }

◆ JacobianDeterminantTop()

void Tetra::JacobianDeterminantTop ( IssmDouble pJdet,
IssmDouble xyz_list_base,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 486 of file Tetra.cpp.

486  {/*{{{*/
487 
488  _assert_(gauss->Enum()==GaussTetraEnum);
489  this->GetJacobianDeterminantFace(pJdet,xyz_list_base,(GaussTetra*)gauss);
490 
491 }

◆ Masscon()

IssmDouble Tetra::Masscon ( IssmDouble levelset)
inlinevirtual

Implements Element.

Definition at line 105 of file Tetra.h.

105 {_error_("not implemented yet");};

◆ MassFlux() [1/2]

IssmDouble Tetra::MassFlux ( IssmDouble segment)
inlinevirtual

Implements Element.

Definition at line 106 of file Tetra.h.

106 {_error_("not implemented yet");};

◆ MassFlux() [2/2]

IssmDouble Tetra::MassFlux ( IssmDouble  x1,
IssmDouble  y1,
IssmDouble  x2,
IssmDouble  y2,
int  segment_id 
)
inlinevirtual

Implements Element.

Definition at line 107 of file Tetra.h.

107 {_error_("not implemented yet");}

◆ MaterialUpdateFromTemperature()

void Tetra::MaterialUpdateFromTemperature ( void  )
inline

Definition at line 108 of file Tetra.h.

108 {_error_("not implemented yet");};

◆ MinEdgeLength()

IssmDouble Tetra::MinEdgeLength ( IssmDouble xyz_list)
inlinevirtual

Implements Element.

Definition at line 109 of file Tetra.h.

109 {_error_("not implemented yet");};

◆ Misfit()

IssmDouble Tetra::Misfit ( int  modelenum,
int  observationenum,
int  weightsenum 
)
inlinevirtual

Implements Element.

Definition at line 110 of file Tetra.h.

110 {_error_("not implemented yet");};

◆ MisfitArea()

IssmDouble Tetra::MisfitArea ( int  weightsenum)
inlinevirtual

Implements Element.

Definition at line 111 of file Tetra.h.

111 {_error_("not implemented yet");};

◆ NewGauss() [1/6]

Gauss * Tetra::NewGauss ( void  )
virtual

Implements Element.

Definition at line 493 of file Tetra.cpp.

493  {/*{{{*/
494  return new GaussTetra();
495 }

◆ NewGauss() [2/6]

Gauss * Tetra::NewGauss ( int  order)
virtual

Implements Element.

Definition at line 497 of file Tetra.cpp.

497  {/*{{{*/
498  return new GaussTetra(order);
499 }

◆ NewGauss() [3/6]

Gauss* Tetra::NewGauss ( IssmDouble xyz_list,
IssmDouble xyz_list_front,
int  order 
)
inlinevirtual

Implements Element.

Definition at line 114 of file Tetra.h.

114 {_error_("not implemented yet");};

◆ NewGauss() [4/6]

Gauss * Tetra::NewGauss ( IssmDouble xyz_list,
IssmDouble xyz_list_front,
int  order_horiz,
int  order_vert 
)
virtual

Implements Element.

Definition at line 501 of file Tetra.cpp.

501  {/*{{{*/
502  /*FIXME: this is messed up, should provide indices and not xyz_list!*/
503  int indices[3];
504  this->FaceOnFrontIndices(&indices[0],&indices[1],&indices[2]);
505  return new GaussTetra(indices[0],indices[1],indices[2],max(order_horiz,order_vert));
506 }

◆ NewGauss() [5/6]

Gauss* Tetra::NewGauss ( int  point1,
IssmDouble  fraction1,
IssmDouble  fraction2,
bool  mainlyfloating,
int  order 
)
inlinevirtual

Implements Element.

Definition at line 116 of file Tetra.h.

116 {_error_("not implemented yet");};

◆ NewGauss() [6/6]

Gauss* Tetra::NewGauss ( int  point1,
IssmDouble  fraction1,
IssmDouble  fraction2,
int  order 
)
inlinevirtual

Implements Element.

Definition at line 117 of file Tetra.h.

117 {_error_("not implemented yet");};

◆ NewGaussBase()

Gauss * Tetra::NewGaussBase ( int  order)
virtual

Implements Element.

Definition at line 508 of file Tetra.cpp.

508  {/*{{{*/
509 
510  int indices[3];
511  this->FaceOnBaseIndices(&indices[0],&indices[1],&indices[2]);
512  return new GaussTetra(indices[0],indices[1],indices[2],order);
513 }

◆ NewGaussLine()

Gauss* Tetra::NewGaussLine ( int  vertex1,
int  vertex2,
int  order 
)
inlinevirtual

Implements Element.

Definition at line 119 of file Tetra.h.

119 {_error_("not implemented yet");};

◆ NewGaussTop()

Gauss * Tetra::NewGaussTop ( int  order)
virtual

Implements Element.

Definition at line 515 of file Tetra.cpp.

515  {/*{{{*/
516 
517  int indices[3];
518  this->FaceOnSurfaceIndices(&indices[0],&indices[1],&indices[2]);
519  return new GaussTetra(indices[0],indices[1],indices[2],order);
520 }

◆ NodalFunctions()

void Tetra::NodalFunctions ( IssmDouble basis,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 522 of file Tetra.cpp.

522  {/*{{{*/
523 
524  _assert_(gauss->Enum()==GaussTetraEnum);
525  this->GetNodalFunctions(basis,(GaussTetra*)gauss,this->element_type);
526 
527 }

◆ NodalFunctionsDerivatives()

void Tetra::NodalFunctionsDerivatives ( IssmDouble dbasis,
IssmDouble xyz_list,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 529 of file Tetra.cpp.

529  {/*{{{*/
530 
531  _assert_(gauss->Enum()==GaussTetraEnum);
532  this->GetNodalFunctionsDerivatives(dbasis,xyz_list,(GaussTetra*)gauss,this->element_type);
533 
534 }

◆ NodalFunctionsDerivativesVelocity()

void Tetra::NodalFunctionsDerivativesVelocity ( IssmDouble dbasis,
IssmDouble xyz_list,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 536 of file Tetra.cpp.

536  {/*{{{*/
537 
538  _assert_(gauss->Enum()==GaussTetraEnum);
539  this->GetNodalFunctionsDerivatives(dbasis,xyz_list,(GaussTetra*)gauss,this->VelocityInterpolation());
540 
541 }

◆ NodalFunctionsMINIDerivatives()

void Tetra::NodalFunctionsMINIDerivatives ( IssmDouble dbasis,
IssmDouble xyz_list,
Gauss gauss 
)
inlinevirtual

Implements Element.

Definition at line 124 of file Tetra.h.

124 {_error_("not implemented yet");};

◆ NodalFunctionsPressure()

void Tetra::NodalFunctionsPressure ( IssmDouble basis,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 543 of file Tetra.cpp.

543  {/*{{{*/
544 
545  _assert_(gauss->Enum()==GaussTetraEnum);
546  this->GetNodalFunctions(basis,(GaussTetra*)gauss,this->PressureInterpolation());
547 
548 }

◆ NodalFunctionsP1()

void Tetra::NodalFunctionsP1 ( IssmDouble basis,
Gauss gauss 
)
inlinevirtual

Implements Element.

Definition at line 126 of file Tetra.h.

126 {_error_("not implemented yet");};

◆ NodalFunctionsP1Derivatives()

void Tetra::NodalFunctionsP1Derivatives ( IssmDouble dbasis,
IssmDouble xyz_list,
Gauss gauss 
)
inlinevirtual

Implements Element.

Definition at line 127 of file Tetra.h.

127 {_error_("not implemented yet");};

◆ NodalFunctionsP2()

void Tetra::NodalFunctionsP2 ( IssmDouble basis,
Gauss gauss 
)
inlinevirtual

Implements Element.

Definition at line 128 of file Tetra.h.

128 {_error_("not implemented yet");};

◆ NodalFunctionsTensor()

void Tetra::NodalFunctionsTensor ( IssmDouble basis,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 550 of file Tetra.cpp.

550  {/*{{{*/
551 
552  _assert_(gauss->Enum()==GaussTetraEnum);
553  this->GetNodalFunctions(basis,(GaussTetra*)gauss,this->TensorInterpolation());
554 
555 }

◆ NodalFunctionsVelocity()

void Tetra::NodalFunctionsVelocity ( IssmDouble basis,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 557 of file Tetra.cpp.

557  {/*{{{*/
558 
559  _assert_(gauss->Enum()==GaussTetraEnum);
560  this->GetNodalFunctions(basis,(GaussTetra*)gauss,this->VelocityInterpolation());
561 
562 }

◆ NodalValue()

int Tetra::NodalValue ( IssmDouble pvalue,
int  index,
int  natureofdataenum 
)
inlinevirtual

Implements Element.

Definition at line 131 of file Tetra.h.

131 {_error_("not implemented yet");};

◆ NormalBase()

void Tetra::NormalBase ( IssmDouble normal,
IssmDouble xyz_list 
)
virtual

Implements Element.

Definition at line 564 of file Tetra.cpp.

564  {/*{{{*/
565 
566  IssmDouble v13[3],v23[3];
567  IssmDouble normal[3];
568  IssmDouble normal_norm;
569 
570  for(int i=0;i<3;i++){
571  v13[i]=xyz_list[0*3+i]-xyz_list[2*3+i];
572  v23[i]=xyz_list[1*3+i]-xyz_list[2*3+i];
573  }
574 
575  normal[0]=v13[1]*v23[2]-v13[2]*v23[1];
576  normal[1]=v13[2]*v23[0]-v13[0]*v23[2];
577  normal[2]=v13[0]*v23[1]-v13[1]*v23[0];
578  normal_norm=sqrt(normal[0]*normal[0]+ normal[1]*normal[1]+ normal[2]*normal[2]);
579 
580  /*Bed normal is opposite to surface normal*/
581  bed_normal[0]=-normal[0]/normal_norm;
582  bed_normal[1]=-normal[1]/normal_norm;
583  bed_normal[2]=-normal[2]/normal_norm;
584 
585  _assert_(bed_normal[2]<0.);
586 }

◆ NormalSection()

void Tetra::NormalSection ( IssmDouble normal,
IssmDouble xyz_list 
)
virtual

Implements Element.

Definition at line 588 of file Tetra.cpp.

588  {/*{{{*/
589 
590  /*Build unit outward pointing vector*/
591  IssmDouble AB[3];
592  IssmDouble AC[3];
593  IssmDouble norm;
594 
595  AB[0]=xyz_list[1*3+0] - xyz_list[0*3+0];
596  AB[1]=xyz_list[1*3+1] - xyz_list[0*3+1];
597  AB[2]=xyz_list[1*3+2] - xyz_list[0*3+2];
598  AC[0]=xyz_list[2*3+0] - xyz_list[0*3+0];
599  AC[1]=xyz_list[2*3+1] - xyz_list[0*3+1];
600  AC[2]=xyz_list[2*3+2] - xyz_list[0*3+2];
601 
602  cross(normal,AB,AC);
603  norm=sqrt(normal[0]*normal[0]+normal[1]*normal[1]+normal[2]*normal[2]);
604 
605  for(int i=0;i<3;i++) normal[i]=normal[i]/norm;
606 }

◆ NormalTop()

void Tetra::NormalTop ( IssmDouble normal,
IssmDouble xyz_list 
)
virtual

Implements Element.

Definition at line 608 of file Tetra.cpp.

608  {/*{{{*/
609 
610  IssmDouble v13[3],v23[3];
611  IssmDouble normal[3];
612  IssmDouble normal_norm;
613 
614  for(int i=0;i<3;i++){
615  v13[i]=xyz_list[0*3+i]-xyz_list[2*3+i];
616  v23[i]=xyz_list[1*3+i]-xyz_list[2*3+i];
617  }
618 
619  normal[0]=v13[1]*v23[2]-v13[2]*v23[1];
620  normal[1]=v13[2]*v23[0]-v13[0]*v23[2];
621  normal[2]=v13[0]*v23[1]-v13[1]*v23[0];
622  normal_norm=sqrt(normal[0]*normal[0]+ normal[1]*normal[1]+ normal[2]*normal[2]);
623 
624  top_normal[0]=normal[0]/normal_norm;
625  top_normal[1]=normal[1]/normal_norm;
626  top_normal[2]=normal[2]/normal_norm;
627  _assert_(top_normal[2]>0.);
628 }

◆ NumberofNodesPressure()

int Tetra::NumberofNodesPressure ( void  )
virtual

Implements Element.

Definition at line 630 of file Tetra.cpp.

630  {/*{{{*/
632 }

◆ NumberofNodesVelocity()

int Tetra::NumberofNodesVelocity ( void  )
virtual

Implements Element.

Definition at line 634 of file Tetra.cpp.

634  {/*{{{*/
636 }

◆ PotentialUngrounding()

void Tetra::PotentialUngrounding ( Vector< IssmDouble > *  potential_sheet_ungrounding)
inlinevirtual

Implements Element.

Definition at line 137 of file Tetra.h.

137 {_error_("not implemented yet");};

◆ PressureInterpolation()

int Tetra::PressureInterpolation ( void  )
virtual

Implements Element.

Definition at line 643 of file Tetra.cpp.

643  {/*{{{*/
645 }

◆ ResetFSBasalBoundaryCondition()

void Tetra::ResetFSBasalBoundaryCondition ( void  )
virtual

Implements Element.

Definition at line 682 of file Tetra.cpp.

682  {/*{{{*/
683 
684  int numnodes = this->GetNumberOfNodes();
685 
686  int approximation;
687  IssmDouble* vertexonbase= NULL;
688  IssmDouble slopex,slopey,groundedice;
689  IssmDouble xz_plane[6];
690 
691  /*For FS only: we want the CS to be tangential to the bedrock*/
692  this->GetInput2Value(&approximation,ApproximationEnum);
693  if(!HasNodeOnBase() || approximation!=FSApproximationEnum) return;
694 
695  //printf("element number %i \n",this->id);
696  /*Get inputs*/
697  Input2* slopex_input=this->GetInput2(BedSlopeXEnum); _assert_(slopex_input);
698  Input2* slopey_input=this->GetInput2(BedSlopeYEnum); _assert_(slopey_input);
699  Input2* groundedicelevelset_input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
700  vertexonbase = xNew<IssmDouble>(numnodes);
701  this->GetInputListOnNodesVelocity(&vertexonbase[0],MeshVertexonbaseEnum);
702 
703  /*Loop over basal nodes and update their CS*/
704  GaussTetra* gauss = new GaussTetra();
705  for(int i=0;i<this->NumberofNodesVelocity();i++){
706 
707  if(vertexonbase[i]==1){
708  gauss->GaussNode(this->VelocityInterpolation(),i);
709 
710  slopex_input->GetInputValue(&slopex,gauss);
711  slopey_input->GetInputValue(&slopey,gauss);
712  groundedicelevelset_input->GetInputValue(&groundedice,gauss);
713 
714  /*New X axis New Z axis*/
715  xz_plane[0]=1.; xz_plane[3]=-slopex;
716  xz_plane[1]=0.; xz_plane[4]=-slopey;
717  xz_plane[2]=slopex; xz_plane[5]=1.;
718 
719  if(groundedice>0){
720  if(this->nodes[i]->GetApproximation()==FSvelocityEnum){
721  this->nodes[i]->DofInSSet(2); //vz
722  }
723  else _error_("Flow equation approximation"<<EnumToStringx(this->nodes[i]->GetApproximation())<<" not supported yet");
724  }
725  else{
726  if(this->nodes[i]->GetApproximation()==FSvelocityEnum){
727  this->nodes[i]->DofInFSet(2); //vz
728  }
729  else _error_("Flow equation approximation"<<EnumToStringx(this->nodes[i]->GetApproximation())<<" not supported yet");
730  }
731 
732  XZvectorsToCoordinateSystem(&this->nodes[i]->coord_system[0][0],&xz_plane[0]);
733  }
734  }
735 
736  /*cleanup*/
737  xDelete<IssmDouble>(vertexonbase);
738  delete gauss;
739 }

◆ ResetHooks()

void Tetra::ResetHooks ( )
virtual

Implements Element.

Definition at line 741 of file Tetra.cpp.

741  {/*{{{*/
742 
743  if(this->nodes) xDelete<Node*>(this->nodes);
744  this->nodes=NULL;
745  this->vertices=NULL;
746  this->material=NULL;
747  this->parameters=NULL;
748 
749  //deal with ElementHook mother class
750  for(int i=0;i<this->numanalyses;i++) if(this->hnodes[i]) this->hnodes[i]->reset();
751  this->hvertices->reset();
752  this->hmaterial->reset();
753  if(this->hneighbors) this->hneighbors->reset();
754 }

◆ ReduceMatrices()

void Tetra::ReduceMatrices ( ElementMatrix Ke,
ElementVector pe 
)
virtual

Implements Element.

Definition at line 647 of file Tetra.cpp.

647  {/*{{{*/
648 
649  if(pe){
650  if(this->element_type==MINIcondensedEnum){
651  int indices[3]={12,13,14};
652  pe->StaticCondensation(Ke,3,&indices[0]);
653  }
654  else if(this->element_type==P1bubblecondensedEnum){
656  int offset = 0;
657  for(int i=0;i<4;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
658  int* indices=xNew<int>(size);
659  for(int i=0;i<size;i++) indices[i] = offset+i;
660  pe->StaticCondensation(Ke,size,indices);
661  xDelete<int>(indices);
662  }
663  }
664 
665  if(Ke){
666  if(this->element_type==MINIcondensedEnum){
667  int indices[3]={12,13,14};
668  Ke->StaticCondensation(3,&indices[0]);
669  }
670  else if(this->element_type==P1bubblecondensedEnum){
672  int offset = 0;
673  for(int i=0;i<4;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
674  int* indices=xNew<int>(size);
675  for(int i=0;i<size;i++) indices[i] = offset+i;
676  Ke->StaticCondensation(size,indices);
677  xDelete<int>(indices);
678  }
679  }
680 }

◆ SetControlInputsFromVector() [1/2]

void Tetra::SetControlInputsFromVector ( IssmDouble vector,
int  control_enum,
int  control_index,
int  offset,
int  N,
int  M 
)
inlinevirtual

Implements Element.

Definition at line 142 of file Tetra.h.

142 {_error_("not implemented yet");};

◆ SetControlInputsFromVector() [2/2]

void Tetra::SetControlInputsFromVector ( IssmDouble vector,
int  control_enum,
int  control_index 
)
inlinevirtual

Implements Element.

Definition at line 143 of file Tetra.h.

143 {_error_("not implemented yet");};

◆ SetCurrentConfiguration()

void Tetra::SetCurrentConfiguration ( Elements elements,
Loads loads,
Nodes nodes,
Materials materials,
Parameters parameters 
)
virtual

Implements Element.

Definition at line 756 of file Tetra.cpp.

756  {/*{{{*/
757 
758  /*go into parameters and get the analysis_counter: */
759  int analysis_counter;
760  parametersin->FindParam(&analysis_counter,AnalysisCounterEnum);
761 
762  /*Get Element type*/
763  this->element_type=this->element_type_list[analysis_counter];
764 
765  /*Pick up nodes*/
766  if(this->hnodes[analysis_counter]) this->nodes=(Node**)this->hnodes[analysis_counter]->deliverp();
767  else this->nodes=NULL;
768 
769 }

◆ SetTemporaryElementType()

void Tetra::SetTemporaryElementType ( int  element_type_in)
inlinevirtual

Implements Element.

Definition at line 145 of file Tetra.h.

145 {_error_("not implemented yet");};

◆ SpawnBasalElement()

Element * Tetra::SpawnBasalElement ( void  )
virtual

Implements Element.

Definition at line 771 of file Tetra.cpp.

771  {/*{{{*/
772 
774 
775  int index1,index2,index3;
776  this->FaceOnBaseIndices(&index1,&index2,&index3);
777  return SpawnTria(index1,index2,index3);
778 }/*}}}*/

◆ SpawnTopElement()

Element * Tetra::SpawnTopElement ( void  )
virtual

Implements Element.

Definition at line 779 of file Tetra.cpp.

779  {/*{{{*/
780 
782 
783  int index1,index2,index3;
784  this->FaceOnSurfaceIndices(&index1,&index2,&index3);
785  return SpawnTria(index1,index2,index3);
786 }/*}}}*/

◆ SpawnTria()

Tria * Tetra::SpawnTria ( int  index1,
int  index2,
int  index3 
)

Definition at line 787 of file Tetra.cpp.

787  {/*{{{*/
788 
789  int analysis_counter;
790 
791  /*go into parameters and get the analysis_counter: */
792  this->parameters->FindParam(&analysis_counter,AnalysisCounterEnum);
793 
794  /*Create Tria*/
795  Tria* tria=new Tria();
796  tria->id=this->id;
797  tria->parameters=this->parameters;
798  tria->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED)
799  this->SpawnTriaHook(xDynamicCast<ElementHook*>(tria),index1,index2,index3);
800 
801  /*Spawn material*/
802  tria->material=(Material*)this->material->copy2(tria);
803 
804  /*recover nodes, material*/
805  tria->nodes = (Node**)tria->hnodes[analysis_counter]->deliverp();
806  tria->vertices = (Vertex**)tria->hvertices->deliverp();
807 
808  /*Return new Tria*/
809  return tria;
810 }

◆ StabilizationParameter()

IssmDouble Tetra::StabilizationParameter ( IssmDouble  u,
IssmDouble  v,
IssmDouble  w,
IssmDouble  diameter,
IssmDouble  kappa 
)
inlinevirtual

Implements Element.

Definition at line 149 of file Tetra.h.

149 {_error_("not implemented yet");};

◆ StabilizationParameterAnisotropic()

void Tetra::StabilizationParameterAnisotropic ( IssmDouble tau_parameter_anisotropic,
IssmDouble  u,
IssmDouble  v,
IssmDouble  w,
IssmDouble  hx,
IssmDouble  hy,
IssmDouble  hz,
IssmDouble  kappa 
)
inlinevirtual

Implements Element.

Definition at line 150 of file Tetra.h.

150 {_error_("not implemented yet");};

◆ StrainRateparallel()

void Tetra::StrainRateparallel ( void  )
inlinevirtual

Implements Element.

Definition at line 151 of file Tetra.h.

151 {_error_("not implemented yet");};

◆ StrainRateperpendicular()

void Tetra::StrainRateperpendicular ( void  )
inlinevirtual

Implements Element.

Definition at line 152 of file Tetra.h.

152 {_error_("not implemented yet");};

◆ StressIntensityFactor()

void Tetra::StressIntensityFactor ( void  )
inlinevirtual

Implements Element.

Definition at line 153 of file Tetra.h.

153 {_error_("not implemented yet");};

◆ SurfaceArea()

IssmDouble Tetra::SurfaceArea ( void  )
inlinevirtual

Implements Element.

Definition at line 154 of file Tetra.h.

154 {_error_("not implemented yet");};

◆ TensorInterpolation()

int Tetra::TensorInterpolation ( void  )
virtual

Implements Element.

Definition at line 812 of file Tetra.cpp.

812  {/*{{{*/
814 }

◆ TimeAdapt()

IssmDouble Tetra::TimeAdapt ( void  )
inlinevirtual

Implements Element.

Definition at line 156 of file Tetra.h.

156 {_error_("not implemented yet");};

◆ TotalFloatingBmb()

IssmDouble Tetra::TotalFloatingBmb ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 157 of file Tetra.h.

157 {_error_("not implemented yet");};

◆ TotalGroundedBmb()

IssmDouble Tetra::TotalGroundedBmb ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 158 of file Tetra.h.

158 {_error_("not implemented yet");};

◆ TotalSmb()

IssmDouble Tetra::TotalSmb ( bool  scaled)
inlinevirtual

Implements Element.

Definition at line 159 of file Tetra.h.

159 {_error_("not implemented yet");};

◆ Update()

void Tetra::Update ( Inputs2 inputs2,
int  index,
IoModel iomodel,
int  analysis_counter,
int  analysis_type,
int  finitelement 
)
virtual

Implements Element.

Definition at line 816 of file Tetra.cpp.

816  { /*{{{*/
817 
818  /*Intermediaries*/
819  int i;
820  int tetra_vertex_ids[6];
821  IssmDouble nodeinputs[6];
822  IssmDouble yts;
823  bool dakota_analysis;
824  bool isFS;
825  int numnodes;
826  int* tetra_node_ids = NULL;
827 
828  /*Fetch parameters: */
829  iomodel->FindConstant(&yts,"md.constants.yts");
830  iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
831  iomodel->FindConstant(&isFS,"md.flowequation.isFS");
832 
833  /*Checks if debuging*/
834  _assert_(iomodel->elements);
835  _assert_(index==this->sid);
836 
837  /*Recover element type*/
838  this->element_type_list[analysis_counter]=finiteelement_type;
839 
840  /*Recover vertices ids needed to initialize inputs*/
841  for(i=0;i<4;i++) tetra_vertex_ids[i]=iomodel->elements[4*index+i]; //ids for vertices are in the elements array from Matlab
842 
843  /*Recover nodes ids needed to initialize the node hook.*/
844  switch(finiteelement_type){
845  case P1Enum:
846  numnodes = 4;
847  tetra_node_ids = xNew<int>(numnodes);
848  tetra_node_ids[0]=iomodel->elements[4*index+0];
849  tetra_node_ids[1]=iomodel->elements[4*index+1];
850  tetra_node_ids[2]=iomodel->elements[4*index+2];
851  tetra_node_ids[3]=iomodel->elements[4*index+3];
852  break;
854  numnodes = 5;
855  tetra_node_ids = xNew<int>(numnodes);
856  tetra_node_ids[0]=iomodel->elements[4*index+0];
857  tetra_node_ids[1]=iomodel->elements[4*index+1];
858  tetra_node_ids[2]=iomodel->elements[4*index+2];
859  tetra_node_ids[3]=iomodel->elements[4*index+3];
860  tetra_node_ids[4]=iomodel->numberofvertices+index+1;
861  break;
862  case P2Enum:
863  numnodes = 10;
864  tetra_node_ids = xNew<int>(numnodes);
865  tetra_node_ids[0]=iomodel->elements[4*index+0];
866  tetra_node_ids[1]=iomodel->elements[4*index+1];
867  tetra_node_ids[2]=iomodel->elements[4*index+2];
868  tetra_node_ids[3]=iomodel->elements[4*index+3];
869  tetra_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
870  tetra_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
871  tetra_node_ids[6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
872  tetra_node_ids[7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
873  tetra_node_ids[8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
874  tetra_node_ids[9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
875  break;
876  case MINIEnum: case MINIcondensedEnum:
877  numnodes = 9;
878  tetra_node_ids = xNew<int>(numnodes);
879  tetra_node_ids[0]=iomodel->elements[4*index+0];
880  tetra_node_ids[1]=iomodel->elements[4*index+1];
881  tetra_node_ids[2]=iomodel->elements[4*index+2];
882  tetra_node_ids[3]=iomodel->elements[4*index+3];
883  tetra_node_ids[4]=iomodel->numberofvertices+index+1;
884 
885  tetra_node_ids[5]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+0];
886  tetra_node_ids[6]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+1];
887  tetra_node_ids[7]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+2];
888  tetra_node_ids[8]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+3];
889  break;
890  case TaylorHoodEnum:
891  case XTaylorHoodEnum:
892  numnodes = 14;
893  tetra_node_ids = xNew<int>(numnodes);
894  tetra_node_ids[0]=iomodel->elements[4*index+0];
895  tetra_node_ids[1]=iomodel->elements[4*index+1];
896  tetra_node_ids[2]=iomodel->elements[4*index+2];
897  tetra_node_ids[3]=iomodel->elements[4*index+3];
898  tetra_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
899  tetra_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
900  tetra_node_ids[6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
901  tetra_node_ids[7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
902  tetra_node_ids[8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
903  tetra_node_ids[9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
904 
905  tetra_node_ids[10]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+0];
906  tetra_node_ids[11]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+1];
907  tetra_node_ids[12]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+2];
908  tetra_node_ids[13]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+3];
909  break;
910  case LATaylorHoodEnum:
911  numnodes = 10;
912  tetra_node_ids = xNew<int>(numnodes);
913  tetra_node_ids[0]=iomodel->elements[4*index+0];
914  tetra_node_ids[1]=iomodel->elements[4*index+1];
915  tetra_node_ids[2]=iomodel->elements[4*index+2];
916  tetra_node_ids[3]=iomodel->elements[4*index+3];
917  tetra_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
918  tetra_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
919  tetra_node_ids[6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
920  tetra_node_ids[7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
921  tetra_node_ids[8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
922  tetra_node_ids[9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
923  break;
924  default:
925  _error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
926  }
927 
928  /*hooks: */
929  this->SetHookNodes(tetra_node_ids,numnodes,analysis_counter); this->nodes=NULL;
930  xDelete<int>(tetra_node_ids);
931 
932  /*Fill with IoModel*/
933  this->InputUpdateFromIoModel(index,iomodel);
934 }

◆ UpdateConstraintsExtrudeFromBase()

void Tetra::UpdateConstraintsExtrudeFromBase ( void  )
inlinevirtual

Implements Element.

Definition at line 161 of file Tetra.h.

161 {_error_("not implemented");};

◆ UpdateConstraintsExtrudeFromTop()

void Tetra::UpdateConstraintsExtrudeFromTop ( void  )
inlinevirtual

Implements Element.

Definition at line 162 of file Tetra.h.

162 {_error_("not implemented");};

◆ UpdatePotentialUngrounding()

int Tetra::UpdatePotentialUngrounding ( IssmDouble vertices_potentially_ungrounding,
Vector< IssmDouble > *  vec_nodes_on_iceshelf,
IssmDouble nodes_on_iceshelf 
)
inlinevirtual

Implements Element.

Definition at line 163 of file Tetra.h.

163 {_error_("not implemented yet");};

◆ ValueP1DerivativesOnGauss()

void Tetra::ValueP1DerivativesOnGauss ( IssmDouble dvalue,
IssmDouble values,
IssmDouble xyz_list,
Gauss gauss 
)
inlinevirtual

Implements Element.

Definition at line 164 of file Tetra.h.

164 {_error_("not implemented yet");};

◆ ValueP1OnGauss()

void Tetra::ValueP1OnGauss ( IssmDouble pvalue,
IssmDouble values,
Gauss gauss 
)
virtual

Implements Element.

Definition at line 936 of file Tetra.cpp.

936  {/*{{{*/
937  TetraRef::GetInputValue(pvalue,values,gauss,P1Enum);
938 }

◆ VelocityInterpolation()

int Tetra::VelocityInterpolation ( void  )
virtual

Implements Element.

Definition at line 940 of file Tetra.cpp.

940  {/*{{{*/
942 }

◆ VertexConnectivity()

int Tetra::VertexConnectivity ( int  vertexindex)
inlinevirtual

Implements Element.

Definition at line 167 of file Tetra.h.

167 {_error_("not implemented yet");};

◆ VerticalSegmentIndices()

void Tetra::VerticalSegmentIndices ( int **  pindices,
int *  pnumseg 
)
inlinevirtual

Implements Element.

Definition at line 168 of file Tetra.h.

168 {_error_("not implemented yet");};

◆ VerticalSegmentIndicesBase()

void Tetra::VerticalSegmentIndicesBase ( int **  pindices,
int *  pnumseg 
)
inlinevirtual

Implements Element.

Definition at line 169 of file Tetra.h.

169 {_error_("not implemented yet");};

◆ ViscousHeating()

void Tetra::ViscousHeating ( IssmDouble pphi,
IssmDouble xyz_list,
Gauss gauss,
Input2 vx_input,
Input2 vy_input,
Input2 vz_input 
)
virtual

Reimplemented from Element.

Definition at line 944 of file Tetra.cpp.

944  {/*{{{*/
945 
946  /*Intermediaries*/
947  IssmDouble phi;
948  IssmDouble viscosity;
949  IssmDouble epsilon[6];
950 
951  _assert_(gauss->Enum()==GaussTetraEnum);
952  this->StrainRateFS(&epsilon[0],xyz_list,(GaussTetra*)gauss,vx_input,vy_input,vz_input);
953  this->material->ViscosityFS(&viscosity,3,xyz_list,(GaussTetra*)gauss,vx_input,vy_input,vz_input);
954  GetPhi(&phi,&epsilon[0],viscosity);
955 
956  /*Assign output pointer*/
957  *pphi = phi;
958 }

The documentation for this class was generated from the following files:
Tetra::HasFaceOnBase
bool HasFaceOnBase()
Definition: Tetra.cpp:359
ElementHook::ElementHook
ElementHook()
Definition: ElementHook.cpp:18
Element::lid
int lid
Definition: Element.h:46
Tetra::SpawnTria
Tria * SpawnTria(int index1, int index2, int index3)
Definition: Tetra.cpp:787
ElementVector::StaticCondensation
void StaticCondensation(ElementMatrix *Ke, int numindices, int *indices)
Definition: ElementVector.cpp:266
GaussTetra
Definition: GaussTetra.h:12
Tetra::HasFaceOnSurface
bool HasFaceOnSurface()
Definition: Tetra.cpp:378
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
IssmDouble
double IssmDouble
Definition: types.h:37
GaussTetra::GaussVertex
void GaussVertex(int iv)
Definition: GaussTetra.cpp:233
TetraEnum
@ TetraEnum
Definition: EnumDefinitions.h:1300
Tetra::PressureInterpolation
int PressureInterpolation(void)
Definition: Tetra.cpp:643
TetraRef::GetInputValue
void GetInputValue(IssmDouble *p, IssmDouble *plist, Gauss *gauss, int finiteelement)
Definition: TetraRef.cpp:71
ElementHook::SetHookNodes
void SetHookNodes(int *node_ids, int numnodes, int analysis_counter)
Definition: ElementHook.cpp:188
Tetra::Tetra
Tetra()
Definition: Tetra.h:32
TetraRef::VelocityInterpolation
int VelocityInterpolation(int fe_stokes)
Definition: TetraRef.cpp:391
MaskOceanLevelsetEnum
@ MaskOceanLevelsetEnum
Definition: EnumDefinitions.h:640
Hook::deliverp
Object ** deliverp(void)
Definition: Hook.cpp:187
TetraRef::GetJacobianDeterminant
void GetJacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, GaussTetra *gauss)
Definition: TetraRef.cpp:125
MaskIceLevelsetEnum
@ MaskIceLevelsetEnum
Definition: EnumDefinitions.h:641
MARSHALLING_ENUM
#define MARSHALLING_ENUM(EN)
Definition: Marshalling.h:14
MINIEnum
@ MINIEnum
Definition: EnumDefinitions.h:1156
TetraRef::TensorInterpolation
int TensorInterpolation(int fe_stokes)
Definition: TetraRef.cpp:382
Element::StrainRateFS
void StrainRateFS(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
Definition: Element.cpp:4055
MeshVertexonbaseEnum
@ MeshVertexonbaseEnum
Definition: EnumDefinitions.h:653
Material::copy2
virtual Material * copy2(Element *element)=0
Element::vertices
Vertex ** vertices
Definition: Element.h:49
Material
Definition: Material.h:21
AnalysisCounterEnum
@ AnalysisCounterEnum
Definition: EnumDefinitions.h:35
TetraRef::GetJacobianDeterminantFace
void GetJacobianDeterminantFace(IssmDouble *Jdet, IssmDouble *xyz_list, GaussTetra *gauss)
Definition: TetraRef.cpp:139
BedSlopeXEnum
@ BedSlopeXEnum
Definition: EnumDefinitions.h:500
P1bubblecondensedEnum
@ P1bubblecondensedEnum
Definition: EnumDefinitions.h:1219
Tetra::GetInput2
Input2 * GetInput2(int enumtype)
Definition: Tetra.cpp:259
Element::isonbase
bool isonbase
Definition: Element.h:53
FSApproximationEnum
@ FSApproximationEnum
Definition: EnumDefinitions.h:1060
Hook::reset
void reset(void)
Definition: Hook.cpp:211
Tetra::FiniteElement
int FiniteElement(void)
Definition: Tetra.cpp:250
ElementHook::hmaterial
Hook * hmaterial
Definition: ElementHook.h:17
Tetra::InputUpdateFromIoModel
void InputUpdateFromIoModel(int index, IoModel *iomodel)
Definition: Tetra.cpp:397
Tetra::GetNumberOfNodes
int GetNumberOfNodes(void)
Definition: Tetra.cpp:317
GaussTetraEnum
@ GaussTetraEnum
Definition: EnumDefinitions.h:1080
TetraRef::NumberofNodes
int NumberofNodes(int finiteelement)
Definition: TetraRef.cpp:345
Element::nodes
Node ** nodes
Definition: Element.h:48
IoModel::numberofvertices
int numberofvertices
Definition: IoModel.h:99
P1Enum
@ P1Enum
Definition: EnumDefinitions.h:662
ElementMatrix::StaticCondensation
void StaticCondensation(int numindices, int *indices)
Definition: ElementMatrix.cpp:524
TaylorHoodEnum
@ TaylorHoodEnum
Definition: EnumDefinitions.h:1299
Element::GetPhi
void GetPhi(IssmDouble *phi, IssmDouble *epsilon, IssmDouble viscosity)
Definition: Element.cpp:1244
LATaylorHoodEnum
@ LATaylorHoodEnum
Definition: EnumDefinitions.h:1139
IoModel::numberofelements
int numberofelements
Definition: IoModel.h:96
Tetra
Definition: Tetra.h:27
Hook::delivers
Object * delivers(void)
Definition: Hook.cpp:191
Element::inputs2
Inputs2 * inputs2
Definition: Element.h:47
NoneApproximationEnum
@ NoneApproximationEnum
Definition: EnumDefinitions.h:1201
Element::id
int id
Definition: Element.h:44
Element::sid
int sid
Definition: Element.h:45
Element::AddInput2
virtual void AddInput2(int input_enum, IssmDouble *values, int interpolation_enum)
Definition: Element.h:216
ApproximationEnum
@ ApproximationEnum
Definition: EnumDefinitions.h:470
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
Hook
Definition: Hook.h:16
Element::element_type_list
int * element_type_list
Definition: Element.h:55
Hook::configure
void configure(DataSet *dataset)
Definition: Hook.cpp:145
GsetEnum
@ GsetEnum
Definition: EnumDefinitions.h:1093
IoModel::elementtoedgeconnectivity
int * elementtoedgeconnectivity
Definition: IoModel.h:83
IoModel::FindConstant
void FindConstant(bool *pvalue, const char *constant_name)
Definition: IoModel.cpp:2362
Element::GetInput2Value
void GetInput2Value(bool *pvalue, int enum_type)
Definition: Element.cpp:1185
Material::ViscosityFS
virtual void ViscosityFS(IssmDouble *pviscosity, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)=0
MARSHALLING
#define MARSHALLING(FIELD)
Definition: Marshalling.h:29
Element::GetVerticesCoordinates
void GetVerticesCoordinates(IssmDouble **xyz_list)
Definition: Element.cpp:1446
MINIcondensedEnum
@ MINIcondensedEnum
Definition: EnumDefinitions.h:1157
Gauss::Enum
virtual int Enum(void)=0
Tetra::copy
Object * copy()
Definition: Tetra.cpp:65
GaussTetra::GaussNode
void GaussNode(int finitelement, int iv)
Definition: GaussTetra.cpp:186
Hook::copy
Object * copy(void)
Definition: Hook.cpp:61
FSvelocityEnum
@ FSvelocityEnum
Definition: EnumDefinitions.h:1063
P1bubbleEnum
@ P1bubbleEnum
Definition: EnumDefinitions.h:1218
ElementHook::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: ElementHook.cpp:67
Input2
Definition: Input2.h:18
Element::GetDofListLocal
void GetDofListLocal(int **pdoflist, int approximation_enum, int setenum)
Definition: Element.cpp:984
TetraRef::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: TetraRef.h:27
cross
void cross(IssmDouble *result, IssmDouble *vector1, IssmDouble *vector2)
Definition: cross.cpp:13
Tetra::VelocityInterpolation
int VelocityInterpolation(void)
Definition: Tetra.cpp:940
Element::IsIceInElement
bool IsIceInElement()
Definition: Element.cpp:2021
IoModel::Data
IssmDouble * Data(const char *data_name)
Definition: IoModel.cpp:437
TetraRef::GetNodalFunctionsDerivatives
void GetNodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, GaussTetra *gauss, int finiteelement)
Definition: TetraRef.cpp:217
Node
Definition: Node.h:23
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
ElementHook::hvertices
Hook * hvertices
Definition: ElementHook.h:16
Tria
Definition: Tria.h:29
Node::DofInFSet
void DofInFSet(int dof)
Definition: Node.cpp:694
XZvectorsToCoordinateSystem
void XZvectorsToCoordinateSystem(IssmDouble *T, IssmDouble *xzvectors)
Definition: XZvectorsToCoordinateSystem.cpp:8
Element::parameters
Parameters * parameters
Definition: Element.h:51
MeshVertexonsurfaceEnum
@ MeshVertexonsurfaceEnum
Definition: EnumDefinitions.h:655
Node::DofInSSet
void DofInSSet(int dof)
Definition: Node.cpp:709
NUMVERTICES
#define NUMVERTICES
Definition: Tetra.cpp:20
ElementHook::hneighbors
Hook * hneighbors
Definition: ElementHook.h:18
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Tetra::FaceOnBaseIndices
void FaceOnBaseIndices(int *pindex1, int *pindex2, int *pindex3)
Definition: Tetra.cpp:190
TetraRef::PressureInterpolation
int PressureInterpolation(int fe_stokes)
Definition: TetraRef.cpp:367
Element::GetNodeIndex
int GetNodeIndex(Node *node)
Definition: Element.cpp:1212
TetraRef::GetNodalFunctions
void GetNodalFunctions(IssmDouble *basis, Gauss *gauss_in, int finiteelement)
Definition: TetraRef.cpp:170
P2Enum
@ P2Enum
Definition: EnumDefinitions.h:1223
ElementHook::hnodes
Hook ** hnodes
Definition: ElementHook.h:15
IoModel::elements
int * elements
Definition: IoModel.h:79
Element::MarshallElement
void MarshallElement(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction, int numanalyses)
Definition: Element.cpp:2222
Input2::GetInputValue
virtual void GetInputValue(IssmDouble *pvalue, Gauss *gauss)
Definition: Input2.h:38
Vertex
Definition: Vertex.h:19
Element::HasNodeOnBase
bool HasNodeOnBase()
Definition: Element.cpp:1561
ElementHook::SpawnTriaHook
void SpawnTriaHook(ElementHook *triahook, int index1, int index2, int index3)
Definition: ElementHook.cpp:217
Tetra::FaceOnSurfaceIndices
void FaceOnSurfaceIndices(int *pindex1, int *pindex2, int *pindex3)
Definition: Tetra.cpp:230
max
IssmDouble max(IssmDouble a, IssmDouble b)
Definition: extrema.cpp:24
Tetra::FaceOnFrontIndices
void FaceOnFrontIndices(int *pindex1, int *pindex2, int *pindex3)
Definition: Tetra.cpp:210
Element::GetInputListOnVertices
void GetInputListOnVertices(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1131
Tetra::TensorInterpolation
int TensorInterpolation(void)
Definition: Tetra.cpp:812
Element::GetInputListOnNodesVelocity
void GetInputListOnNodesVelocity(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1114
Element::isonsurface
bool isonsurface
Definition: Element.h:52
Element::element_type
int element_type
Definition: Element.h:56
Node::GetNumberOfDofs
int GetNumberOfDofs(int approximation_enum, int setenum)
Definition: Node.cpp:741
Element::material
Material * material
Definition: Element.h:50
GetNumberOfDofs
int GetNumberOfDofs(Node **nodes, int numnodes, int setenum, int approximation)
Definition: Node.cpp:1129
BedSlopeYEnum
@ BedSlopeYEnum
Definition: EnumDefinitions.h:501
XTaylorHoodEnum
@ XTaylorHoodEnum
Definition: EnumDefinitions.h:1329
IoModel::numberofedges
int numberofedges
Definition: IoModel.h:93
Tetra::NumberofNodesVelocity
int NumberofNodesVelocity(void)
Definition: Tetra.cpp:634
ElementHook::numanalyses
int numanalyses
Definition: ElementHook.h:14