Ice Sheet System Model  4.18
Code documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions
HydrologyPismAnalysis Class Reference

#include <HydrologyPismAnalysis.h>

Inheritance diagram for HydrologyPismAnalysis:
Analysis

Public Member Functions

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)
 
ElementVectorCreateDVector (Element *element)
 
ElementMatrixCreateJacobianMatrix (Element *element)
 
ElementMatrixCreateKMatrix (Element *element)
 
ElementVectorCreatePVector (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 UpdateWaterColumn (FemModel *femmodel)
 
void UpdateWaterColumn (Element *element)
 
- Public Member Functions inherited from Analysis
virtual ~Analysis ()
 

Detailed Description

Definition at line 11 of file HydrologyPismAnalysis.h.

Member Function Documentation

◆ CreateConstraints()

void HydrologyPismAnalysis::CreateConstraints ( Constraints constraints,
IoModel iomodel 
)
virtual

Implements Analysis.

Definition at line 8 of file HydrologyPismAnalysis.cpp.

8  {/*{{{*/
9 
10  return;
11 
12 }/*}}}*/

◆ CreateLoads()

void HydrologyPismAnalysis::CreateLoads ( Loads loads,
IoModel iomodel 
)
virtual

Implements Analysis.

Definition at line 13 of file HydrologyPismAnalysis.cpp.

13  {/*{{{*/
14 
15  return;
16 
17 }/*}}}*/

◆ CreateNodes()

void HydrologyPismAnalysis::CreateNodes ( Nodes nodes,
IoModel iomodel,
bool  isamr = false 
)
virtual

Implements Analysis.

Definition at line 18 of file HydrologyPismAnalysis.cpp.

18  {/*{{{*/
19  return;
20 }/*}}}*/

◆ DofsPerNode()

int HydrologyPismAnalysis::DofsPerNode ( int **  doflist,
int  domaintype,
int  approximation 
)
virtual

Implements Analysis.

Definition at line 21 of file HydrologyPismAnalysis.cpp.

21  {/*{{{*/
22  return 0;
23 }/*}}}*/

◆ UpdateElements()

void HydrologyPismAnalysis::UpdateElements ( Elements elements,
Inputs2 inputs2,
IoModel iomodel,
int  analysis_counter,
int  analysis_type 
)
virtual

Implements Analysis.

Definition at line 24 of file HydrologyPismAnalysis.cpp.

24  {/*{{{*/
25 
26  /*Fetch data needed: */
27  int hydrology_model,frictionlaw;
28  iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
29 
30  /*Now, do we really want Pism?*/
31  if(hydrology_model!=HydrologypismEnum) return;
32 
33  /*Add input to elements*/
34  iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
35  iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
36  iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
37  iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum);
38  iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
39  iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
40 }/*}}}*/

◆ UpdateParameters()

void HydrologyPismAnalysis::UpdateParameters ( Parameters parameters,
IoModel iomodel,
int  solution_enum,
int  analysis_enum 
)
virtual

Implements Analysis.

Definition at line 41 of file HydrologyPismAnalysis.cpp.

41  {/*{{{*/
42 
43  /*retrieve some parameters: */
44  int hydrology_model;
45  int numoutputs;
46  char** requestedoutputs = NULL;
47  iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
48 
49  /*Now, do we really want Pism?*/
50  if(hydrology_model!=HydrologypismEnum) return;
51  parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
52 
53  /*Requested outputs*/
54  iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
55  parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
56  if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
57  iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
58 
59  /*Nothing else to add for now*/
60 }/*}}}*/

◆ Core()

void HydrologyPismAnalysis::Core ( FemModel femmodel)
virtual

Implements Analysis.

Definition at line 63 of file HydrologyPismAnalysis.cpp.

63  {/*{{{*/
64  _error_("not implemented");
65 }/*}}}*/

◆ CreateDVector()

ElementVector * HydrologyPismAnalysis::CreateDVector ( Element element)
virtual

Implements Analysis.

Definition at line 66 of file HydrologyPismAnalysis.cpp.

66  {/*{{{*/
67  _error_("not implemented");
68 }/*}}}*/

◆ CreateJacobianMatrix()

