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

#include <MeltingAnalysis.h>

Inheritance diagram for MeltingAnalysis:
Analysis

Public Member Functions

void CreateConstraints (Constraints *constraints, IoModel *iomodel)
 
void CreateLoads (Loads *loads, IoModel *iomodel)
 
void CreateNodes (Nodes *nodes, IoModel *iomodel, bool isamr=false)
 
int DofsPerNode (int **doflist, int domaintype, int approximation)
 
void UpdateElements (Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
 
void UpdateParameters (Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
 
void Core (FemModel *femmodel)
 
ElementVectorCreateDVector (Element *element)
 
ElementMatrixCreateJacobianMatrix (Element *element)
 
ElementMatrixCreateKMatrix (Element *element)
 
ElementVectorCreatePVector (Element *element)
 
void GetSolutionFromInputs (Vector< IssmDouble > *solution, Element *element)
 
void GradientJ (Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
 
void InputUpdateFromSolution (IssmDouble *solution, Element *element)
 
void UpdateConstraints (FemModel *femmodel)
 
- Public Member Functions inherited from Analysis
virtual ~Analysis ()
 

Detailed Description

Definition at line 11 of file MeltingAnalysis.h.

Member Function Documentation

◆ CreateConstraints()

void MeltingAnalysis::CreateConstraints ( Constraints constraints,
IoModel iomodel 
)
virtual

Implements Analysis.

Definition at line 8 of file MeltingAnalysis.cpp.

8  {/*{{{*/
9  /*No Constraints*/
10 }/*}}}*/

◆ CreateLoads()

void MeltingAnalysis::CreateLoads ( Loads loads,
IoModel iomodel 
)
virtual

Implements Analysis.

Definition at line 11 of file MeltingAnalysis.cpp.

11  {/*{{{*/
12 
13  /*if 2d: Error*/
14  if(iomodel->domaintype==Domain2DhorizontalEnum) _error_("2d meshes not supported yet");
15 
16  //create penalties for nodes: no node can have a temperature over the melting point
17  iomodel->FetchData(1,"md.mesh.vertexonbase");
19 
20  for(int i=0;i<iomodel->numberofvertices;i++){
21  if(iomodel->my_vertices[i]){
22  if (reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
23  loads->AddObject(new Pengrid(i+1,i,iomodel));
24  }
25  }
26  }
27  iomodel->DeleteData(1,"md.mesh.vertexonbase");
28 
29 }/*}}}*/

◆ CreateNodes()

void MeltingAnalysis::CreateNodes ( Nodes nodes,
IoModel iomodel,
bool  isamr = false 
)
virtual

Implements Analysis.

Definition at line 30 of file MeltingAnalysis.cpp.

30  {/*{{{*/
31 
32  if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
34  iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
35 }/*}}}*/

◆ DofsPerNode()

int MeltingAnalysis::DofsPerNode ( int **  doflist,
int  domaintype,
int  approximation 
)
virtual

Implements Analysis.

Definition at line 36 of file MeltingAnalysis.cpp.

36  {/*{{{*/
37  return 1;
38 }/*}}}*/

◆ UpdateElements()

void MeltingAnalysis::UpdateElements ( Elements elements,
Inputs2 inputs2,
IoModel iomodel,
int  analysis_counter,
int  analysis_type 
)
virtual

Implements Analysis.

Definition at line 39 of file MeltingAnalysis.cpp.

39  {/*{{{*/
40 
41  /*Now, is the model 3d? otherwise, do nothing: */
42  if(iomodel->domaintype==Domain2DhorizontalEnum)return;
43 
44  /*Update elements: */
45  int counter=0;
46  for(int i=0;i<iomodel->numberofelements;i++){
47  if(iomodel->my_elements[i]){
48  Element* element=(Element*)elements->GetObjectByOffset(counter);
49  element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
50  counter++;
51  }
52  }
53 
54  /*Create inputs: */
55  iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
56  iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
57  iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
58  iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
59  iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
60  if(iomodel->domaintype!=Domain2DhorizontalEnum){
61  iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
62  iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
63  }
64  iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
65 }/*}}}*/

◆ UpdateParameters()

void MeltingAnalysis::UpdateParameters ( Parameters parameters,
IoModel iomodel,
int  solution_enum,
int  analysis_enum 
)
virtual

Implements Analysis.

Definition at line 66 of file MeltingAnalysis.cpp.

66  {/*{{{*/
67 }/*}}}*/

◆ Core()

void MeltingAnalysis::Core ( FemModel femmodel)
virtual

Implements Analysis.

Definition at line 70 of file MeltingAnalysis.cpp.

70  {/*{{{*/
71  _error_("not implemented");
72 }/*}}}*/

◆ CreateDVector()

ElementVector * MeltingAnalysis::CreateDVector ( Element element)
virtual

Implements Analysis.

Definition at line 73 of file MeltingAnalysis.cpp.

73  {/*{{{*/
74  /*Default, return NULL*/
75  return NULL;
76 }/*}}}*/

◆ CreateJacobianMatrix()

ElementMatrix * MeltingAnalysis::CreateJacobianMatrix ( Element element)
virtual

Implements Analysis.

Definition at line 77 of file MeltingAnalysis.cpp.

77  {/*{{{*/
78 _error_("Not implemented");
79 }/*}}}*/

◆ CreateKMatrix()

ElementMatrix * MeltingAnalysis::CreateKMatrix ( Element element)
virtual

Implements Analysis.

Definition at line 80 of file MeltingAnalysis.cpp.

80  {/*{{{*/
81 
82  /*Get basal element*/
83  if(!element->IsOnBase()) return NULL;
84  Element* basalelement = element->SpawnBasalElement();
85 
86  /*Intermediaries */
87  IssmDouble D,Jdet;
88  IssmDouble *xyz_list = NULL;
89 
90  /*Fetch number of nodes and dof for this finite element*/
91  int numnodes = basalelement->GetNumberOfNodes();
92 
93  /*Initialize Element vector*/
95  IssmDouble* basis = xNew<IssmDouble>(numnodes);
96 
97  /*Retrieve all inputs and parameters*/
98  basalelement->GetVerticesCoordinates(&xyz_list);
99  IssmDouble latentheat = element->FindParam(MaterialsLatentheatEnum);
100  IssmDouble heatcapacity = element->FindParam(MaterialsHeatcapacityEnum);
101 
102  /* Start looping on the number of gaussian points: */
103  Gauss* gauss=basalelement->NewGauss(2);
104  for(int ig=gauss->begin();ig<gauss->end();ig++){
105  gauss->GaussPoint(ig);
106 
107  basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
108  basalelement->NodalFunctions(basis,gauss);
109  D=latentheat/heatcapacity*gauss->weight*Jdet;
110 
111  TripleMultiply(basis,1,numnodes,1,
112  &D,1,1,0,
113  basis,1,numnodes,0,
114  &Ke->values[0],1);
115  }
116 
117  /*Clean up and return*/
118  xDelete<IssmDouble>(xyz_list);
119  xDelete<IssmDouble>(basis);
120  delete gauss;
121  basalelement->DeleteMaterials(); delete basalelement;
122  return Ke;
123 }/*}}}*/

◆ CreatePVector()

ElementVector * MeltingAnalysis::CreatePVector ( Element element)
virtual

Implements Analysis.

Definition at line 124 of file MeltingAnalysis.cpp.

124  {/*{{{*/
125  return NULL;
126 }/*}}}*/

◆ GetSolutionFromInputs()

void MeltingAnalysis::GetSolutionFromInputs ( Vector< IssmDouble > *  solution,
Element element 
)
virtual

Implements Analysis.

Definition at line 127 of file MeltingAnalysis.cpp.

127  {/*{{{*/
128  _error_("not implemented yet");
129 }/*}}}*/

◆ GradientJ()

void MeltingAnalysis::GradientJ ( Vector< IssmDouble > *  gradient,
Element element,
int  control_type,
int  control_index 
)
virtual

Implements Analysis.

Definition at line 130 of file MeltingAnalysis.cpp.

130  {/*{{{*/
131  _error_("Not implemented yet");
132 }/*}}}*/

◆ InputUpdateFromSolution()

void MeltingAnalysis::InputUpdateFromSolution ( IssmDouble solution,
Element element 
)
virtual

Implements Analysis.

Definition at line 133 of file MeltingAnalysis.cpp.

133  {/*{{{*/
135 }/*}}}*/

◆ UpdateConstraints()

void MeltingAnalysis::UpdateConstraints ( FemModel femmodel)
virtual

Implements Analysis.

Definition at line 136 of file MeltingAnalysis.cpp.

136  {/*{{{*/
137  /*Default, do nothing*/
138  return;
139 }/*}}}*/

The documentation for this class was generated from the following files:
BaseEnum
@ BaseEnum
Definition: EnumDefinitions.h:495
IssmDouble
double IssmDouble
Definition: types.h:37
Element::IsOnBase
bool IsOnBase()
Definition: Element.cpp:1984
Element::GetNumberOfNodes
virtual int GetNumberOfNodes(void)=0
Element::FindParam
void FindParam(bool *pvalue, int paramenum)
Definition: Element.cpp:933
DataSet::AddObject
int AddObject(Object *object)
Definition: DataSet.cpp:252
MaskIceLevelsetEnum
@ MaskIceLevelsetEnum
Definition: EnumDefinitions.h:641
Element::SpawnBasalElement
virtual Element * SpawnBasalElement(void)=0
MeshVertexonbaseEnum
@ MeshVertexonbaseEnum
Definition: EnumDefinitions.h:653
TripleMultiply
int TripleMultiply(IssmDouble *a, int nrowa, int ncola, int itrna, IssmDouble *b, int nrowb, int ncolb, int itrnb, IssmDouble *c, int nrowc, int ncolc, int itrnc, IssmDouble *d, int iaddd)
Definition: MatrixUtils.cpp:20
MaterialsLatentheatEnum
@ MaterialsLatentheatEnum
Definition: EnumDefinitions.h:254
PressureEnum
@ PressureEnum
Definition: EnumDefinitions.h:664
IoModel::my_elements
bool * my_elements
Definition: IoModel.h:66
IoModel::my_vertices
bool * my_vertices
Definition: IoModel.h:72
Element::DeleteMaterials
void DeleteMaterials(void)
Definition: Element.cpp:429
Element
Definition: Element.h:41
Element::NodalFunctions
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
IoModel::numberofvertices
int numberofvertices
Definition: IoModel.h:99
P1Enum
@ P1Enum
Definition: EnumDefinitions.h:662
Domain2DhorizontalEnum
@ Domain2DhorizontalEnum
Definition: EnumDefinitions.h:534
MeltingAnalysisEnum
@ MeltingAnalysisEnum
Definition: EnumDefinitions.h:1182
IoModel::DeleteData
void DeleteData(int num,...)
Definition: IoModel.cpp:500
IoModel::numberofelements
int numberofelements
Definition: IoModel.h:96
BasalforcingsGroundediceMeltingRateEnum
@ BasalforcingsGroundediceMeltingRateEnum
Definition: EnumDefinitions.h:478
NoneApproximationEnum
@ NoneApproximationEnum
Definition: EnumDefinitions.h:1201
Element::NewGauss
virtual Gauss * NewGauss(void)=0
Element::InputUpdateFromSolutionOneDof
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
Pengrid
Definition: Pengrid.h:21
Element::GetVerticesCoordinates
void GetVerticesCoordinates(IssmDouble **xyz_list)
Definition: Element.cpp:1446
MaterialsHeatcapacityEnum
@ MaterialsHeatcapacityEnum
Definition: EnumDefinitions.h:253
SurfaceEnum
@ SurfaceEnum
Definition: EnumDefinitions.h:823
IoModel::FetchData
void FetchData(bool *pboolean, const char *data_name)
Definition: IoModel.cpp:933
Domain3DEnum
@ Domain3DEnum
Definition: EnumDefinitions.h:536
CreateSingleNodeToElementConnectivity
void CreateSingleNodeToElementConnectivity(IoModel *iomodel)
Definition: CreateSingleNodeToElementConnectivity.cpp:10
SealevelEnum
@ SealevelEnum
Definition: EnumDefinitions.h:675
IoModel::Data
IssmDouble * Data(const char *data_name)
Definition: IoModel.cpp:437
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Gauss::begin
virtual int begin(void)=0
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
MeshVertexonsurfaceEnum
@ MeshVertexonsurfaceEnum
Definition: EnumDefinitions.h:655
MeltingAnalysis::CreateNodes
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
Definition: MeltingAnalysis.cpp:30
Element::JacobianDeterminant
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
Gauss::GaussPoint
virtual void GaussPoint(int ig)=0
Element::Update
virtual void Update(Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finite_element)=0
ThicknessEnum
@ ThicknessEnum
Definition: EnumDefinitions.h:840
IoModel::FetchDataToInput
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
Definition: IoModel.cpp:1651
Gauss::weight
IssmDouble weight
Definition: Gauss.h:11
IoModel::domaintype
int domaintype
Definition: IoModel.h:78
ElementMatrix
Definition: ElementMatrix.h:19
Gauss
Definition: Gauss.h:8
ElementMatrix::values
IssmDouble * values
Definition: ElementMatrix.h:26
Element::NewElementMatrix
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)
Definition: Element.cpp:2497