 |
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"
6 #include "../solutionsequences/solutionsequences.h"
21 iomodel->
DeleteData(2,
"md.mesh.vertexonbase",
"md.mesh.vertexonsurface");
39 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
86 bool extrapolatebydiffusion =
true;
87 int dim, domaintype, extrapolationcase;
88 int i,row,col,stabilization;
97 switch(extrapolationcase){
99 if(!element->
IsOnBase())
return NULL;
102 case 1:
case 2:
case 3: workelement=element;
break;
111 default:
_error_(
"not supported yet");
119 IssmDouble *basis = xNew<IssmDouble>(numnodes);
120 IssmDouble *dbasis = xNew<IssmDouble>(dim*numnodes);
134 for(i=0;i<3;i++) xyz_list[3*i+2] = 0.;
135 for(i=3;i<6;i++) xyz_list[3*i+2] = 1.;
140 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
147 D_scalar=gauss->
weight*Jdet;
149 if(extrapolatebydiffusion){
150 for(
int i=0;i<numnodes;i++){
151 for(
int j=0;j<numnodes;j++){
152 Ke->
values[i*numnodes+j] += D_scalar*(dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]);
165 for(i=0;i<dim;i++) norm_dlsf+=dlsf[i]*dlsf[i];
166 norm_dlsf=sqrt(norm_dlsf);
_assert_(norm_dlsf>0.);
169 for(i=0;i<dim;i++) normal[i]=dlsf[i]/norm_dlsf;
171 for(i=0;i<dim;i++) normal[i]=0.;
173 for(
int i=0;i<numnodes;i++){
174 for(
int j=0;j<numnodes;j++){
175 Ke->
values[i*numnodes+j] += D_scalar*(normal[0]*dbasis[0*numnodes+j]*basis[i] + normal[1]*dbasis[1*numnodes+j]*basis[i]);
182 if (stabilization==0){}
183 else if(stabilization==1){
186 h=sqrt(pow(hx*normal[0],2) + pow(hy*normal[1],2));
189 for(
int i=0;i<numnodes;i++){
190 for(
int j=0;j<numnodes;j++){
191 Ke->
values[i*numnodes+j] += D_scalar*kappa*(dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]);
199 xDelete<IssmDouble>(xyz_list);
200 xDelete<IssmDouble>(basis);
201 xDelete<IssmDouble>(dbasis);
203 if(extrapolationcase==0){workelement->
DeleteMaterials();
delete workelement;};
211 _error_(
"not implemented yet");
214 _error_(
"Not implemented yet");
218 int extrapolationvariable, extrapolationcase;
221 switch(extrapolationcase){
239 int domaintype, extrapolationvariable;
240 int extrapolationcase;
256 return extrapolationcase;
274 for(
int in=0;in<numnodes;in++){
virtual int GetElementType(void)=0
Declaration of Nodes class.
virtual int GetNumberOfNodes(void)=0
#define _printf0_(StreamArgs)
void FindParam(bool *pvalue, int paramenum)
Declaration of Parameters class.
@ LevelsetfunctionSlopeXEnum
@ LevelsetfunctionSlopeYEnum
Declaration of Constraints class.
virtual Element * SpawnBasalElement(void)=0
Declaration of Elements class.
@ IceMaskNodeActivationEnum
virtual void GaussNode(int finitelement, int iv)=0
void solutionsequence_linear(FemModel *femmodel)
virtual Input2 * GetInput2(int inputenum)=0
void DeleteMaterials(void)
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
virtual void ElementSizes(IssmDouble *phx, IssmDouble *phy, IssmDouble *phz)=0
@ ExtrapolationAnalysisEnum
void DeleteData(int num,...)
@ ExtrapolationVariableEnum
virtual Gauss * NewGauss(void)=0
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
const char * EnumToStringx(int enum_in)
void GetVerticesCoordinates(IssmDouble **xyz_list)
Node * GetNode(int nodeindex)
void FetchData(bool *pboolean, const char *data_name)
virtual int ObjectEnum()=0
Declaration of Loads class.
#define _error_(StreamArgs)
virtual int begin(void)=0
bool VerboseSolution(void)
Object * GetObjectByOffset(int offset)
@ 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 RequestedOutputsx(Results **presults, char **requested_outputs, int numoutputs, bool save_results=true)
void SetCurrentConfiguration(int configuration_type)
void FindParam(bool *pinteger, int enum_type)
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
void ApplyConstraint(int dof, IssmDouble value)
virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble *solution, int inputenum)=0
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)