 |
Ice Sheet System Model
4.18
Code documentation
|
Go to the documentation of this file.
2 #include "../toolkits/toolkits.h"
3 #include "../classes/classes.h"
4 #include "../shared/shared.h"
5 #include "../modules/modules.h"
22 else _error_(
"solution not supported yet");
39 else _error_(
"solution not supported yet");
44 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
101 for(
int iv=0;iv<numvertices;iv++){
103 Ke->
values[iv*numvertices+iv]=1./connectivity;
108 xDelete<IssmDouble>(xyz_list);
109 xDelete<IssmDouble>(M);
127 IssmDouble *basis = xNew<IssmDouble>(numnodes);
138 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
150 if (dim==3) divu=divu+dvz[2];
152 for(
int i=0;i<numnodes;i++){
153 pe->
values[i] += - rhop * divu * Jdet * gauss->
weight * basis[i];
159 xDelete<IssmDouble>(xyz_list);
160 xDelete<IssmDouble>(basis);
174 for(
int i=0;i<numnodes;i++){
179 xDelete<IssmDouble>(basis);
182 _error_(
"not implemented yet");
185 _error_(
"Not implemented yet");
199 else _error_(
"finite element not supported yet");
205 IssmDouble* values = xNew<IssmDouble>(numnodes);
206 IssmDouble* valueslambda = xNewZeroInit<IssmDouble>(numnodessigma);
207 IssmDouble* pressure = xNew<IssmDouble>(numnodes);
215 for(
int i=0;i<numnodes;i++){
216 values[i] = pressure[i] + solution[doflist[i]];
223 if(dim==3)
_error_(
"not implemented yet");
232 IssmDouble* vertexonbase = xNew<IssmDouble>(numnodessigma);
236 IssmDouble* basis = xNewZeroInit<IssmDouble>(numnodessigma);
238 element->
NormalBase(&bed_normal[0],xyz_list_base);
241 for(
int i=0;i<numnodessigma;i++){
244 if(vertexonbase[i]==1){
249 if(onbase!=3)
_error_(
"basal nodes of element not found");
253 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
259 for(
int i=0;i<3;i++){
260 for(
int j=0;j<3;j++){
261 Jlambda[i][j] += Jdet*gauss->
weight*basis[baselist[i]]*basis[baselist[j]];
268 un=bed_normal[0]*vx + bed_normal[1]*vy;
269 for(
int i=0;i<3;i++) Cuk[i] += - un*rholambda*Jdet*gauss->
weight*basis[baselist[i]];
276 for(
int i=0;i<3;i++){
279 valueslambda[baselist[i]] = sigmann + deltalambda[i];
283 xDelete<IssmDouble>(vertexonbase);
284 xDelete<IssmDouble>(xyz_list_base);
285 xDelete<IssmDouble>(basis);
291 xDelete<IssmDouble>(values);
292 xDelete<IssmDouble>(valueslambda);
293 xDelete<IssmDouble>(pressure);
294 xDelete<int>(doflist);
virtual int GetElementType(void)=0
void GetInputListOnNodes(IssmDouble *pvalue, int enumtype)
ElementVector * CreateDVector(Element *element)
Declaration of Nodes class.
virtual int GetNumberOfNodes(void)=0
void FindParam(bool *pvalue, int paramenum)
virtual Gauss * NewGaussBase(int order)=0
ElementMatrix * CreateKMatrix(Element *element)
void CreateLoads(Loads *loads, IoModel *iomodel)
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
Declaration of Parameters class.
Declaration of Constraints class.
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
Declaration of Elements class.
virtual void GaussNode(int finitelement, int iv)=0
virtual void JacobianDeterminantBase(IssmDouble *Jdet, IssmDouble *xyz_list_base, Gauss *gauss)=0
virtual void NormalBase(IssmDouble *normal, IssmDouble *xyz_list)=0
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
void AddObject(Param *newparam)
virtual Input2 * GetInput2(int inputenum)=0
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
int DofsPerNode(int **doflist, int domaintype, int approximation)
@ UzawaPressureAnalysisEnum
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
Param * CopyConstantObject(const char *constant_name, int param_enum)
virtual void AddInput2(int input_enum, IssmDouble *values, int interpolation_enum)
virtual Gauss * NewGauss(void)=0
void FindConstant(bool *pvalue, const char *constant_name)
void GetVerticesCoordinates(IssmDouble **xyz_list)
void GetM(IssmDouble *M, Element *element, Gauss *gauss)
ElementVector * CreatePVector(Element *element)
void GetDofListLocal(int **pdoflist, int approximation_enum, int setenum)
: header file for generic external result object
Declaration of Loads class.
virtual void GetVerticesCoordinatesBase(IssmDouble **xyz_list)=0
#define _error_(StreamArgs)
virtual int begin(void)=0
Object * GetObjectByOffset(int offset)
void UpdateConstraints(FemModel *femmodel)
virtual void NodalFunctionsP2(IssmDouble *basis, Gauss *gauss)=0
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void GaussPoint(int ig)=0
virtual void Update(Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finite_element)=0
void Core(FemModel *femmodel)
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
virtual int VertexConnectivity(int vertexindex)=0
void Matrix3x3Solve(IssmDouble *X, IssmDouble *A, IssmDouble *B)
ElementMatrix * CreateJacobianMatrix(Element *element)
virtual int GetNumberOfVertices(void)=0
@ AugmentedLagrangianRhopEnum
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
@ AugmentedLagrangianRholambdaEnum
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)