ElementMatrix * HydrologyPismAnalysis::CreateJacobianMatrix ( Element element)
virtual

Implements Analysis.

Definition at line 69 of file HydrologyPismAnalysis.cpp.

69  {/*{{{*/
70 _error_("Not implemented");
71 }/*}}}*/

◆ CreateKMatrix()

ElementMatrix * HydrologyPismAnalysis::CreateKMatrix ( Element element)
virtual

Implements Analysis.

Definition at line 72 of file HydrologyPismAnalysis.cpp.

72  {/*{{{*/
73  _error_("not implemented");
74 }/*}}}*/

◆ CreatePVector()

ElementVector * HydrologyPismAnalysis::CreatePVector ( Element element)
virtual

Implements Analysis.

Definition at line 75 of file HydrologyPismAnalysis.cpp.

75  {/*{{{*/
76  _error_("not implemented");
77 }/*}}}*/

◆ GetSolutionFromInputs()

void HydrologyPismAnalysis::GetSolutionFromInputs ( Vector< IssmDouble > *  solution,
Element element 
)
virtual

Implements Analysis.

Definition at line 78 of file HydrologyPismAnalysis.cpp.

78  {/*{{{*/
79  _error_("not implemented");
80 }/*}}}*/

◆ GradientJ()

void HydrologyPismAnalysis::GradientJ ( Vector< IssmDouble > *  gradient,
Element element,
int  control_type,
int  control_index 
)
virtual

Implements Analysis.

Definition at line 81 of file HydrologyPismAnalysis.cpp.

81  {/*{{{*/
82  _error_("Not implemented yet");
83 }/*}}}*/

◆ InputUpdateFromSolution()

void HydrologyPismAnalysis::InputUpdateFromSolution ( IssmDouble solution,
Element element 
)
virtual

Implements Analysis.

Definition at line 84 of file HydrologyPismAnalysis.cpp.

84  {/*{{{*/
85  _error_("not implemented");
86 }/*}}}*/

◆ UpdateConstraints()

void HydrologyPismAnalysis::UpdateConstraints ( FemModel femmodel)
virtual

Implements Analysis.

Definition at line 87 of file HydrologyPismAnalysis.cpp.

87  {/*{{{*/
88  _error_("not implemented");
89 }/*}}}*/

◆ UpdateWaterColumn() [1/2]

void HydrologyPismAnalysis::UpdateWaterColumn ( FemModel femmodel)

Definition at line 92 of file HydrologyPismAnalysis.cpp.

92  {/*{{{*/
93 
94  for(int j=0;j<femmodel->elements->Size();j++){
96  this->UpdateWaterColumn(element);
97  }
98 
99 }/*}}}*/

◆ UpdateWaterColumn() [2/2]

void HydrologyPismAnalysis::UpdateWaterColumn ( Element element)

Definition at line 100 of file HydrologyPismAnalysis.cpp.

100  {/*{{{*/
101 
102  /*Skip if water or ice shelf element*/
103  if(element->IsFloating()) return;
104 
105  /*Intermediaries */
106  IssmDouble dt,drainage_rate,water_column;
107 
108  /*Retrieve all inputs and parameters*/
109  element->FindParam(&dt,TimesteppingTimeStepEnum);
110  IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum);
111  IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum);
112 
113  /*Get water column and drainage rate*/
114  const int numvertices= element->GetNumberOfVertices();
115  IssmDouble* watercolumn = xNew<IssmDouble>(numvertices);
116  IssmDouble* drainagerate = xNew<IssmDouble>(numvertices);
117  IssmDouble* meltingrate = xNew<IssmDouble>(numvertices);
118  IssmDouble* watercolumn_max = xNew<IssmDouble>(numvertices);
119  element->GetInputListOnVertices(&watercolumn[0],WaterColumnOldEnum);
120  element->GetInputListOnVertices(&drainagerate[0],HydrologyDrainageRateEnum);
122  element->GetInputListOnVertices(&watercolumn_max[0],HydrologyWatercolumnMaxEnum);
123 
124  /*Add water*/
125  for(int i=0;i<numvertices;i++){
126  watercolumn[i] += (meltingrate[i]/rho_ice*rho_water-drainagerate[i])*dt;
127  /*Check that water column height is within 0 and upper bound, correct if needed*/
128  if(watercolumn[i]>watercolumn_max[i]) watercolumn[i]=watercolumn_max[i];
129  if(watercolumn[i]<0) watercolumn[i]=0.;
130  }
131 
132  /* Divide by connectivity, add degree of channelization as an input */
133  /*FIXME: should be changed to P1, this is due to the NR, IsFloating will return 0 on this element, but it should not be DG*/
134  element->AddInput2(WatercolumnEnum,&watercolumn[0],P1DGEnum);
135 
136  /*Clean up and return*/
137  xDelete<IssmDouble>(watercolumn);
138  xDelete<IssmDouble>(meltingrate);
139  xDelete<IssmDouble>(watercolumn_max);
140  xDelete<IssmDouble>(drainagerate);
141 }/*}}}*/

