 |
Ice Sheet System Model
4.18
Code documentation
|
#include <HydrologyGlaDSAnalysis.h>
|
void | CreateConstraints (Constraints *constraints, IoModel *iomodel) |
|
void | CreateLoads (Loads *loads, IoModel *iomodel) |
|
void | CreateNodes (Nodes *nodes, IoModel *iomodel, bool isamr=false) |
|
int | DofsPerNode (int **doflist, int domaintype, int approximation) |
|
void | UpdateElements (Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type) |
|
void | UpdateParameters (Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum) |
|
void | Core (FemModel *femmodel) |
|
ElementVector * | CreateDVector (Element *element) |
|
ElementMatrix * | CreateJacobianMatrix (Element *element) |
|
ElementMatrix * | CreateKMatrix (Element *element) |
|
ElementVector * | CreatePVector (Element *element) |
|
void | GetSolutionFromInputs (Vector< IssmDouble > *solution, Element *element) |
|
void | GradientJ (Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index) |
|
void | InputUpdateFromSolution (IssmDouble *solution, Element *element) |
|
void | UpdateConstraints (FemModel *femmodel) |
|
void | SetChannelCrossSectionOld (FemModel *femmodel) |
|
void | UpdateSheetThickness (FemModel *femmodel) |
|
void | UpdateSheetThickness (Element *element) |
|
void | UpdateChannelCrossSection (FemModel *femmodel) |
|
void | UpdateEffectivePressure (FemModel *femmodel) |
|
void | UpdateEffectivePressure (Element *element) |
|
virtual | ~Analysis () |
|
Definition at line 11 of file HydrologyGlaDSAnalysis.h.
◆ CreateConstraints()
void HydrologyGlaDSAnalysis::CreateConstraints |
( |
Constraints * |
constraints, |
|
|
IoModel * |
iomodel |
|
) |
| |
|
virtual |
◆ CreateLoads()
void HydrologyGlaDSAnalysis::CreateLoads |
( |
Loads * |
loads, |
|
|
IoModel * |
iomodel |
|
) |
| |
|
virtual |
Implements Analysis.
Definition at line 21 of file HydrologyGlaDSAnalysis.cpp.
25 iomodel->
FindConstant(&hydrology_model,
"md.hydrology.model");
34 iomodel->
FindConstant(&ischannels,
"md.hydrology.ischannels");
35 iomodel->
FetchData(&channelarea,&K,&L,
"md.initialization.channelarea");
42 int element=iomodel->
faces[4*i+2]-1;
49 _error_(
"Unknown dimension for channel area initialization.");
57 iomodel->
DeleteData(1,
"md.initialization.channelarea");
70 else if(reCast<int>(iomodel->
Data(
"md.mesh.vertexonbase")[i])){
81 iomodel->
FetchData(&segments,&M,&N,
"md.mesh.segments");
90 xDelete<int>(segments);
◆ CreateNodes()
void HydrologyGlaDSAnalysis::CreateNodes |
( |
Nodes * |
nodes, |
|
|
IoModel * |
iomodel, |
|
|
bool |
isamr = false |
|
) |
| |
|
virtual |
◆ DofsPerNode()
int HydrologyGlaDSAnalysis::DofsPerNode |
( |
int ** |
doflist, |
|
|
int |
domaintype, |
|
|
int |
approximation |
|
) |
| |
|
virtual |
◆ UpdateElements()
void HydrologyGlaDSAnalysis::UpdateElements |
( |
Elements * |
elements, |
|
|
Inputs2 * |
inputs2, |
|
|
IoModel * |
iomodel, |
|
|
int |
analysis_counter, |
|
|
int |
analysis_type |
|
) |
| |
|
virtual |
◆ UpdateParameters()
void HydrologyGlaDSAnalysis::UpdateParameters |
( |
Parameters * |
parameters, |
|
|
IoModel * |
iomodel, |
|
|
int |
solution_enum, |
|
|
int |
analysis_enum |
|
) |
| |
|
virtual |
Implements Analysis.
Definition at line 163 of file HydrologyGlaDSAnalysis.cpp.
168 char** requestedoutputs = NULL;
169 iomodel->
FindConstant(&hydrology_model,
"md.hydrology.model");
195 if(frictionlaw==1 || frictionlaw==3 || frictionlaw==7){
206 iomodel->
FindConstant(&requestedoutputs,&numoutputs,
"md.hydrology.requested_outputs");
209 iomodel->
DeleteData(&requestedoutputs,numoutputs,
"md.hydrology.requested_outputs");
◆ Core()
void HydrologyGlaDSAnalysis::Core |
( |
FemModel * |
femmodel | ) |
|
|
virtual |
◆ CreateDVector()
◆ CreateJacobianMatrix()
◆ CreateKMatrix()
Implements Analysis.
Definition at line 223 of file HydrologyGlaDSAnalysis.cpp.
239 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
240 IssmDouble* basis = xNew<IssmDouble>(numnodes);
261 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
278 IssmDouble normgradphi = sqrt(dphi[0]*dphi[0] + dphi[1]*dphi[1]);
279 if(normgradphi <
AEPS) normgradphi =
AEPS;
284 for(
int i=0;i<numnodes;i++){
285 for(
int j=0;j<numnodes;j++){
287 coeff*dbasis[0*numnodes+i]*dbasis[0*numnodes+j]
288 + coeff*dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
293 phi_0 = rho_water*g*b + rho_ice*g*H;
295 v1 = 2./pow(n,n)*A*h*(pow(fabs(phi_0 - phi),n-1.)*( - n));
296 for(
int i=0;i<numnodes;i++){
297 for(
int j=0;j<numnodes;j++){
298 Ke->
values[i*numnodes+j] += gauss->
weight*Jdet*(-v1)*basis[i]*basis[j];
305 for(
int i=0;i<numnodes;i++){
306 for(
int j=0;j<numnodes;j++){
307 Ke->
values[i*numnodes+j] += gauss->
weight*Jdet*e_v/(rho_water*g*dt)*basis[i]*basis[j];
315 xDelete<IssmDouble>(xyz_list);
316 xDelete<IssmDouble>(basis);
317 xDelete<IssmDouble>(dbasis);
◆ CreatePVector()
Implements Analysis.
Definition at line 321 of file HydrologyGlaDSAnalysis.cpp.
339 IssmDouble* basis = xNew<IssmDouble>(numnodes);
369 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
388 ub = sqrt(vx*vx + vy*vy);
392 if(h<h_r) w = ub*(h_r-h)/l_r;
396 frictionheat=alpha2*ub*ub;
400 m = (G + frictionheat)/(rho_ice*L);
407 phi_0 = rho_water*g*b + rho_ice*g*H;
409 v2 = 2./pow(n,n)*A*h*(pow(fabs(phi_0 - phi),n-1.)*(phi_0 +(n-1.)*phi));
411 for(
int i=0;i<numnodes;i++) pe->
values[i]+= - Jdet*gauss->
weight*(w-v2-m)*basis[i];
416 for(
int i=0;i<numnodes;i++) pe->
values[i] += gauss->
weight*Jdet*e_v/(rho_water*g*dt)*phi_old*basis[i];
421 xDelete<IssmDouble>(xyz_list);
422 xDelete<IssmDouble>(basis);
◆ GetSolutionFromInputs()
◆ GradientJ()
void HydrologyGlaDSAnalysis::GradientJ |
( |
Vector< IssmDouble > * |
gradient, |
|
|
Element * |
element, |
|
|
int |
control_type, |
|
|
int |
control_index |
|
) |
| |
|
virtual |
◆ InputUpdateFromSolution()
void HydrologyGlaDSAnalysis::InputUpdateFromSolution |
( |
IssmDouble * |
solution, |
|
|
Element * |
element |
|
) |
| |
|
virtual |
◆ UpdateConstraints()
void HydrologyGlaDSAnalysis::UpdateConstraints |
( |
FemModel * |
femmodel | ) |
|
|
virtual |
◆ SetChannelCrossSectionOld()
void HydrologyGlaDSAnalysis::SetChannelCrossSectionOld |
( |
FemModel * |
femmodel | ) |
|
◆ UpdateSheetThickness() [1/2]
void HydrologyGlaDSAnalysis::UpdateSheetThickness |
( |
FemModel * |
femmodel | ) |
|
◆ UpdateSheetThickness() [2/2]
void HydrologyGlaDSAnalysis::UpdateSheetThickness |
( |
Element * |
element | ) |
|
Definition at line 466 of file HydrologyGlaDSAnalysis.cpp.
480 IssmDouble* h_new = xNew<IssmDouble>(numvertices);
500 for(
int iv=0;iv<numvertices;iv++){
515 phi_0 = rho_water*g*b + rho_ice*g*H;
519 ub = sqrt(vx*vx + vy*vy);
526 alpha = -ub/l_r - 2./pow(n,n)*A*pow(fabs(N),n-1.)*N;
530 alpha = - 2./pow(n,n)*A*pow(fabs(N),n-1.)*N;
538 if(h_new[iv]<
AEPS) h_new[iv] =
AEPS;
544 xDelete<IssmDouble>(h_new);
◆ UpdateChannelCrossSection()
void HydrologyGlaDSAnalysis::UpdateChannelCrossSection |
( |
FemModel * |
femmodel | ) |
|
◆ UpdateEffectivePressure() [1/2]
void HydrologyGlaDSAnalysis::UpdateEffectivePressure |
( |
FemModel * |
femmodel | ) |
|
◆ UpdateEffectivePressure() [2/2]
void HydrologyGlaDSAnalysis::UpdateEffectivePressure |
( |
Element * |
element | ) |
|
Definition at line 555 of file HydrologyGlaDSAnalysis.cpp.
577 for(
int iv=0;iv<numnodes;iv++){
586 phi_m = rho_water*g*b;
597 if(xIsNan<IssmDouble>(N[iv]))
_error_(
"NaN found in solution vector");
598 if(xIsInf<IssmDouble>(N[iv]))
_error_(
"Inf found in solution vector");
605 xDelete<IssmDouble>(N);
The documentation for this class was generated from the following files:
@ FrictionCoefficientEnum
virtual int GetNumberOfNodes(void)=0
@ HydrologySheetThicknessOldEnum
void FindParam(bool *pvalue, int paramenum)
@ HydrologyRequestedOutputsEnum
int AddObject(Object *object)
@ MaterialsRhoFreshwaterEnum
@ TimesteppingTimeStepEnum
@ HydrologyPressureMeltCoefficientEnum
void UpdateSheetThickness(FemModel *femmodel)
@ MaterialsLatentheatEnum
virtual void GaussNode(int finitelement, int iv)=0
void AddObject(Param *newparam)
@ HydrologyNeumannfluxEnum
virtual Input2 * GetInput2(int inputenum)=0
@ HydrologyGlaDSAnalysisEnum
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
@ HydrologyMoulinInputEnum
void UpdateEffectivePressure(FemModel *femmodel)
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
void DeleteData(int num,...)
@ HydrologySheetConductivityEnum
Param * CopyConstantObject(const char *constant_name, int param_enum)
@ BasalforcingsGroundediceMeltingRateEnum
virtual void AddInput2(int input_enum, IssmDouble *values, int interpolation_enum)
virtual Gauss * NewGauss(void)=0
@ HydrologySheetThicknessEnum
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
@ HydrologyBumpHeightEnum
IssmDouble alpha(IssmDouble x, IssmDouble y, IssmDouble z, int testid)
void FindConstant(bool *pvalue, const char *constant_name)
void GetVerticesCoordinates(IssmDouble **xyz_list)
@ HydrologyCavitySpacingEnum
void SetChannelCrossSectionOld(void)
void FetchData(bool *pboolean, const char *data_name)
@ HydrologyNumRequestedOutputsEnum
void CreateSingleNodeToElementConnectivity(IoModel *iomodel)
virtual void GaussVertex(int iv)=0
IssmDouble ODE1(IssmDouble alpha, IssmDouble beta, IssmDouble Si, IssmDouble dt, int method)
IssmDouble * Data(const char *data_name)
void GetSolutionFromInputsOneDof(Vector< IssmDouble > *solution, int solutionenum)
#define _error_(StreamArgs)
@ HydrologyChannelConductivityEnum
virtual int begin(void)=0
Object * GetObjectByOffset(int offset)
@ MeshVertexonsurfaceEnum
@ HydrologyEnglacialVoidRatioEnum
@ HydrologyChannelSheetWidthEnum
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
@ FrictionEffectivePressureLimitEnum
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 FindParam(bool *pinteger, int enum_type)
virtual int FiniteElement(void)=0
void GetAlpha2(IssmDouble *palpha2, Gauss *gauss)
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)
@ BasalforcingsGeothermalfluxEnum
void CreateFaces(IoModel *iomodel)
virtual int GetNumberOfVertices(void)=0
void UpdateChannelCrossSection(void)
@ HydrologyIschannelsEnum
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
@ HydraulicPotentialOldEnum
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)