Ice Sheet System Model  4.18
Code documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions
DepthAverageAnalysis Class Reference

#include <DepthAverageAnalysis.h>

Inheritance diagram for DepthAverageAnalysis:
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 GetB (IssmDouble *B, Element *element, int dim, IssmDouble *xyz_list, Gauss *gauss)
 
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 DepthAverageAnalysis.h.

Member Function Documentation

◆ CreateConstraints()

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

Implements Analysis.

Definition at line 8 of file DepthAverageAnalysis.cpp.

8  {/*{{{*/
9 }/*}}}*/

◆ CreateLoads()

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

Implements Analysis.

Definition at line 10 of file DepthAverageAnalysis.cpp.

10  {/*{{{*/
11 }/*}}}*/

◆ CreateNodes()

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

Implements Analysis.

Definition at line 12 of file DepthAverageAnalysis.cpp.

12  {/*{{{*/
13 
15 
16 }/*}}}*/

◆ DofsPerNode()

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

Implements Analysis.

Definition at line 17 of file DepthAverageAnalysis.cpp.

17  {/*{{{*/
18  return 1;
19 }/*}}}*/

◆ UpdateElements()

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

Implements Analysis.

Definition at line 20 of file DepthAverageAnalysis.cpp.

20  {/*{{{*/
21 
22  int counter=0;
23  for(int i=0;i<iomodel->numberofelements;i++){
24  if(iomodel->my_elements[i]){
25  Element* element=(Element*)elements->GetObjectByOffset(counter);
26  element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
27  counter++;
28  }
29  }
30 
31  if(iomodel->domaintype==Domain2DverticalEnum){
32  iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
33  }
34 }/*}}}*/

◆ UpdateParameters()

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

Implements Analysis.

Definition at line 35 of file DepthAverageAnalysis.cpp.

35  {/*{{{*/
36 }/*}}}*/

◆ Core()

void DepthAverageAnalysis::Core ( FemModel femmodel)
virtual

Implements Analysis.

Definition at line 39 of file DepthAverageAnalysis.cpp.

39  {/*{{{*/
40  _error_("not implemented");
41 }/*}}}*/

◆ CreateDVector()

ElementVector * DepthAverageAnalysis::CreateDVector ( Element element)
virtual

Implements Analysis.

Definition at line 42 of file DepthAverageAnalysis.cpp.

42  {/*{{{*/
43  /*Default, return NULL*/
44  return NULL;
45 }/*}}}*/

◆ CreateJacobianMatrix()

ElementMatrix * DepthAverageAnalysis::CreateJacobianMatrix ( Element element)
virtual

Implements Analysis.

Definition at line 46 of file DepthAverageAnalysis.cpp.

46  {/*{{{*/
47 _error_("Not implemented");
48 }/*}}}*/

◆ CreateKMatrix()

ElementMatrix * DepthAverageAnalysis::CreateKMatrix ( Element element)
virtual

Implements Analysis.

Definition at line 49 of file DepthAverageAnalysis.cpp.

49  {/*{{{*/
50 
51  /*Intermediaries */
52  int dim;
53  IssmDouble Jdet,D,dt=1.e+9;
54  IssmDouble *xyz_list = NULL;
55 
56  /*Get dimension*/
57  element->FindParam(&dim,DomainDimensionEnum);
58 
59  /*Fetch number of nodes and dof for this finite element*/
60  int numnodes = element->GetNumberOfNodes();
61 
62  /*Initialize Element vector and other vectors*/
63  ElementMatrix* Ke = element->NewElementMatrix();
64  IssmDouble* B = xNew<IssmDouble>(numnodes);
65 
66  /*Retrieve all inputs and parameters*/
67  element->GetVerticesCoordinates(&xyz_list);
68 
69  /* Start looping on the number of gaussian points: */
70  Gauss* gauss=element->NewGauss(2);
71  for(int ig=gauss->begin();ig<gauss->end();ig++){
72  gauss->GaussPoint(ig);
73 
74  element->JacobianDeterminant(&Jdet,xyz_list,gauss);
75  GetB(B,element,dim,xyz_list,gauss);
76  D=gauss->weight*Jdet*dt;
77 
78  /*vertical diffusion*/
79  TripleMultiply(B,1,numnodes,1,
80  &D,1,1,0,
81  B,1,numnodes,0,
82  &Ke->values[0],1);
83 
84  /*Next value*/
85  D=gauss->weight*Jdet;
86  element->NodalFunctions(B,gauss);
87  TripleMultiply(B,numnodes,1,0,
88  &D,1,1,0,
89  B,1,numnodes,0,
90  &Ke->values[0],1);
91  }
92 
93  /*Clean up and return*/
94  xDelete<IssmDouble>(xyz_list);
95  xDelete<IssmDouble>(B);
96  delete gauss;
97  return Ke;
98 }/*}}}*/

◆ CreatePVector()

ElementVector * DepthAverageAnalysis::CreatePVector ( Element element)
virtual

Implements Analysis.

Definition at line 99 of file DepthAverageAnalysis.cpp.

