Ice Sheet System Model  4.18
Code documentation
Functions
gia_core.cpp File Reference

: core of the GIA solution More...

#include "./cores.h"
#include "../toolkits/toolkits.h"
#include "../classes/classes.h"
#include "../classes/Inputs2/TriaInput2.h"
#include "../classes/Inputs2/DatasetInput2.h"
#include "../shared/shared.h"
#include "../modules/modules.h"
#include "../solutionsequences/solutionsequences.h"

Go to the source code of this file.

Functions

void gia_core (FemModel *femmodel)
 

Detailed Description

: core of the GIA solution

Definition in file gia_core.cpp.

Function Documentation

◆ gia_core()

void gia_core ( FemModel femmodel)

Definition at line 13 of file gia_core.cpp.

13  {
14 
15  Vector<IssmDouble> *wg = NULL;
16  Vector<IssmDouble> *dwdtg = NULL;
17  IssmDouble *x = NULL;
18  IssmDouble *y = NULL;
19  int nummodels,giamodel;
20  IssmDouble modelid;
21 
22  /*parameters: */
23  bool save_results;
24  int gsize;
25 
26  /*Start profiler*/
28 
29  /*Recover some parameters: */
31 
32  if(VerboseSolution()) _printf0_(" computing GIA\n");
33 
34  /*Call on core computations: */
36 
37  /*Figure out type of gia model:*/
39 
40  if(giamodel==1){ //GiaIvins
41  /*Figure out size of g-set deflection vector and allocate solution vector: */
43  wg = new Vector<IssmDouble>(gsize);
44  dwdtg = new Vector<IssmDouble>(gsize);
45 
46  /*first, recover x and y vectors from vertices: */
47  VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
48 
49  /*call the main module: */
50  femmodel->Deflection(wg,dwdtg,x,y);
51 
52  /*assemble vector: */
53  wg->Assemble();
54  dwdtg->Assemble();
55 
58 
59  if(save_results){
60  if(VerboseSolution()) _printf0_(" saving results\n");
61  int outputs[2] = {UGiaEnum,UGiaRateEnum};
62  femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
63  }
64 
65  xDelete<IssmDouble>(x);
66  xDelete<IssmDouble>(y);
67  }
68  else if(giamodel==2){ //GiaCaron
69  /*not implemneted yet*/
70  }
71  else if(giamodel==3){ //GiaMme
72 
73  /*Go grab the values for Ngia and Ugia in the offline GiaMme class:*/
75  modelid--; //from matlab
76 
77  /*find the Ngia and Ugia dataset:*/
80  /*Go find the modelid'th input:*/
81  TriaInput2* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
82  TriaInput2* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
83 
84  /*Plug into SealevelUGiaRate and SealevelNGiaRate inputs:*/
85  Input2* tria_input_copy_ngia=tria_input_ngia->copy();
86  Input2* tria_input_copy_ugia=tria_input_ugia->copy();
87  tria_input_copy_ngia->ChangeEnum(NGiaRateEnum);
88  tria_input_copy_ugia->ChangeEnum(UGiaRateEnum);
89  femmodel->inputs2->AddInput(tria_input_copy_ngia);
90  femmodel->inputs2->AddInput(tria_input_copy_ugia);
91  }
92 
93  /*End profiler*/
95 }
SaveResultsEnum
@ SaveResultsEnum
Definition: EnumDefinitions.h:302
FemModel::vertices
Vertices * vertices
Definition: FemModel.h:49
IssmDouble
double IssmDouble
Definition: types.h:37
DatasetInput2
Definition: DatasetInput2.h:14
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
FemModel::results
Results * results
Definition: FemModel.h:48
UGiaRateEnum
@ UGiaRateEnum
Definition: EnumDefinitions.h:594
GiaModelEnum
@ GiaModelEnum
Definition: EnumDefinitions.h:155
UGiaEnum
@ UGiaEnum
Definition: EnumDefinitions.h:593
Input2::ChangeEnum
void ChangeEnum(int newenumtype)
Definition: Input2.h:26
TriaInput2::copy
Input2 * copy()
Definition: TriaInput2.cpp:72
VertexSIdEnum
@ VertexSIdEnum
Definition: EnumDefinitions.h:1325
GiaAnalysisEnum
@ GiaAnalysisEnum
Definition: EnumDefinitions.h:1084
FemModel::nodes
Nodes * nodes
Definition: FemModel.h:56
InputUpdateFromVectorx
void InputUpdateFromVectorx(FemModel *femmodel, Vector< IssmDouble > *vector, int name, int type)
Definition: InputUpdateFromVectorx.cpp:9
TriaInput2
Definition: TriaInput2.h:8
NGiaRateEnum
@ NGiaRateEnum
Definition: EnumDefinitions.h:592
GsetEnum
@ GsetEnum
Definition: EnumDefinitions.h:1093
FemModel::inputs2
Inputs2 * inputs2
Definition: FemModel.h:47
GIACORE
#define GIACORE
Definition: Profiler.h:26
Profiler::Stop
void Stop(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:179
GiaMmeUgiaEnum
@ GiaMmeUgiaEnum
Definition: EnumDefinitions.h:546
GiaMmeNgiaEnum
@ GiaMmeNgiaEnum
Definition: EnumDefinitions.h:545
Vector::Assemble
void Assemble(void)
Definition: Vector.h:142
Input2
Definition: Input2.h:18
Profiler::Start
void Start(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:139
VerboseSolution
bool VerboseSolution(void)
Definition: Verbosity.cpp:24
FemModel::RequestedOutputsx
void RequestedOutputsx(Results **presults, char **requested_outputs, int numoutputs, bool save_results=true)
Definition: FemModel.cpp:2267
FemModel::SetCurrentConfiguration
void SetCurrentConfiguration(int configuration_type)
Definition: FemModel.cpp:634
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Inputs2::GetDatasetInput2
DatasetInput2 * GetDatasetInput2(int enum_type)
Definition: Inputs2.cpp:438
VertexCoordinatesx
void VertexCoordinatesx(IssmDouble **px, IssmDouble **py, IssmDouble **pz, Vertices *vertices, bool spherical)
Definition: VertexCoordinatesx.cpp:11
GiaModelidEnum
@ GiaModelidEnum
Definition: EnumDefinitions.h:156
Nodes::NumberOfDofs
int NumberOfDofs(int setenum)
Definition: Nodes.cpp:314
FemModel::profiler
Profiler * profiler
Definition: FemModel.h:42
Inputs2::AddInput
void AddInput(Input2 *in_input)
Definition: Inputs2.cpp:147
Vector< IssmDouble >
DatasetInput2::GetTriaInputByOffset
TriaInput2 * GetTriaInputByOffset(int i)
Definition: DatasetInput2.cpp:222
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16