 |
Ice Sheet System Model
4.18
Code documentation
|
Go to the documentation of this file.
2 #include "../toolkits/toolkits.h"
3 #include "../classes/classes.h"
4 #include "../shared/shared.h"
5 #include "../modules/modules.h"
27 element->
Update(inputs2,i,iomodel,analysis_counter,analysis_type,
P1Enum);
47 int M,m,lower_row,upper_row;
53 char** requestedoutputs = NULL;
57 int *transitions_M = NULL;
58 int *transitions_N = NULL;
70 iomodel->
FetchData(&planetradius,
"md.solidearth.planetradius");
71 planetarea=4*
PI*planetradius*planetradius;
75 iomodel->
FetchData(&love_h,&nl,NULL,
"md.solidearth.lovenumbers.h");
76 iomodel->
FetchData(&love_l,&nl,NULL,
"md.solidearth.lovenumbers.l");
79 iomodel->
FetchData(°acc,
"md.esa.degacc");
80 M=reCast<int,IssmDouble>(180./degacc+1.);
81 U_elastic=xNew<IssmDouble>(M);
82 H_elastic=xNew<IssmDouble>(M);
87 U_elastic_local=xNew<IssmDouble>(m);
88 H_elastic_local=xNew<IssmDouble>(m);
91 for(
int i=lower_row;i<upper_row;i++){
93 alpha= reCast<IssmDouble>(i)*degacc *
PI / 180.0;
95 U_elastic_local[i-lower_row]= (love_h[nl-1])/2.0/sin(
alpha/2.0);
96 H_elastic_local[i-lower_row]= 0;
106 for (
int n=0;n<nl;n++) {
109 deltalove_U = (love_h[n]-love_h[nl-1]);
121 Pn = ( (2*n-1)*cos(
alpha)*Pn1 - (n-1)*Pn2 ) /n;
122 Pn_p = ( (2*n-1)*(Pn1+cos(
alpha)*Pn_p1) - (n-1)*Pn_p2 ) /n;
125 Pn_p2=Pn_p1; Pn_p1=Pn_p;
127 U_elastic_local[i-lower_row] += deltalove_U*Pn;
128 H_elastic_local[i-lower_row] += sin(
alpha)*love_l[n]*Pn_p;
147 xDelete<int>(recvcounts);
148 xDelete<int>(displs);
153 U_elastic[0]=U_elastic[1];
155 H_elastic[0]=H_elastic[1];
159 xDelete<IssmDouble>(love_h);
160 xDelete<IssmDouble>(love_l);
161 xDelete<IssmDouble>(U_elastic);
162 xDelete<IssmDouble>(U_elastic_local);
163 xDelete<IssmDouble>(H_elastic);
164 xDelete<IssmDouble>(H_elastic_local);
167 iomodel->
FetchData(&transitions,&transitions_M,&transitions_N,&ntransitions,
"md.esa.transitions");
171 for(
int i=0;i<ntransitions;i++){
173 xDelete<IssmDouble>(transition);
175 xDelete<IssmDouble*>(transitions);
176 xDelete<int>(transitions_M);
177 xDelete<int>(transitions_N);
181 iomodel->
FindConstant(&requestedoutputs,&numoutputs,
"md.esa.requested_outputs");
183 iomodel->
DeleteData(&requestedoutputs,numoutputs,
"md.esa.requested_outputs");
199 _error_(
"not implemented yet");
202 _error_(
"not implemented yet");
205 _error_(
"not implemented yet");
208 _error_(
"Not implemented yet");
ElementVector * CreateDVector(Element *element)
void UpdateConstraints(FemModel *femmodel)
Declaration of Nodes class.
void Core(FemModel *femmodel)
void InputUpdateFromSolution(IssmDouble *solution, Element *element)
void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)
Declaration of Parameters class.
static ISSM_MPI_Comm GetComm(void)
Declaration of Constraints class.
ElementVector * CreatePVector(Element *element)
Declaration of Elements class.
void GetOwnershipBoundariesFromRange(int *plower_row, int *pupper_row, int range, ISSM_MPI_Comm comm)
void GradientJ(Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index)
@ SolidearthSettingsRigidEnum
@ SolidearthSettingsHorizEnum
void AddObject(Param *newparam)
void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)
void CreateConstraints(Constraints *constraints, IoModel *iomodel)
int DetermineLocalSize(int global_size, ISSM_MPI_Comm comm)
void DeleteData(int num,...)
@ SolidearthPlanetRadiusEnum
Param * CopyConstantObject(const char *constant_name, int param_enum)
void GetSolutionFromInputs(Vector< IssmDouble > *solution, Element *element)
IssmDouble alpha(IssmDouble x, IssmDouble y, IssmDouble z, int testid)
void FindConstant(bool *pvalue, const char *constant_name)
int DofsPerNode(int **doflist, int domaintype, int approximation)
@ SolidearthPlanetAreaEnum
void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)
ElementMatrix * CreateJacobianMatrix(Element *element)
void FetchData(bool *pboolean, const char *data_name)
int ISSM_MPI_Allgather(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcount, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm)
Declaration of Loads class.
#define _error_(StreamArgs)
@ SolidearthSettingsRotationEnum
Object * GetObjectByOffset(int offset)
virtual void Update(Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finite_element)=0
int ISSM_MPI_Allgatherv(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm)
ElementMatrix * CreateKMatrix(Element *element)
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
@ EsaRequestedOutputsEnum
@ SolidearthSettingsElasticEnum
: header file for generic external result object
void CreateLoads(Loads *loads, IoModel *iomodel)