 |
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"
15 int numvertex_pairing;
20 iomodel->
FetchData(&vertex_pairing,&numvertex_pairing,NULL,
"md.masstransport.vertex_pairing");
22 for(
int i=0;i<numvertex_pairing;i++){
24 if(iomodel->
my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
31 if(!(reCast<bool>(nodeonbase[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbase[reCast<int>(vertex_pairing[2*i+1])-1])))
continue;
35 penpair_ids[0]=reCast<int>(vertex_pairing[2*i+0]);
36 penpair_ids[1]=reCast<int>(vertex_pairing[2*i+1]);
45 iomodel->
DeleteData(vertex_pairing,
"md.masstransport.vertex_pairing");
46 iomodel->
DeleteData(nodeonbase,
"md.mesh.vertexonbase");
52 iomodel->
DeleteData(2,
"md.mesh.vertexonbase",
"md.mesh.vertexonsurface");
63 int finiteelement =
P1Enum;
70 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
90 int basalforcing_model;
91 iomodel->
FindConstant(&basalforcing_model,
"md.basalforcings.model");
92 switch(basalforcing_model){
139 int domaintype,dim,stabilization;
149 basalelement = element;
153 if(!element->
IsOnBase())
return NULL;
158 if(!element->
IsOnBase())
return NULL;
170 IssmDouble* basis = xNew<IssmDouble>(numnodes);
171 IssmDouble* B = xNew<IssmDouble>(dim*numnodes);
172 IssmDouble* Bprime = xNew<IssmDouble>(dim*numnodes);
186 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
195 D_scalar=gauss->
weight*Jdet;
201 GetB(B,basalelement,dim,xyz_list,gauss);
202 GetBprime(Bprime,basalelement,dim,xyz_list,gauss);
204 D_scalar=dt*gauss->
weight*Jdet;
205 for(
int i=0;i<dim*dim;i++) D[i]=0.;
207 if(dim==2) D[1*dim+1] = D_scalar*vy;
211 Bprime,dim,numnodes,0,
214 if(stabilization==2){
218 D[0] = h/(2.*vel)*vx*vx;
221 vel=sqrt(vx*vx+vy*vy)+1.e-8;
222 D[0*dim+0]=h/(2*vel)*vx*vx;
223 D[1*dim+0]=h/(2*vel)*vy*vx;
224 D[0*dim+1]=h/(2*vel)*vx*vy;
225 D[1*dim+1]=h/(2*vel)*vy*vy;
228 else if(stabilization==1){
237 D[0*dim+0]=h/2.0*fabs(vx);
238 D[1*dim+1]=h/2.0*fabs(vy);
241 if(stabilization==1 || stabilization==2){
242 for(
int i=0;i<dim*dim;i++) D[i]=D_scalar*D[i];
245 Bprime,dim,numnodes,0,
251 xDelete<IssmDouble>(xyz_list);
252 xDelete<IssmDouble>(basis);
253 xDelete<IssmDouble>(B);
254 xDelete<IssmDouble>(Bprime);
255 xDelete<IssmDouble>(D);
272 basalelement = element;
276 if(!element->
IsOnBase())
return NULL;
281 if(!element->
IsOnBase())
return NULL;
293 IssmDouble* basis = xNew<IssmDouble>(numnodes);
306 default:
_error_(
"not implemented");
311 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
325 for(
int i=0;i<numnodes;i++) pe->
values[i]+=Jdet*gauss->
weight*(bed+dt*(mb) + dt*vz)*basis[i];
329 xDelete<IssmDouble>(xyz_list);
330 xDelete<IssmDouble>(basis);
355 for(
int i=0;i<numnodes;i++){
356 for(
int j=0;j<dim;j++){
357 B[numnodes*j+i] = basis[i];
362 xDelete<IssmDouble>(basis);
379 IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes);
383 for(
int i=0;i<numnodes;i++){
384 for(
int j=0;j<dim;j++){
385 Bprime[numnodes*j+i] = dbasis[j*numnodes+i];
390 xDelete<IssmDouble>(dbasis);
394 _error_(
"not implemented yet");
397 _error_(
"Not implemented yet");
418 for(
int iv=0;iv<numnodes;iv++){
@ BasalforcingsPicoBasinIdEnum
@ BasalforcingsOceanTempEnum
virtual int GetElementType(void)=0
Declaration of Nodes class.
virtual int GetNumberOfNodes(void)=0
void FindParam(bool *pvalue, int paramenum)
int AddObject(Object *object)
void UpdateConstraints(FemModel *femmodel)
Declaration of Parameters class.
@ TimesteppingTimeStepEnum
Declaration of Constraints class.
virtual Element * SpawnBasalElement(void)=0
void GetBprime(IssmDouble *B, Element *element, int dim, IssmDouble *xyz_list, Gauss *gauss)
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)
@ MismipFloatingMeltRateEnum
@ FreeSurfaceBaseAnalysisEnum
@ MasstransportStabilizationEnum
virtual void GaussNode(int finitelement, int iv)=0
@ BasalforcingsUpperwaterElevationEnum
@ BasalforcingsDeepwaterMeltingRateEnum
virtual Input2 * GetInput2(int inputenum)=0
void DeleteMaterials(void)
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
void DeleteData(int num,...)
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
ElementMatrix * CreateKMatrix(Element *element)
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
@ BasalforcingsGroundediceMeltingRateEnum
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
ElementVector * CreateDVector(Element *element)
void GetB(IssmDouble *B, Element *element, int dim, IssmDouble *xyz_list, Gauss *gauss)
virtual Gauss * NewGauss(void)=0
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
@ BasalforcingsOceanSalinityEnum
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
const char * EnumToStringx(int enum_in)
@ LinearFloatingMeltRateEnum
@ BeckmannGoosseFloatingMeltRateEnum
@ MantlePlumeGeothermalFluxEnum
@ BasalforcingsFloatingiceMeltingRateEnum
void FindConstant(bool *pvalue, const char *constant_name)
void Core(FemModel *femmodel)
void GetVerticesCoordinates(IssmDouble **xyz_list)
@ BasalforcingsPicoOverturningCoeffEnum
ElementMatrix * CreateJacobianMatrix(Element *element)
@ SpatialLinearFloatingMeltRateEnum
void FetchData(bool *pboolean, const char *data_name)
int DofsPerNode(int **doflist, int domaintype, int approximation)
ElementVector * CreatePVector(Element *element)
@ BasalforcingsIsmip6Enum
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
@ BasalforcingsIsmip6BasinIdEnum
Declaration of Loads class.
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
@ BasalforcingsDeepwaterElevationEnum
#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)
void ApplyConstraint(int dof, IssmDouble value)
: header file for generic external result object
void CreateLoads(Loads *loads, IoModel *iomodel)
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)