Ice Sheet System Model  4.18
Code documentation
GiaAnalysis.cpp
Go to the documentation of this file.
1 #include "./GiaAnalysis.h"
2 #include "../toolkits/toolkits.h"
3 #include "../classes/classes.h"
4 #include "../shared/shared.h"
5 #include "../modules/modules.h"
6 
7 /*Model processing*/
8 void GiaAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
9  /*No constraints*/
10 }/*}}}*/
11 void GiaAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
12  /*No loads*/
13 }/*}}}*/
14 void GiaAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/
15  ::CreateNodes(nodes,iomodel,GiaAnalysisEnum,P1Enum);
16 }/*}}}*/
17 int GiaAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
18  return 1;
19 }/*}}}*/
20 void GiaAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
21 
22  int giamodel=0;
23  int nummodels=0;
24 
25  /*Update elements: */
26  int counter=0;
27  for(int i=0;i<iomodel->numberofelements;i++){
28  if(iomodel->my_elements[i]){
29  Element* element=(Element*)elements->GetObjectByOffset(counter);
30  element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
31  counter++;
32  }
33  }
34 
35  /*fetch gia model type: */
36  iomodel->FetchData(&giamodel,"md.gia.model");
37  if(giamodel==1){ //GiaIvins
38  iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
39  iomodel->FetchDataToInput(inputs2,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
40  iomodel->FetchDataToInput(inputs2,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
41  iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
42  }
43  else if(giamodel==2){ //GiaCaron: not implemneted yet
44  }
45  else if(giamodel==3){
46  /*take Ngia and Ugia from the offline models and plug into the element inputs:*/
47  iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
48  iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
49  }
50 }/*}}}*/
51 void GiaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
52 
53  int giamodel;
54  IssmDouble modelid;
55  int nummodels;
56 
57  /*find gia model type: */
58  parameters->AddObject(iomodel->CopyConstantObject("md.gia.model",GiaModelEnum));
59  parameters->FindParam(&giamodel,GiaModelEnum);
60 
61  if(giamodel==1){ //GiaIvins
62  parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
63  parameters->AddObject(iomodel->CopyConstantObject("md.materials.lithosphere_shear_modulus",MaterialsLithosphereShearModulusEnum));
64  parameters->AddObject(iomodel->CopyConstantObject("md.materials.lithosphere_density",MaterialsLithosphereDensityEnum));
65  parameters->AddObject(iomodel->CopyConstantObject("md.materials.mantle_shear_modulus",MaterialsMantleShearModulusEnum));
66  parameters->AddObject(iomodel->CopyConstantObject("md.materials.mantle_density",MaterialsMantleDensityEnum));
67  }
68  else if(giamodel==2){ //GiaCaron
69  }
70  else if(giamodel==3){ //GiaMme
71 
72  parameters->AddObject(iomodel->CopyConstantObject("md.gia.nummodels",GiaNummodelsEnum));
73  parameters->FindParam(&nummodels,GiaNummodelsEnum);
74 
75  /*create double param, not int param, because Dakota will be updating it as
76  * a double potentially: */
77  iomodel->FetchData(&modelid,"md.gia.modelid");
78  parameters->AddObject(new DoubleParam(GiaModelidEnum,modelid));
79 
80  /*quick checks: */
81  if(nummodels<=0)_error_("giamme object in md.gia field should contain at least 1 ensemble model!");
82  if(modelid<=0 || modelid>nummodels)_error_("modelid field in giamme object of md.gia field should be between 1 and the number of ensemble runs!");
83  }
84 
85 
86 }/*}}}*/
87 
88 /*Finite Element Analysis*/
90  _error_("not implemented");
91 }/*}}}*/
93  /*Default, return NULL*/
94  return NULL;
95 }/*}}}*/
97 _error_("Not implemented");
98 }/*}}}*/
100  _error_("not implemented yet");
101 }/*}}}*/
103 _error_("not implemented yet");
104 }/*}}}*/
106  _error_("not implemented yet");
107 }/*}}}*/
108 void GiaAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
109  _error_("Not implemented yet");
110 }/*}}}*/
112  _error_("not implemented yet");
113 }/*}}}*/
115  /*Default, do nothing*/
116  return;
117 }/*}}}*/
IssmDouble
double IssmDouble
Definition: types.h:37
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
GiaAnalysis::CreateDVector
ElementVector * CreateDVector(Element *element)
Definition: GiaAnalysis.cpp:92
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
MaskIceLevelsetEnum
@ MaskIceLevelsetEnum
Definition: EnumDefinitions.h:641
Constraints
Declaration of Constraints class.
Definition: Constraints.h:13
GiaAnalysis::CreatePVector
ElementVector * CreatePVector(Element *element)
Definition: GiaAnalysis.cpp:102
Elements
Declaration of Elements class.
Definition: Elements.h:17
GiaModelEnum
@ GiaModelEnum
Definition: EnumDefinitions.h:155
GiaAnalysis.h
: header file for generic external result object
IoModel::my_elements
bool * my_elements
Definition: IoModel.h:66
MaterialsMantleShearModulusEnum
@ MaterialsMantleShearModulusEnum
Definition: EnumDefinitions.h:258
Parameters::AddObject
void AddObject(Param *newparam)
Definition: Parameters.cpp:67
GiaAnalysis::CreateNodes
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
Definition: GiaAnalysis.cpp:14
GiaAnalysis::Core
void Core(FemModel *femmodel)
Definition: GiaAnalysis.cpp:89
GiaAnalysis::GetSolutionFromInputs
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
Definition: GiaAnalysis.cpp:105
Element
Definition: Element.h:41
P1Enum
@ P1Enum
Definition: EnumDefinitions.h:662
MaterialsLithosphereShearModulusEnum
@ MaterialsLithosphereShearModulusEnum
Definition: EnumDefinitions.h:256
IoModel::numberofelements
int numberofelements
Definition: IoModel.h:96
DoubleParam
Definition: DoubleParam.h:20
GiaMantleViscosityEnum
@ GiaMantleViscosityEnum
Definition: EnumDefinitions.h:590
IoModel::CopyConstantObject
Param * CopyConstantObject(const char *constant_name, int param_enum)
Definition: IoModel.cpp:418
GiaAnalysisEnum
@ GiaAnalysisEnum
Definition: EnumDefinitions.h:1084
GiaAnalysis::UpdateParameters
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
Definition: GiaAnalysis.cpp:51
GiaAnalysis::UpdateElements
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
Definition: GiaAnalysis.cpp:20
GiaAnalysis::CreateKMatrix
ElementMatrix * CreateKMatrix(Element *element)
Definition: GiaAnalysis.cpp:99
GiaAnalysis::CreateJacobianMatrix
ElementMatrix * CreateJacobianMatrix(Element *element)
Definition: GiaAnalysis.cpp:96
IoModel::FetchData
void FetchData(bool *pboolean, const char *data_name)
Definition: IoModel.cpp:933
Inputs2
Declaration of Inputs class.
Definition: Inputs2.h:23
GiaLithosphereThicknessEnum
@ GiaLithosphereThicknessEnum
Definition: EnumDefinitions.h:589
GiaAnalysis::GradientJ
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
Definition: GiaAnalysis.cpp:108
GiaAnalysis::InputUpdateFromSolution
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
Definition: GiaAnalysis.cpp:111
MaterialsLithosphereDensityEnum
@ MaterialsLithosphereDensityEnum
Definition: EnumDefinitions.h:255
GiaMmeUgiaEnum
@ GiaMmeUgiaEnum
Definition: EnumDefinitions.h:546
GiaMmeNgiaEnum
@ GiaMmeNgiaEnum
Definition: EnumDefinitions.h:545
FemModel
Definition: FemModel.h:31
Loads
Declaration of Loads class.
Definition: Loads.h:16
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
GiaAnalysis::DofsPerNode
int DofsPerNode(int **doflist, int domaintype, int approximation)
Definition: GiaAnalysis.cpp:17
Element::Update
virtual void Update(Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finite_element)=0
GiaAnalysis::CreateLoads
void CreateLoads(Loads *loads, IoModel *iomodel)
Definition: GiaAnalysis.cpp:11
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
MaterialsMantleDensityEnum
@ MaterialsMantleDensityEnum
Definition: EnumDefinitions.h:257
ThicknessEnum
@ ThicknessEnum
Definition: EnumDefinitions.h:840
IoModel::FetchDataToInput
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
Definition: IoModel.cpp:1651
IoModel::FetchDataToDatasetInput
void FetchDataToDatasetInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
Definition: IoModel.cpp:1735
GiaAnalysis::CreateConstraints
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
Definition: GiaAnalysis.cpp:8
GiaAnalysis::UpdateConstraints
void UpdateConstraints(FemModel *femmodel)
Definition: GiaAnalysis.cpp:114
ElementVector
Definition: ElementVector.h:20
IoModel
Definition: IoModel.h:48
GiaModelidEnum
@ GiaModelidEnum
Definition: EnumDefinitions.h:156
ElementMatrix
Definition: ElementMatrix.h:19
Vector< IssmDouble >
GiaCrossSectionShapeEnum
@ GiaCrossSectionShapeEnum
Definition: EnumDefinitions.h:158
GiaNummodelsEnum
@ GiaNummodelsEnum
Definition: EnumDefinitions.h:157
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16