The documentation for this class was generated from the following files:
DataSet::Size
int Size()
Definition: DataSet.cpp:399
IssmDouble
double IssmDouble
Definition: types.h:37
Element::FindParam
void FindParam(bool *pvalue, int paramenum)
Definition: Element.cpp:933
HydrologyRequestedOutputsEnum
@ HydrologyRequestedOutputsEnum
Definition: EnumDefinitions.h:173
MaskOceanLevelsetEnum
@ MaskOceanLevelsetEnum
Definition: EnumDefinitions.h:640
MaskIceLevelsetEnum
@ MaskIceLevelsetEnum
Definition: EnumDefinitions.h:641
MaterialsRhoFreshwaterEnum
@ MaterialsRhoFreshwaterEnum
Definition: EnumDefinitions.h:263
TimesteppingTimeStepEnum
@ TimesteppingTimeStepEnum
Definition: EnumDefinitions.h:433
MaterialsRhoIceEnum
@ MaterialsRhoIceEnum
Definition: EnumDefinitions.h:264
P1DGEnum
@ P1DGEnum
Definition: EnumDefinitions.h:1215
Element::IsFloating
bool IsFloating()
Definition: Element.cpp:1987
Parameters::AddObject
void AddObject(Param *newparam)
Definition: Parameters.cpp:67
Element
Definition: Element.h:41
IoModel::DeleteData
void DeleteData(int num,...)
Definition: IoModel.cpp:500
BasalforcingsGroundediceMeltingRateEnum
@ BasalforcingsGroundediceMeltingRateEnum
Definition: EnumDefinitions.h:478
Element::AddInput2
virtual void AddInput2(int input_enum, IssmDouble *values, int interpolation_enum)
Definition: Element.h:216
IoModel::FindConstant
void FindConstant(bool *pvalue, const char *constant_name)
Definition: IoModel.cpp:2362
StringArrayParam
Definition: StringArrayParam.h:20
IntParam
Definition: IntParam.h:20
WaterColumnOldEnum
@ WaterColumnOldEnum
Definition: EnumDefinitions.h:858
HydrologyDrainageRateEnum
@ HydrologyDrainageRateEnum
Definition: EnumDefinitions.h:612
HydrologyNumRequestedOutputsEnum
@ HydrologyNumRequestedOutputsEnum
Definition: EnumDefinitions.h:170
FemModel::elements
Elements * elements
Definition: FemModel.h:44
HydrologyModelEnum
@ HydrologyModelEnum
Definition: EnumDefinitions.h:169
HydrologyPismAnalysis::UpdateWaterColumn
void UpdateWaterColumn(FemModel *femmodel)
Definition: HydrologyPismAnalysis.cpp:92
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
HydrologyWatercolumnMaxEnum
@ HydrologyWatercolumnMaxEnum
Definition: EnumDefinitions.h:623
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
HydrologypismEnum
@ HydrologypismEnum
Definition: EnumDefinitions.h:1107
WatercolumnEnum
@ WatercolumnEnum
Definition: EnumDefinitions.h:859
IoModel::FetchDataToInput
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
Definition: IoModel.cpp:1651
Element::GetNumberOfVertices
virtual int GetNumberOfVertices(void)=0
Element::GetInputListOnVertices
void GetInputListOnVertices(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1131
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16