 |
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"
21 iomodel->
DeleteData(2,
"md.mesh.vertexonbase",
"md.mesh.vertexonsurface");
33 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,
P1Enum);
61 if(!element->
IsOnBase())
return NULL;
90 IssmDouble* basis = xNew<IssmDouble>(numnodes);
91 IssmDouble* dbasis = xNew<IssmDouble>(dim*numnodes);
92 IssmDouble* Bprime = xNew<IssmDouble>(dim*numnodes);
114 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
120 GetBprime(Bprime,basalelement,dim,xyz_list,gauss);
128 vel = sqrt(vx*vx+vy*vy);
131 vel = 30./yts*500000.;
134 for(
int i=0;i<numnodes;i++){
135 for(
int j=0;j<numnodes;j++){
137 (vx*dbasis[0*numnodes+i] + vy*dbasis[1*numnodes+i])*(vx*dbasis[0*numnodes+j] + vy*dbasis[1*numnodes+j])
138 + vel/500000.*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]));
143 D_scalar=gauss->
weight*Jdet;
152 if(sqrt(vx*vx+vy*vy)<1000./31536000.){
154 for(
int i=0;i<numnodes;i++){
155 for(
int j=0;j<numnodes;j++){
156 Ke->
values[i*numnodes+j] += D_scalar*kappa*(dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]);
162 for(
int i=0;i<numnodes;i++){
163 for(
int j=0;j<numnodes;j++){
164 Ke->
values[i*numnodes+j] += (D_scalar*(vx*dbasis[0*numnodes+j]*basis[i] + vy*dbasis[1*numnodes+j]*basis[i]))*1e-2;
169 vel=sqrt(vx*vx + vy*vy)+1.e-14;
170 D[0][0]=D_scalar*h/(2.*vel)*fabs(vx*vx); D[0][1]=D_scalar*h/(2.*vel)*fabs(vx*vy);
171 D[1][0]=D_scalar*h/(2.*vel)*fabs(vy*vx); D[1][1]=D_scalar*h/(2.*vel)*fabs(vy*vy);
174 Bprime,dim,numnodes,0,
180 xDelete<IssmDouble>(xyz_list);
181 xDelete<IssmDouble>(basis);
182 xDelete<IssmDouble>(dbasis);
183 xDelete<IssmDouble>(Bprime);
193 _error_(
"not implemented yet");
196 _error_(
"Not implemented yet");
221 IssmDouble *mask = xNew<IssmDouble>(numnodes);
223 IssmDouble *ls_active = xNew<IssmDouble>(numnodes);
229 for(
int in=0;in<numnodes;in++){
231 if(mask[in]<0. && ls_active[in]==1.){
239 xDelete<IssmDouble>(mask);
240 xDelete<IssmDouble>(bed);
241 xDelete<IssmDouble>(ls_active);
266 for(
int i=0;i<numnodes;i++){
267 for(
int j=0;j<dim;j++){
268 B[numnodes*j+i] = basis[i];
273 xDelete<IssmDouble>(basis);
290 IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes);
294 for(
int i=0;i<numnodes;i++){
295 for(
int j=0;j<dim;j++){
296 Bprime[numnodes*j+i] = dbasis[j*numnodes+i];
301 xDelete<IssmDouble>(dbasis);
ElementVector * CreateDVector(Element *element)
void GetInputListOnNodes(IssmDouble *pvalue, int enumtype)
Declaration of Nodes class.
virtual int GetNumberOfNodes(void)=0
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
void FindParam(bool *pvalue, int paramenum)
@ GroundinglineHeightEnum
Declaration of Parameters class.
@ MeshVertexonboundaryEnum
Declaration of Constraints class.
virtual Element * SpawnBasalElement(void)=0
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)
@ IceMaskNodeActivationEnum
ElementMatrix * CreateJacobianMatrix(Element *element)
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
virtual Input2 * GetInput2(int inputenum)=0
void DeleteMaterials(void)
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
: header file for generic external result object
void DeleteData(int num,...)
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
virtual Gauss * NewGauss(void)=0
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
const char * EnumToStringx(int enum_in)
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
void GetVerticesCoordinates(IssmDouble **xyz_list)
Node * GetNode(int nodeindex)
void FetchData(bool *pboolean, const char *data_name)
void Core(FemModel *femmodel)
int DofsPerNode(int **doflist, int domaintype, int approximation)
void CreateLoads(Loads *loads, IoModel *iomodel)
void GetBprime(IssmDouble *B, Element *element, int dim, IssmDouble *xyz_list, Gauss *gauss)
Declaration of Loads class.
@ GLheightadvectionAnalysisEnum
#define _error_(StreamArgs)
void SetActiveNodesLSMx(FemModel *femmodel)
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
ElementVector * CreatePVector(Element *element)
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
void ApplyConstraint(int dof, IssmDouble value)
ElementMatrix * CreateKMatrix(Element *element)
virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble *solution, int inputenum)=0
void UpdateConstraints(FemModel *femmodel)
void GetB(IssmDouble *B, Element *element, int dim, IssmDouble *xyz_list, Gauss *gauss)
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)