 |
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"
35 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,
P1Enum);
83 IssmDouble* basis = xNew<IssmDouble>(numnodes);
84 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
100 for(
int i=0;i<numnodes;i++){
101 IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
102 HNx[i] = -H[i]*Nx[i]/norm;
103 HNy[i] = -H[i]*Ny[i]/norm;
108 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
112 if(thickness<50.) thickness=50.;
118 gamma=h/(2.*thickness+1.e-10);
124 for(
int i=0;i<numnodes;i++){
125 for(
int j=0;j<numnodes;j++){
127 (basis[i]+gamma*(basis[i]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+i]*hnx + dbasis[1*numnodes+i]*hny))*
128 (basis[j]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
135 xDelete<IssmDouble>(xyz_list);
136 xDelete<IssmDouble>(basis);
137 xDelete<IssmDouble>(dbasis);
138 xDelete<IssmDouble>(H);
139 xDelete<IssmDouble>(Nx);
140 xDelete<IssmDouble>(Ny);
141 xDelete<IssmDouble>(HNx);
142 xDelete<IssmDouble>(HNy);
156 basalelement = element;
159 if(!element->
IsOnBase())
return NULL;
176 IssmDouble* basis = xNew<IssmDouble>(numnodes);
177 IssmDouble* dbasis = xNew<IssmDouble>(numnodes*2);
194 for(
int i=0;i<numnodes;i++){
195 IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
196 Nx[i] = -H[i]*Nx[i]/norm;
197 Ny[i] = -H[i]*Ny[i]/norm;
202 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
218 if(thickness<50.) thickness=50.;
220 gamma=h/(2.*thickness+1.e-10);
222 for(
int i=0;i<numnodes;i++){
223 pe->
values[i]+=Jdet*gauss->
weight*(ms-mb-dhdt)*( basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[1])+hnx*dbasis[0*numnodes+i] + hny*dbasis[1*numnodes+i]));
228 xDelete<IssmDouble>(xyz_list);
229 xDelete<IssmDouble>(basis);
230 xDelete<IssmDouble>(dbasis);
231 xDelete<IssmDouble>(H);
232 xDelete<IssmDouble>(Nx);
233 xDelete<IssmDouble>(Ny);
239 _error_(
"not implemented yet");
242 _error_(
"Not implemented yet");
int DofsPerNode(int **doflist, int domaintype, int approximation)
void GetInputListOnNodes(IssmDouble *pvalue, int enumtype)
Declaration of Nodes class.
ElementMatrix * CreateKMatrix(Element *element)
virtual int GetNumberOfNodes(void)=0
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
@ BalancevelocityAnalysisEnum
void FindParam(bool *pvalue, int paramenum)
@ BalancethicknessThickeningRateEnum
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
: header file for generic external result object
Declaration of Parameters class.
void Core(FemModel *femmodel)
Declaration of Constraints class.
virtual Element * SpawnBasalElement(void)=0
Declaration of Elements class.
void CreateLoads(Loads *loads, IoModel *iomodel)
virtual Input2 * GetInput2(int inputenum)=0
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
void DeleteMaterials(void)
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
virtual void ValueP1OnGauss(IssmDouble *pvalue, IssmDouble *values, Gauss *gauss)=0
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
@ BasalforcingsGroundediceMeltingRateEnum
ElementMatrix * CreateJacobianMatrix(Element *element)
virtual Gauss * NewGauss(void)=0
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
const char * EnumToStringx(int enum_in)
ElementVector * CreatePVector(Element *element)
void UpdateConstraints(FemModel *femmodel)
void GetVerticesCoordinates(IssmDouble **xyz_list)
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
ElementVector * CreateDVector(Element *element)
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
virtual void ValueP1DerivativesOnGauss(IssmDouble *dvalue, IssmDouble *values, IssmDouble *xyz_list, Gauss *gauss)=0
Declaration of Loads class.
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
#define _error_(StreamArgs)
virtual int begin(void)=0
Object * GetObjectByOffset(int offset)
virtual IssmDouble CharacteristicLength(void)=0
@ MeshVertexonsurfaceEnum
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 FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble *solution, int inputenum)=0
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)