Ice Sheet System Model  4.18
Code documentation
esa_core.cpp
Go to the documentation of this file.
1 
5 #include "./cores.h"
6 #include "../toolkits/toolkits.h"
7 #include "../classes/classes.h"
8 #include "../shared/shared.h"
9 #include "../modules/modules.h"
10 #include "../solutionsequences/solutionsequences.h"
11 
12 void esa_core(FemModel* femmodel){ /*{{{*/
13 
14  /*Start profiler*/
16 
17  Vector<IssmDouble> *U_radial = NULL;
18  Vector<IssmDouble> *U_north = NULL;
19  Vector<IssmDouble> *U_east = NULL;
20  Vector<IssmDouble> *U_x = NULL;
21  Vector<IssmDouble> *U_y = NULL;
22  bool save_results,isesa,iscoupler;
23  int domaintype;
24  int solution_type;
25  int numoutputs = 0;
26  char **requested_outputs = NULL;
27 
28  /*additional parameters: */
29  int gsize;
30  bool spherical=true;
31  IssmDouble *latitude = NULL;
32  IssmDouble *longitude = NULL;
33  IssmDouble *radius = NULL;
34  IssmDouble *xx = NULL;
35  IssmDouble *yy = NULL;
36  IssmDouble *zz = NULL;
37 
38  /*Recover some parameters: */
44 
45  /* recover coordinates of vertices: */
46  VertexCoordinatesx(&latitude,&longitude,&radius,femmodel->vertices,spherical);
47  VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices);
48 
49  /*Figure out size of g-set deflection vector and allocate solution vector: */
51 
52  /*several cases here, depending on value of iscoupler and isesa:
53  solution_type == EsaSolutionEnum) we are running elastic adjustment core (no coupler)
54  ( !iscoupler & !isesa) we are not interested in being here :)
55  ( !iscoupler & isesa) we are running in uncoupled mode
56  ( iscoupler & isesa) we are running in coupled mode, and better be earth
57  ( iscoupler & !isesa) we are running in coupled mode, and better be an ice cap
58  */
59 
61  isesa=1;
62  iscoupler=0;
63  }
64 
65  /*early return: */
66  if( !iscoupler & !isesa) return; //we are not interested in being here :)
67 
68  /*In what follows we assume we are all running esa, either in coupled, or uncoupled mode:*/
69  if(VerboseSolution()) _printf0_(" computing elastic adjustment\n");
70 
71  /*set configuration: */
73 
74  if(VerboseSolution()) _printf0_(" computing elastic geodetic core\n");
75  if(isesa){
76 
77  /*compute components of 3-D crustal motion: */
78  /*Initialize:*/
79  U_radial = new Vector<IssmDouble>(gsize);
80  U_north = new Vector<IssmDouble>(gsize);
81  U_east = new Vector<IssmDouble>(gsize);
82  U_x = new Vector<IssmDouble>(gsize);
83  U_y = new Vector<IssmDouble>(gsize);
84 
85  /*call the geodetic main modlule:*/
86  if(domaintype==Domain3DsurfaceEnum){
87  femmodel->EsaGeodetic3D(U_radial,U_north,U_east,latitude,longitude,radius,xx,yy,zz);
88  }
89  if(domaintype==Domain2DhorizontalEnum){
90  femmodel->EsaGeodetic2D(U_radial,U_north,U_east,U_x,U_y,xx,yy);
93  }
94 
95  /*get results into elements:*/
96  InputUpdateFromVectorx(femmodel,U_radial,EsaUmotionEnum,VertexSIdEnum); // radial displacement
99 
100  if(save_results){
101  if(VerboseSolution()) _printf0_(" saving results\n");
102  femmodel->parameters->FindParam(&requested_outputs,&numoutputs,EsaRequestedOutputsEnum);
103  femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
104  }
105 
107 
108  /*Free ressources:*/
109  delete U_radial;
110  delete U_north;
111  delete U_east;
112  delete U_x;
113  delete U_y;
114  if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
115  }
116 
117  /*End profiler*/
119 
120 }
121 /*}}}*/
SaveResultsEnum
@ SaveResultsEnum
Definition: EnumDefinitions.h:302
FemModel::vertices
Vertices * vertices
Definition: FemModel.h:49
IssmDouble
double IssmDouble
Definition: types.h:37
EsaNmotionEnum
@ EsaNmotionEnum
Definition: EnumDefinitions.h:561
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
cores.h
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
FemModel::results
Results * results
Definition: FemModel.h:48
EsaYmotionEnum
@ EsaYmotionEnum
Definition: EnumDefinitions.h:568
EsaAnalysisEnum
@ EsaAnalysisEnum
Definition: EnumDefinitions.h:1053
EsaUmotionEnum
@ EsaUmotionEnum
Definition: EnumDefinitions.h:566
FemModel::RequestedDependentsx
void RequestedDependentsx(void)
Definition: FemModel.cpp:2220
Domain2DhorizontalEnum
@ Domain2DhorizontalEnum
Definition: EnumDefinitions.h:534
VertexSIdEnum
@ VertexSIdEnum
Definition: EnumDefinitions.h:1325
DomainTypeEnum
@ DomainTypeEnum
Definition: EnumDefinitions.h:124
FemModel::nodes
Nodes * nodes
Definition: FemModel.h:56
InputUpdateFromVectorx
void InputUpdateFromVectorx(FemModel *femmodel, Vector< IssmDouble > *vector, int name, int type)
Definition: InputUpdateFromVectorx.cpp:9
GsetEnum
@ GsetEnum
Definition: EnumDefinitions.h:1093
Domain3DsurfaceEnum
@ Domain3DsurfaceEnum
Definition: EnumDefinitions.h:1039
SolutionTypeEnum
@ SolutionTypeEnum
Definition: EnumDefinitions.h:398
TransientIscouplerEnum
@ TransientIscouplerEnum
Definition: EnumDefinitions.h:443
Profiler::Stop
void Stop(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:179
esa_core
void esa_core(FemModel *femmodel)
Definition: esa_core.cpp:12
FemModel::solution_type
int solution_type
Definition: FemModel.h:40
FemModel
Definition: FemModel.h:31
EsaEmotionEnum
@ EsaEmotionEnum
Definition: EnumDefinitions.h:560
TransientIsesaEnum
@ TransientIsesaEnum
Definition: EnumDefinitions.h:445
EsaXmotionEnum
@ EsaXmotionEnum
Definition: EnumDefinitions.h:567
Profiler::Start
void Start(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:139
VerboseSolution
bool VerboseSolution(void)
Definition: Verbosity.cpp:24
EsaSolutionEnum
@ EsaSolutionEnum
Definition: EnumDefinitions.h:1054
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
EsaRequestedOutputsEnum
@ EsaRequestedOutputsEnum
Definition: EnumDefinitions.h:133
VertexCoordinatesx
void VertexCoordinatesx(IssmDouble **px, IssmDouble **py, IssmDouble **pz, Vertices *vertices, bool spherical)
Definition: VertexCoordinatesx.cpp:11
ESACORE
#define ESACORE
Definition: Profiler.h:27
Nodes::NumberOfDofs
int NumberOfDofs(int setenum)
Definition: Nodes.cpp:314
FemModel::profiler
Profiler * profiler
Definition: FemModel.h:42
Vector< IssmDouble >
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16