 |
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"
12 iomodel->
FindConstant(&hydrology_model,
"md.hydrology.model");
26 iomodel->
FindConstant(&hydrology_model,
"md.hydrology.model");
33 iomodel->
DeleteData(2,
"md.mesh.vertexonbase",
"md.mesh.vertexonsurface");
42 iomodel->
FindConstant(&hydrology_model,
"md.hydrology.model");
52 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,
P1Enum);
77 char** requestedoutputs = NULL;
78 iomodel->
FindConstant(&hydrology_model,
"md.hydrology.model");
86 iomodel->
FindConstant(&requestedoutputs,&numoutputs,
"md.hydrology.requested_outputs");
89 iomodel->
DeleteData(&requestedoutputs,numoutputs,
"md.hydrology.requested_outputs");
119 IssmDouble* vx = xNew<IssmDouble>(numvertices);
120 IssmDouble* vy = xNew<IssmDouble>(numvertices);
123 for(
int iv=0;iv<numvertices;iv++){
132 vx[iv]= - w*w/(12 * mu_water)*(rho_ice*g*dsdx+(rho_water-rho_ice)*g*dbdx);
133 vy[iv]= - w*w/(12 * mu_water)*(rho_ice*g*dsdy+(rho_water-rho_ice)*g*dbdy);
142 xDelete<IssmDouble>(vx);
143 xDelete<IssmDouble>(vy);
162 IssmDouble* basis = xNew<IssmDouble>(numnodes);
164 IssmDouble* Bprime = xNew<IssmDouble>(2*numnodes);
180 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
191 D_scalar=gauss->
weight*Jdet;
198 GetB(B,element,xyz_list,gauss);
199 GetBprime(Bprime,element,xyz_list,gauss);
203 D_scalar=dt*gauss->
weight*Jdet;
205 D[0][0]=D_scalar*dvxdx;
206 D[1][1]=D_scalar*dvydy;
220 vel=sqrt(vx*vx+vy*vy);
221 D[0][0]=D_scalar*diffusivity*h/(2*vel)*vx*vx;
222 D[1][0]=D_scalar*diffusivity*h/(2*vel)*vy*vx;
223 D[0][1]=D_scalar*diffusivity*h/(2*vel)*vx*vy;
224 D[1][1]=D_scalar*diffusivity*h/(2*vel)*vy*vy;
232 xDelete<IssmDouble>(xyz_list);
233 xDelete<IssmDouble>(basis);
234 xDelete<IssmDouble>(B);
235 xDelete<IssmDouble>(Bprime);
254 IssmDouble* basis = xNew<IssmDouble>(numnodes);
265 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
275 for(
int i=0;i<numnodes;i++) pe->
values[i]+=Jdet*gauss->
weight*(oldw+dt*mb)*basis[i];
278 for(
int i=0;i<numnodes;i++) pe->
values[i]+=Jdet*gauss->
weight*mb*basis[i];
283 xDelete<IssmDouble>(xyz_list);
284 xDelete<IssmDouble>(basis);
307 for(
int i=0;i<numnodes;i++){
308 B[numnodes*0+i] = basis[i];
309 B[numnodes*1+i] = basis[i];
313 xDelete<IssmDouble>(basis);
330 IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes);
334 for(
int i=0;i<numnodes;i++){
335 Bprime[numnodes*0+i] = dbasis[0*numnodes+i];
336 Bprime[numnodes*1+i] = dbasis[1*numnodes+i];
340 xDelete<IssmDouble>(dbasis);
347 _error_(
"Not implemented yet");
359 IssmDouble* values = xNew<IssmDouble>(numnodes);
362 for(
int i=0;i<numnodes;i++){
363 values[i]=solution[doflist[i]];
364 if(xIsNan<IssmDouble>(values[i]))
_error_(
"NaN found in solution vector");
365 if(xIsInf<IssmDouble>(values[i]))
_error_(
"Inf found in solution vector");
366 if (values[i]<10e-10) values[i]=10e-10;
373 xDelete<IssmDouble>(values);
374 xDelete<int>(doflist);
void CreateHydrologyWaterVelocityInput(Element *element)
virtual int GetElementType(void)=0
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
void GetBprime(IssmDouble *Bprime, Element *element, IssmDouble *xyz_list, Gauss *gauss)
Declaration of Nodes class.
virtual int GetNumberOfNodes(void)=0
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
void FindParam(bool *pvalue, int paramenum)
@ HydrologyRequestedOutputsEnum
Declaration of Parameters class.
@ TimesteppingTimeStepEnum
Declaration of Constraints class.
Declaration of Elements class.
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)
ElementVector * CreateDVector(Element *element)
void AddObject(Param *newparam)
@ HydrologyshreveStabilizationEnum
virtual Input2 * GetInput2(int inputenum)=0
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
ElementMatrix * CreateJacobianMatrix(Element *element)
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
void DeleteData(int num,...)
ElementMatrix * CreateKMatrix(Element *element)
Param * CopyConstantObject(const char *constant_name, int param_enum)
int DofsPerNode(int **doflist, int domaintype, int approximation)
@ BasalforcingsGroundediceMeltingRateEnum
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 GetB(IssmDouble *B, Element *element, IssmDouble *xyz_list, Gauss *gauss)
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
void FetchData(bool *pboolean, const char *data_name)
@ HydrologyNumRequestedOutputsEnum
@ MaterialsRhoSeawaterEnum
ElementVector * CreatePVector(Element *element)
@ HydrologyShreveAnalysisEnum
void GetDofListLocal(int **pdoflist, int approximation_enum, int setenum)
void CreateLoads(Loads *loads, IoModel *iomodel)
virtual void GaussVertex(int iv)=0
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
Declaration of Loads class.
void UpdateConstraints(FemModel *femmodel)
void GetSolutionFromInputsOneDof(Vector< IssmDouble > *solution, int solutionenum)
#define _error_(StreamArgs)
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
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
: header file for generic external result object
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
void IoModelToConstraintsx(Constraints *constraints, IoModel *iomodel, const char *spc_name, int analysis_type, int finite_element, int dof)
virtual int GetNumberOfVertices(void)=0
void Core(FemModel *femmodel)
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)