99  {/*{{{*/
100 
101  /*Intermediaries*/
102  int input_enum;
103  IssmDouble Jdet,scalar,value;
104  IssmDouble* xyz_list = NULL;
105 
106  /*Fetch number of nodes and dof for this finite element*/
107  int numnodes = element->GetNumberOfNodes();
108 
109  /*Initialize Element vector*/
110  ElementVector* pe = element->NewElementVector();
111  IssmDouble* basis = xNew<IssmDouble>(numnodes);
112 
113  /*Retrieve all inputs and parameters*/
114  element->GetVerticesCoordinates(&xyz_list);
115  element->FindParam(&input_enum,InputToDepthaverageInEnum);
116  Input2* input = element->GetInput2(input_enum); _assert_(input);
117 
118  /* Start looping on the number of gaussian points: */
119  Gauss* gauss=element->NewGauss(3);
120  for(int ig=gauss->begin();ig<gauss->end();ig++){
121  gauss->GaussPoint(ig);
122 
123  element->JacobianDeterminant(&Jdet,xyz_list,gauss);
124  element->NodalFunctions(basis,gauss);
125 
126  /* Build transient now */
127  input->GetInputValue(&value, gauss);
128  scalar=value*Jdet*gauss->weight;
129  for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i];
130 
131  }
132 
133  /*Clean up and return*/
134  xDelete<IssmDouble>(basis);
135  xDelete<IssmDouble>(xyz_list);
136  delete gauss;
137  return pe;
138 }/*}}}*/

◆ GetB()

void DepthAverageAnalysis::GetB ( IssmDouble B,
Element element,
int  dim,
IssmDouble xyz_list,
Gauss gauss 
)

Definition at line 139 of file DepthAverageAnalysis.cpp.

139  {/*{{{*/
140  /* Compute B matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];
141  where hi is the interpolation function for node i.*/
142 
143  /*Fetch number of nodes for this finite element*/
144  int numnodes = element->GetNumberOfNodes();
145 
146  /*Get nodal functions derivatives*/
147  IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes);
148  element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
149 
150  /*Build B: */
151  for(int i=0;i<numnodes;i++){
152  B[i] = dbasis[(dim-1)*numnodes+i];
153  }
154 
155  /*Clean-up*/
156  xDelete<IssmDouble>(dbasis);
157 }

◆ GetSolutionFromInputs()

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

Implements Analysis.

Definition at line 159 of file DepthAverageAnalysis.cpp.

159  {/*{{{*/
160  _error_("not implemented yet");
161 }/*}}}*/

◆ GradientJ()

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

Implements Analysis.

Definition at line 162 of file DepthAverageAnalysis.cpp.

162  {/*{{{*/
163  _error_("Not implemented yet");
164 }/*}}}*/

◆ InputUpdateFromSolution()

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

Implements Analysis.

Definition at line 165 of file DepthAverageAnalysis.cpp.

165  {/*{{{*/
166 
167  int inputenum;
168  element->FindParam(&inputenum,InputToDepthaverageOutEnum);
169  element->InputUpdateFromSolutionOneDof(solution,inputenum);
170 }/*}}}*/

◆ UpdateConstraints()

void DepthAverageAnalysis::UpdateConstraints ( FemModel femmodel)
virtual

Implements Analysis.

Definition at line 171 of file DepthAverageAnalysis.cpp.

171  {/*{{{*/
172  /*Default, do nothing*/
173  return;
174 }/*}}}*/

The documentation for this class was generated from the following files:
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
IssmDouble
double IssmDouble
Definition: types.h:37
InputToDepthaverageOutEnum
@ InputToDepthaverageOutEnum
Definition: EnumDefinitions.h:204
Element::GetNumberOfNodes
virtual int GetNumberOfNodes(void)=0
Element::FindParam
void FindParam(bool *pvalue, int paramenum)
Definition: Element.cpp:933
DepthAverageAnalysisEnum
@ DepthAverageAnalysisEnum
Definition: EnumDefinitions.h:1036
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
ElementVector::values
IssmDouble * values
Definition: ElementVector.h:24
IoModel::my_elements
bool * my_elements
Definition: IoModel.h:66
Element::GetInput2
virtual Input2 * GetInput2(int inputenum)=0
Element
Definition: Element.h:41
Element::NodalFunctions
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
P1Enum
@ P1Enum
Definition: EnumDefinitions.h:662
Element::NewElementVector
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
Definition: Element.cpp:2505
IoModel::numberofelements
int numberofelements
Definition: IoModel.h:96
DepthAverageAnalysis::CreateNodes
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
Definition: DepthAverageAnalysis.cpp:12
Element::NewGauss
virtual Gauss * NewGauss(void)=0
Element::InputUpdateFromSolutionOneDof
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
DomainDimensionEnum
@ DomainDimensionEnum
Definition: EnumDefinitions.h:123
Element::GetVerticesCoordinates
void GetVerticesCoordinates(IssmDouble **xyz_list)
Definition: Element.cpp:1446
DepthAverageAnalysis::GetB
void GetB(IssmDouble *B, Element *element, int dim, IssmDouble *xyz_list, Gauss *gauss)
Definition: DepthAverageAnalysis.cpp:139
Input2
Definition: Input2.h:18
InputToDepthaverageInEnum
@ InputToDepthaverageInEnum
Definition: EnumDefinitions.h:203
_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
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
IoModel::FetchDataToInput
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
Definition: IoModel.cpp:1651
ElementVector
Definition: ElementVector.h:20
Input2::GetInputValue
virtual void GetInputValue(IssmDouble *pvalue, Gauss *gauss)
Definition: Input2.h:38
Gauss::weight
IssmDouble weight
Definition: Gauss.h:11
IoModel::domaintype
int domaintype
Definition: IoModel.h:78
Domain2DverticalEnum
@ Domain2DverticalEnum
Definition: EnumDefinitions.h:535
ElementMatrix
Definition: ElementMatrix.h:19
Gauss
Definition: Gauss.h:8
Element::NodalFunctionsDerivatives
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
ElementMatrix::values
IssmDouble * values
Definition: ElementMatrix.h:26
Element::NewElementMatrix
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)
Definition: Element.cpp:2497