From 7bb99abcfcbaf1f16d8865a35543abbc636b8e38 Mon Sep 17 00:00:00 2001 From: AdhikariJPL Date: Tue, 1 Oct 2024 13:44:40 -0700 Subject: [PATCH] NEW: retrieving change in gravitational acceleration from ESA solver --- src/c/analyses/EsaAnalysis.cpp | 31 +++++++++--- src/c/classes/Elements/Element.h | 4 +- src/c/classes/Elements/Penta.h | 4 +- src/c/classes/Elements/Seg.h | 4 +- src/c/classes/Elements/Tetra.h | 4 +- src/c/classes/Elements/Tria.cpp | 43 +++++++++++----- src/c/classes/Elements/Tria.h | 4 +- src/c/classes/FemModel.cpp | 16 ++++-- src/c/classes/FemModel.h | 4 +- src/c/cores/esa_core.cpp | 8 ++- src/c/shared/Enum/Enum.vim | 22 +++++---- src/c/shared/Enum/EnumDefinitions.h | 2 + src/c/shared/Enum/EnumToStringx.cpp | 2 + src/c/shared/Enum/Enumjl.vim | 2 + src/c/shared/Enum/StringToEnumx.cpp | 76 +++++++++++++++-------------- src/c/shared/Enum/issmenums.jl | 6 +++ 16 files changed, 150 insertions(+), 82 deletions(-) diff --git a/src/c/analyses/EsaAnalysis.cpp b/src/c/analyses/EsaAnalysis.cpp index a7931230e..ec4d6687f 100644 --- a/src/c/analyses/EsaAnalysis.cpp +++ b/src/c/analyses/EsaAnalysis.cpp @@ -39,11 +39,14 @@ void EsaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s int nl; IssmDouble* love_h=NULL; IssmDouble* love_l=NULL; + IssmDouble* love_k=NULL; IssmDouble* U_elastic = NULL; IssmDouble* U_elastic_local = NULL; IssmDouble* H_elastic = NULL; IssmDouble* H_elastic_local = NULL; + IssmDouble* G_elastic = NULL; + IssmDouble* G_elastic_local = NULL; int M,m,lower_row,upper_row; IssmDouble degacc=.01; IssmDouble planetradius=0; @@ -74,26 +77,30 @@ void EsaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s /*love numbers: */ iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.lovenumbers.h"); iomodel->FetchData(&love_l,&nl,NULL,"md.solidearth.lovenumbers.l"); + iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.lovenumbers.k"); /*compute elastic green function for a range of angles*/ iomodel->FetchData(°acc,"md.esa.degacc"); M=reCast(180./degacc+1.); U_elastic=xNew(M); H_elastic=xNew(M); + G_elastic=xNew(M); /*compute combined legendre + love number (elastic green function:*/ m=DetermineLocalSize(M,IssmComm::GetComm()); GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm()); U_elastic_local=xNew(m); H_elastic_local=xNew(m); + G_elastic_local=xNew(m); - /*compute U_elastic_local and H_elastic_local {{{ */ + /*compute U_elastic_local, H_elastic_local, and G_elastic_local {{{ */ for(int i=lower_row;i(i)*degacc * PI / 180.0; - U_elastic_local[i-lower_row]= (love_h[nl-1])/2.0/sin(alpha/2.0); - H_elastic_local[i-lower_row]= 0; + U_elastic_local[i-lower_row]= 0.5*love_h[nl-1]/sin(alpha/2.0); + H_elastic_local[i-lower_row]= -love_l[nl-1]*(nl-1) * cos(alpha/2)*(1 + 2*sin(alpha/2)) / (2*sin(alpha/2)*(1 + sin(alpha/2))); + G_elastic_local[i-lower_row]= -(-0.25 + love_h[nl-1] - 0.5*love_k[nl-1]*(nl-1)) / sin(alpha/2.0); // negative sign is imposed to mean g_deformed_earth minus g_initial_undeformed_earth. Ferrell defined it as the difference in g between the undeformed initial Earth and deformed Earth. //IssmDouble Pn,Pn1,Pn2; //IssmDouble Pn_p,Pn_p1,Pn_p2; IssmDouble Pn = 0.; @@ -105,8 +112,12 @@ void EsaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s for (int n=0;n negative sign is imposed to mean g_deformed_earth minus g_initial_undeformed_earth. Ferrell defined it as the difference in g between the undeformed initial Earth and deformed Earth. + //IssmDouble Pn,Pn1,Pn2; } } /* }}} */ @@ -143,6 +156,7 @@ void EsaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s /*All gather:*/ ISSM_MPI_Allgatherv(U_elastic_local, m, ISSM_MPI_DOUBLE, U_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); ISSM_MPI_Allgatherv(H_elastic_local, m, ISSM_MPI_DOUBLE, H_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); + ISSM_MPI_Allgatherv(G_elastic_local, m, ISSM_MPI_DOUBLE, G_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); /*Free resources: */ xDelete(recvcounts); xDelete(displs); @@ -154,14 +168,19 @@ void EsaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s parameters->AddObject(new DoubleVecParam(EsaUElasticEnum,U_elastic,M)); H_elastic[0]=H_elastic[1]; parameters->AddObject(new DoubleVecParam(EsaHElasticEnum,H_elastic,M)); + G_elastic[0]=G_elastic[1]; + parameters->AddObject(new DoubleVecParam(EsaGElasticEnum,G_elastic,M)); /*Free resources: */ xDelete(love_h); xDelete(love_l); + xDelete(love_k); xDelete(U_elastic); xDelete(U_elastic_local); xDelete(H_elastic); xDelete(H_elastic_local); + xDelete(G_elastic); + xDelete(G_elastic_local); /*Transitions: */ iomodel->FetchData(&transitions,&transitions_M,&transitions_N,&ntransitions,"md.esa.transitions"); diff --git a/src/c/classes/Elements/Element.h b/src/c/classes/Elements/Element.h index f9030455d..3c6f26e4c 100644 --- a/src/c/classes/Elements/Element.h +++ b/src/c/classes/Elements/Element.h @@ -406,8 +406,8 @@ class Element: public Object{ virtual void WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");}; #ifdef _HAVE_ESA_ - virtual void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast, Vector* pX, Vector* pY,IssmDouble* xx,IssmDouble* yy)=0; - virtual void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz)=0; + virtual void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast, Vector* pGravity, Vector* pX, Vector* pY,IssmDouble* xx,IssmDouble* yy)=0; + virtual void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz)=0; #endif #ifdef _HAVE_SEALEVELCHANGE_ virtual IssmDouble GetArea3D(void)=0; diff --git a/src/c/classes/Elements/Penta.h b/src/c/classes/Elements/Penta.h index 5e8f01b43..0679ec6b7 100644 --- a/src/c/classes/Elements/Penta.h +++ b/src/c/classes/Elements/Penta.h @@ -223,8 +223,8 @@ class Penta: public Element,public ElementHook,public PentaRef{ #endif #ifdef _HAVE_ESA_ - void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; - void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; + void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; + void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; #endif #ifdef _HAVE_SEALEVELCHANGE_ void GiaDeflection(Vector* wg,Vector* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y){_error_("not implemented yet");}; diff --git a/src/c/classes/Elements/Seg.h b/src/c/classes/Elements/Seg.h index 840c0217d..5d14f99b2 100644 --- a/src/c/classes/Elements/Seg.h +++ b/src/c/classes/Elements/Seg.h @@ -174,8 +174,8 @@ class Seg: public Element,public ElementHook,public SegRef{ IssmDouble GetTriangleAreaSpherical(IssmDouble xyz_list[3][3]){_error_("not implemented yet");}; #ifdef _HAVE_ESA_ - void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; - void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; + void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; + void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; #endif #ifdef _HAVE_SEALEVELCHANGE_ void GiaDeflection(Vector* wg,Vector* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y){_error_("not implemented yet");}; diff --git a/src/c/classes/Elements/Tetra.h b/src/c/classes/Elements/Tetra.h index bf014d448..a4e67f3fa 100644 --- a/src/c/classes/Elements/Tetra.h +++ b/src/c/classes/Elements/Tetra.h @@ -181,8 +181,8 @@ class Tetra: public Element,public ElementHook,public TetraRef{ void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input); #ifdef _HAVE_ESA_ - void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; - void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; + void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; + void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; #endif #ifdef _HAVE_SEALEVELCHANGE_ void GiaDeflection(Vector* wg,Vector* dwgdt, Matlitho* litho, IssmDouble* x,IssmDouble* y){_error_("not implemented yet");}; diff --git a/src/c/classes/Elements/Tria.cpp b/src/c/classes/Elements/Tria.cpp index e79d0d3f9..d2d7b8d96 100644 --- a/src/c/classes/Elements/Tria.cpp +++ b/src/c/classes/Elements/Tria.cpp @@ -6356,19 +6356,21 @@ void Tria::WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmD /*}}}*/ #ifdef _HAVE_ESA_ -void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){ /*{{{*/ +void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy){ /*{{{*/ /*diverse:*/ int gsize; IssmDouble xyz_list[NUMVERTICES][3]; IssmDouble area; IssmDouble earth_radius = 6371012.0; // Earth's radius [m] + IssmDouble g_earth = 9.81; // Gravitational acceleration on Earth's surface [m/s2] IssmDouble I; //ice/water loading IssmDouble rho_ice, rho_earth; /*precomputed elastic green functions:*/ IssmDouble* U_elastic_precomputed = NULL; IssmDouble* H_elastic_precomputed = NULL; + IssmDouble* G_elastic_precomputed = NULL; int M, hemi; /*computation of Green functions:*/ @@ -6377,6 +6379,7 @@ void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,V IssmDouble* E_elastic= NULL; IssmDouble* X_elastic= NULL; IssmDouble* Y_elastic= NULL; + IssmDouble* G_elastic= NULL; /*optimization:*/ bool store_green_functions=false; @@ -6411,8 +6414,10 @@ void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,V /*recover elastic Green's functions for displacement:*/ DoubleVecParam* U_parameter = static_cast(this->parameters->FindParamObject(EsaUElasticEnum)); _assert_(U_parameter); DoubleVecParam* H_parameter = static_cast(this->parameters->FindParamObject(EsaHElasticEnum)); _assert_(H_parameter); + DoubleVecParam* G_parameter = static_cast(this->parameters->FindParamObject(EsaGElasticEnum)); _assert_(G_parameter); U_parameter->GetParameterValueByPointer(&U_elastic_precomputed,&M); H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M); + G_parameter->GetParameterValueByPointer(&G_elastic_precomputed,&M); /*initialize: */ U_elastic=xNewZeroInit(gsize); @@ -6420,11 +6425,13 @@ void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,V E_elastic=xNewZeroInit(gsize); X_elastic=xNewZeroInit(gsize); Y_elastic=xNewZeroInit(gsize); + G_elastic=xNewZeroInit(gsize); int* indices=xNew(gsize); IssmDouble* U_values=xNewZeroInit(gsize); IssmDouble* N_values=xNewZeroInit(gsize); IssmDouble* E_values=xNewZeroInit(gsize); + IssmDouble* G_values=xNewZeroInit(gsize); IssmDouble* X_values=xNewZeroInit(gsize); IssmDouble* Y_values=xNewZeroInit(gsize); IssmDouble dx, dy, dist, alpha, ang, ang2; @@ -6444,19 +6451,21 @@ void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,V /*Compute azimuths, both north and east components: */ ang = M_PI/2 - atan2(dy,dx); // this is bearing angle! - Y_azim = cos(ang); - X_azim = sin(ang); + Y_azim = -cos(ang); + X_azim = -sin(ang); /*Elastic component (from Eq 17 in Adhikari et al, GMD 2015): */ int index=reCast(alpha/M_PI*(M-1)); U_elastic[i] += U_elastic_precomputed[index]; Y_elastic[i] += H_elastic_precomputed[index]*Y_azim; X_elastic[i] += H_elastic_precomputed[index]*X_azim; + G_elastic[i] += G_elastic_precomputed[index]; /*Add all components to the pUp solution vectors:*/ U_values[i]+=3*rho_ice/rho_earth*area/(4*M_PI*pow(earth_radius,2))*I*U_elastic[i]; Y_values[i]+=3*rho_ice/rho_earth*area/(4*M_PI*pow(earth_radius,2))*I*Y_elastic[i]; X_values[i]+=3*rho_ice/rho_earth*area/(4*M_PI*pow(earth_radius,2))*I*X_elastic[i]; + G_values[i]+=3*rho_ice/rho_earth*area/(4*M_PI*pow(earth_radius,2))*I*G_elastic[i]*g_earth/earth_radius; /*North-south, East-west components */ if (hemi == -1) { @@ -6478,20 +6487,21 @@ void Tria::EsaGeodetic2D(Vector* pUp,Vector* pNorth,V pUp->SetValues(gsize,indices,U_values,ADD_VAL); pNorth->SetValues(gsize,indices,N_values,ADD_VAL); pEast->SetValues(gsize,indices,E_values,ADD_VAL); + pGravity->SetValues(gsize,indices,G_values,ADD_VAL); pX->SetValues(gsize,indices,X_values,ADD_VAL); pY->SetValues(gsize,indices,Y_values,ADD_VAL); /*Free resources:*/ xDelete(indices); - xDelete(U_values); xDelete(N_values); xDelete(E_values); - xDelete(U_elastic); xDelete(N_elastic); xDelete(E_elastic); + xDelete(U_values); xDelete(N_values); xDelete(E_values); xDelete(G_values); + xDelete(U_elastic); xDelete(N_elastic); xDelete(E_elastic); xDelete(G_elastic); xDelete(X_values); xDelete(Y_values); xDelete(X_elastic); xDelete(Y_elastic); return; } /*}}}*/ -void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){ /*{{{*/ +void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){ /*{{{*/ /*diverse:*/ int gsize; @@ -6499,6 +6509,8 @@ void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,V IssmDouble llr_list[NUMVERTICES][3]; IssmDouble xyz_list[NUMVERTICES][3]; IssmDouble area,planetarea; + IssmDouble earth_radius = 6371012.0; // Earth's radius [m] + IssmDouble g_earth = 9.81; // Gravitational acceleration on Earth's surface [m/s2] IssmDouble I; //ice/water loading IssmDouble late,longe,re; IssmDouble lati,longi,ri; @@ -6509,12 +6521,14 @@ void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,V /*precomputed elastic green functions:*/ IssmDouble* U_elastic_precomputed = NULL; IssmDouble* H_elastic_precomputed = NULL; + IssmDouble* G_elastic_precomputed = NULL; int M; /*computation of Green functions:*/ IssmDouble* U_elastic= NULL; IssmDouble* N_elastic= NULL; IssmDouble* E_elastic= NULL; + IssmDouble* G_elastic= NULL; /*optimization:*/ bool store_green_functions=false; @@ -6531,7 +6545,7 @@ void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,V rho_ice=FindParam(MaterialsRhoIceEnum); rho_earth=FindParam(MaterialsEarthDensityEnum); - /*recover earth area: */ + /*recover earth area and radius: */ this->parameters->FindParam(&planetarea,SolidearthPlanetAreaEnum); /*how many dofs are we working with here? */ @@ -6589,18 +6603,22 @@ void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,V /*recover elastic Green's functions for displacement:*/ DoubleVecParam* U_parameter = static_cast(this->parameters->FindParamObject(EsaUElasticEnum)); _assert_(U_parameter); DoubleVecParam* H_parameter = static_cast(this->parameters->FindParamObject(EsaHElasticEnum)); _assert_(H_parameter); + DoubleVecParam* G_parameter = static_cast(this->parameters->FindParamObject(EsaGElasticEnum)); _assert_(G_parameter); U_parameter->GetParameterValueByPointer(&U_elastic_precomputed,&M); H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M); + G_parameter->GetParameterValueByPointer(&G_elastic_precomputed,&M); /*initialize: */ U_elastic=xNewZeroInit(gsize); N_elastic=xNewZeroInit(gsize); E_elastic=xNewZeroInit(gsize); + G_elastic=xNewZeroInit(gsize); int* indices=xNew(gsize); IssmDouble* U_values=xNewZeroInit(gsize); IssmDouble* N_values=xNewZeroInit(gsize); IssmDouble* E_values=xNewZeroInit(gsize); + IssmDouble* G_values=xNewZeroInit(gsize); IssmDouble alpha; IssmDouble delPhi,delLambda; IssmDouble dx, dy, dz, x, y, z; @@ -6625,28 +6643,31 @@ void Tria::EsaGeodetic3D(Vector* pUp,Vector* pNorth,V x=1e-12; y=1e-12; } dx = x_element-x; dy = y_element-y; dz = z_element-z; - N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); - E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); + N_azim = -(-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); + E_azim = -(-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); /*Elastic component (from Eq 17 in Adhikari et al, GMD 2015): */ int index=reCast(alpha/M_PI*(M-1)); U_elastic[i] += U_elastic_precomputed[index]; N_elastic[i] += H_elastic_precomputed[index]*N_azim; E_elastic[i] += H_elastic_precomputed[index]*E_azim; + G_elastic[i] += G_elastic_precomputed[index]; /*Add all components to the pUp solution vectors:*/ U_values[i]+=3*rho_ice/rho_earth*area/planetarea*I*U_elastic[i]; N_values[i]+=3*rho_ice/rho_earth*area/planetarea*I*N_elastic[i]; E_values[i]+=3*rho_ice/rho_earth*area/planetarea*I*E_elastic[i]; + G_values[i]+=3*rho_ice/rho_earth*area/planetarea*I*G_elastic[i]*g_earth/earth_radius; } pUp->SetValues(gsize,indices,U_values,ADD_VAL); pNorth->SetValues(gsize,indices,N_values,ADD_VAL); pEast->SetValues(gsize,indices,E_values,ADD_VAL); + pGravity->SetValues(gsize,indices,G_values,ADD_VAL); /*Free resources:*/ xDelete(indices); - xDelete(U_values); xDelete(N_values); xDelete(E_values); - xDelete(U_elastic); xDelete(N_elastic); xDelete(E_elastic); + xDelete(U_values); xDelete(N_values); xDelete(E_values); xDelete(G_values); + xDelete(U_elastic); xDelete(N_elastic); xDelete(E_elastic); xDelete(G_elastic); return; } diff --git a/src/c/classes/Elements/Tria.h b/src/c/classes/Elements/Tria.h index 089073f20..307aa3d50 100644 --- a/src/c/classes/Elements/Tria.h +++ b/src/c/classes/Elements/Tria.h @@ -170,8 +170,8 @@ class Tria: public Element,public ElementHook,public TriaRef{ void WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue); #ifdef _HAVE_ESA_ - void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast, Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy); - void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz); + void EsaGeodetic2D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,Vector* pX,Vector* pY,IssmDouble* xx,IssmDouble* yy); + void EsaGeodetic3D(Vector* pUp,Vector* pNorth,Vector* pEast,Vector* pGravity,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz); #endif #ifdef _HAVE_SEALEVELCHANGE_ void GiaDeflection(Vector* wg,Vector* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y); diff --git a/src/c/classes/FemModel.cpp b/src/c/classes/FemModel.cpp index 81d6aba32..2e3d4dc9e 100644 --- a/src/c/classes/FemModel.cpp +++ b/src/c/classes/FemModel.cpp @@ -4749,7 +4749,7 @@ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors /*}}}*/ #endif #ifdef _HAVE_ESA_ -void FemModel::EsaGeodetic2D(Vector* pUp, Vector* pNorth, Vector* pEast, Vector* pX, Vector* pY, IssmDouble* xx, IssmDouble* yy){/*{{{*/ +void FemModel::EsaGeodetic2D(Vector* pUp, Vector* pNorth, Vector* pEast, Vector* pGravity, Vector* pX, Vector* pY, IssmDouble* xx, IssmDouble* yy){/*{{{*/ int ns,nsmax; @@ -4764,12 +4764,13 @@ void FemModel::EsaGeodetic2D(Vector* pUp, Vector* pNorth for(int i=0;i(elements->GetObjectByOffset(i)); - element->EsaGeodetic2D(pUp,pNorth,pEast,pX,pY,xx,yy); + element->EsaGeodetic2D(pUp,pNorth,pEast,pGravity,pX,pY,xx,yy); } if(i%100==0){ pUp->Assemble(); pNorth->Assemble(); pEast->Assemble(); + pGravity->Assemble(); pX->Assemble(); pY->Assemble(); } @@ -4779,6 +4780,7 @@ void FemModel::EsaGeodetic2D(Vector* pUp, Vector* pNorth pUp->Assemble(); pNorth->Assemble(); pEast->Assemble(); + pGravity->Assemble(); pX->Assemble(); pY->Assemble(); @@ -4787,7 +4789,7 @@ void FemModel::EsaGeodetic2D(Vector* pUp, Vector* pNorth xDelete(yy); } /*}}}*/ -void FemModel::EsaGeodetic3D(Vector* pUp, Vector* pNorth, Vector* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/ +void FemModel::EsaGeodetic3D(Vector* pUp, Vector* pNorth, Vector* pEast, Vector* pGravity, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/ int ns,nsmax; @@ -4802,12 +4804,13 @@ void FemModel::EsaGeodetic3D(Vector* pUp, Vector* pNorth for(int i=0;i(elements->GetObjectByOffset(i)); - element->EsaGeodetic3D(pUp,pNorth,pEast,latitude,longitude,radius,xx,yy,zz); + element->EsaGeodetic3D(pUp,pNorth,pEast,pGravity,latitude,longitude,radius,xx,yy,zz); } if(i%100==0){ pUp->Assemble(); pNorth->Assemble(); pEast->Assemble(); + pGravity->Assemble(); } } @@ -4815,6 +4818,7 @@ void FemModel::EsaGeodetic3D(Vector* pUp, Vector* pNorth pUp->Assemble(); pNorth->Assemble(); pEast->Assemble(); + pGravity->Assemble(); /*Free resources:*/ xDelete(latitude); @@ -4825,6 +4829,10 @@ void FemModel::EsaGeodetic3D(Vector* pUp, Vector* pNorth xDelete(zz); } /*}}}*/ + + + + #endif void FemModel::HydrologyEPLupdateDomainx(IssmDouble* pEplcount){ /*{{{*/ diff --git a/src/c/classes/FemModel.h b/src/c/classes/FemModel.h index 4085d040a..937e1eb3a 100644 --- a/src/c/classes/FemModel.h +++ b/src/c/classes/FemModel.h @@ -161,8 +161,8 @@ class FemModel { void ThicknessAbsGradientx( IssmDouble* pJ); void ThicknessPositivex(IssmDouble* pJ); #ifdef _HAVE_ESA_ - void EsaGeodetic2D(Vector* pUp, Vector* pNorth, Vector* pEast, Vector* pX, Vector* pY, IssmDouble* xx, IssmDouble* yy); - void EsaGeodetic3D(Vector* pUp, Vector* pNorth, Vector* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); + void EsaGeodetic2D(Vector* pUp, Vector* pNorth, Vector* pEast, Vector* pGravity, Vector* pX, Vector* pY, IssmDouble* xx, IssmDouble* yy); + void EsaGeodetic3D(Vector* pUp, Vector* pNorth, Vector* pEast, Vector* pGravity, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); #endif void HydrologyEPLupdateDomainx(IssmDouble* pEplcount); void HydrologyIDSupdateDomainx(IssmDouble* pIDScount); diff --git a/src/c/cores/esa_core.cpp b/src/c/cores/esa_core.cpp index d28e3ebb1..fc2e358d1 100644 --- a/src/c/cores/esa_core.cpp +++ b/src/c/cores/esa_core.cpp @@ -17,6 +17,7 @@ void esa_core(FemModel* femmodel){ /*{{{*/ Vector *U_radial = NULL; Vector *U_north = NULL; Vector *U_east = NULL; + Vector *Gravity = NULL; Vector *U_x = NULL; Vector *U_y = NULL; bool save_results,isesa; @@ -80,15 +81,16 @@ void esa_core(FemModel* femmodel){ /*{{{*/ U_radial = new Vector(gsize); U_north = new Vector(gsize); U_east = new Vector(gsize); + Gravity = new Vector(gsize); U_x = new Vector(gsize); U_y = new Vector(gsize); /*call the geodetic main modlule:*/ if(domaintype==Domain3DsurfaceEnum){ - femmodel->EsaGeodetic3D(U_radial,U_north,U_east,latitude,longitude,radius,xx,yy,zz); + femmodel->EsaGeodetic3D(U_radial,U_north,U_east,Gravity,latitude,longitude,radius,xx,yy,zz); } if(domaintype==Domain2DhorizontalEnum){ - femmodel->EsaGeodetic2D(U_radial,U_north,U_east,U_x,U_y,xx,yy); + femmodel->EsaGeodetic2D(U_radial,U_north,U_east,Gravity,U_x,U_y,xx,yy); InputUpdateFromVectorx(femmodel,U_x,EsaXmotionEnum,VertexSIdEnum); InputUpdateFromVectorx(femmodel,U_y,EsaYmotionEnum,VertexSIdEnum); } @@ -97,6 +99,7 @@ void esa_core(FemModel* femmodel){ /*{{{*/ InputUpdateFromVectorx(femmodel,U_radial,EsaUmotionEnum,VertexSIdEnum); // radial displacement InputUpdateFromVectorx(femmodel,U_north,EsaNmotionEnum,VertexSIdEnum); // north motion InputUpdateFromVectorx(femmodel,U_east,EsaEmotionEnum,VertexSIdEnum); // east motion + InputUpdateFromVectorx(femmodel,Gravity,EsaGravitationalAccelerationEnum,VertexSIdEnum); // gravitational acceleration if(save_results){ femmodel->parameters->FindParam(&requested_outputs,&numoutputs,EsaRequestedOutputsEnum); @@ -109,6 +112,7 @@ void esa_core(FemModel* femmodel){ /*{{{*/ delete U_radial; delete U_north; delete U_east; + delete Gravity; delete U_x; delete U_y; if(numoutputs){for(int i=0;i(requested_outputs[i]);} xDelete(requested_outputs);} diff --git a/src/c/shared/Enum/Enum.vim b/src/c/shared/Enum/Enum.vim index 6a08db48d..681ec11d9 100644 --- a/src/c/shared/Enum/Enum.vim +++ b/src/c/shared/Enum/Enum.vim @@ -193,6 +193,7 @@ syn keyword cConstant EarthIdEnum syn keyword cConstant ElasticEnum syn keyword cConstant EplZigZagCounterEnum syn keyword cConstant EsaHElasticEnum +syn keyword cConstant EsaGElasticEnum syn keyword cConstant EsaHemisphereEnum syn keyword cConstant EsaRequestedOutputsEnum syn keyword cConstant EsaUElasticEnum @@ -851,6 +852,7 @@ syn keyword cConstant EsaStrainrateyyEnum syn keyword cConstant EsaUmotionEnum syn keyword cConstant EsaXmotionEnum syn keyword cConstant EsaYmotionEnum +syn keyword cConstant EsaGravitationalAccelerationEnum syn keyword cConstant EtaDiffEnum syn keyword cConstant FlowequationBorderFSEnum syn keyword cConstant FrictionAlpha2Enum @@ -1838,7 +1840,6 @@ syn keyword cType Cfsurfacelogvel syn keyword cType Cfsurfacesquare syn keyword cType Cfsurfacesquaretransient syn keyword cType Channel -syn keyword cType classes syn keyword cType Constraint syn keyword cType Constraints syn keyword cType Contour @@ -1846,8 +1847,8 @@ syn keyword cType Contours syn keyword cType ControlInput syn keyword cType ControlParam syn keyword cType Covertree -syn keyword cType DatasetInput syn keyword cType DataSetParam +syn keyword cType DatasetInput syn keyword cType Definition syn keyword cType DependentObject syn keyword cType DoubleInput @@ -1860,20 +1861,19 @@ syn keyword cType Element syn keyword cType ElementHook syn keyword cType ElementInput syn keyword cType ElementMatrix -syn keyword cType Elements syn keyword cType ElementVector +syn keyword cType Elements syn keyword cType ExponentialVariogram syn keyword cType ExternalResult syn keyword cType FemModel syn keyword cType FileParam syn keyword cType Friction syn keyword cType Gauss -syn keyword cType GaussianVariogram -syn keyword cType gaussobjects syn keyword cType GaussPenta syn keyword cType GaussSeg syn keyword cType GaussTetra syn keyword cType GaussTria +syn keyword cType GaussianVariogram syn keyword cType GenericExternalResult syn keyword cType GenericOption syn keyword cType GenericParam @@ -1890,7 +1890,6 @@ syn keyword cType IntVecParam syn keyword cType IoModel syn keyword cType IssmDirectApplicInterface syn keyword cType IssmParallelDirectApplicInterface -syn keyword cType krigingobjects syn keyword cType Load syn keyword cType Loads syn keyword cType Masscon @@ -1901,7 +1900,6 @@ syn keyword cType Materials syn keyword cType Matestar syn keyword cType Matice syn keyword cType Matlitho -syn keyword cType matrixobjects syn keyword cType MatrixParam syn keyword cType Misfit syn keyword cType Moulin @@ -1914,8 +1912,8 @@ syn keyword cType Numericalflux syn keyword cType Observation syn keyword cType Observations syn keyword cType Option -syn keyword cType Options syn keyword cType OptionUtilities +syn keyword cType Options syn keyword cType Param syn keyword cType Parameters syn keyword cType Pengrid @@ -1929,13 +1927,13 @@ syn keyword cType Quadtree syn keyword cType Radar syn keyword cType Regionaloutput syn keyword cType Results -syn keyword cType Riftfront syn keyword cType RiftStruct +syn keyword cType Riftfront syn keyword cType SealevelGeometry syn keyword cType Seg syn keyword cType SegInput -syn keyword cType Segment syn keyword cType SegRef +syn keyword cType Segment syn keyword cType SpcDynamic syn keyword cType SpcStatic syn keyword cType SpcTransient @@ -1954,6 +1952,10 @@ syn keyword cType Variogram syn keyword cType VectorParam syn keyword cType Vertex syn keyword cType Vertices +syn keyword cType classes +syn keyword cType gaussobjects +syn keyword cType krigingobjects +syn keyword cType matrixobjects syn keyword cType AdjointBalancethickness2Analysis syn keyword cType AdjointBalancethicknessAnalysis syn keyword cType AdjointHorizAnalysis diff --git a/src/c/shared/Enum/EnumDefinitions.h b/src/c/shared/Enum/EnumDefinitions.h index 32aa82046..5a92ac019 100644 --- a/src/c/shared/Enum/EnumDefinitions.h +++ b/src/c/shared/Enum/EnumDefinitions.h @@ -187,6 +187,7 @@ enum definitions{ ElasticEnum, EplZigZagCounterEnum, EsaHElasticEnum, + EsaGElasticEnum, EsaHemisphereEnum, EsaRequestedOutputsEnum, EsaUElasticEnum, @@ -847,6 +848,7 @@ enum definitions{ EsaUmotionEnum, EsaXmotionEnum, EsaYmotionEnum, + EsaGravitationalAccelerationEnum, EtaDiffEnum, FlowequationBorderFSEnum, FrictionAlpha2Enum, diff --git a/src/c/shared/Enum/EnumToStringx.cpp b/src/c/shared/Enum/EnumToStringx.cpp index 9a92ca31f..cbaca6338 100644 --- a/src/c/shared/Enum/EnumToStringx.cpp +++ b/src/c/shared/Enum/EnumToStringx.cpp @@ -195,6 +195,7 @@ const char* EnumToStringx(int en){ case ElasticEnum : return "Elastic"; case EplZigZagCounterEnum : return "EplZigZagCounter"; case EsaHElasticEnum : return "EsaHElastic"; + case EsaGElasticEnum : return "EsaGElastic"; case EsaHemisphereEnum : return "EsaHemisphere"; case EsaRequestedOutputsEnum : return "EsaRequestedOutputs"; case EsaUElasticEnum : return "EsaUElastic"; @@ -853,6 +854,7 @@ const char* EnumToStringx(int en){ case EsaUmotionEnum : return "EsaUmotion"; case EsaXmotionEnum : return "EsaXmotion"; case EsaYmotionEnum : return "EsaYmotion"; + case EsaGravitationalAccelerationEnum : return "EsaGravitationalAcceleration"; case EtaDiffEnum : return "EtaDiff"; case FlowequationBorderFSEnum : return "FlowequationBorderFS"; case FrictionAlpha2Enum : return "FrictionAlpha2"; diff --git a/src/c/shared/Enum/Enumjl.vim b/src/c/shared/Enum/Enumjl.vim index 112cf52ba..462e96f19 100644 --- a/src/c/shared/Enum/Enumjl.vim +++ b/src/c/shared/Enum/Enumjl.vim @@ -186,6 +186,7 @@ syn keyword juliaConstC EarthIdEnum syn keyword juliaConstC ElasticEnum syn keyword juliaConstC EplZigZagCounterEnum syn keyword juliaConstC EsaHElasticEnum +syn keyword juliaConstC EsaGElasticEnum syn keyword juliaConstC EsaHemisphereEnum syn keyword juliaConstC EsaRequestedOutputsEnum syn keyword juliaConstC EsaUElasticEnum @@ -844,6 +845,7 @@ syn keyword juliaConstC EsaStrainrateyyEnum syn keyword juliaConstC EsaUmotionEnum syn keyword juliaConstC EsaXmotionEnum syn keyword juliaConstC EsaYmotionEnum +syn keyword juliaConstC EsaGravitationalAccelerationEnum syn keyword juliaConstC EtaDiffEnum syn keyword juliaConstC FlowequationBorderFSEnum syn keyword juliaConstC FrictionAlpha2Enum diff --git a/src/c/shared/Enum/StringToEnumx.cpp b/src/c/shared/Enum/StringToEnumx.cpp index 434a10b68..f0b5dd90c 100644 --- a/src/c/shared/Enum/StringToEnumx.cpp +++ b/src/c/shared/Enum/StringToEnumx.cpp @@ -198,6 +198,7 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Elastic")==0) return ElasticEnum; else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum; else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum; + else if (strcmp(name,"EsaGElastic")==0) return EsaGElasticEnum; else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum; else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum; else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum; @@ -258,11 +259,11 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum; else if (strcmp(name,"GroundinglineNumRequestedOutputs")==0) return GroundinglineNumRequestedOutputsEnum; else if (strcmp(name,"GroundinglineRequestedOutputs")==0) return GroundinglineRequestedOutputsEnum; - else if (strcmp(name,"HydrologyarmaarOrder")==0) return HydrologyarmaarOrderEnum; else stage=3; } if(stage==3){ - if (strcmp(name,"Hydrologyarmaarlagcoefs")==0) return HydrologyarmaarlagcoefsEnum; + if (strcmp(name,"HydrologyarmaarOrder")==0) return HydrologyarmaarOrderEnum; + else if (strcmp(name,"Hydrologyarmaarlagcoefs")==0) return HydrologyarmaarlagcoefsEnum; else if (strcmp(name,"Hydrologyarmadatebreaks")==0) return HydrologyarmadatebreaksEnum; else if (strcmp(name,"Hydrologyarmamalagcoefs")==0) return HydrologyarmamalagcoefsEnum; else if (strcmp(name,"HydrologyarmamaOrder")==0) return HydrologyarmamaOrderEnum; @@ -381,11 +382,11 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"LoveR0")==0) return LoveR0Enum; else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum; else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum; - else if (strcmp(name,"LoveStartingLayer")==0) return LoveStartingLayerEnum; else stage=4; } if(stage==4){ - if (strcmp(name,"LoveUnderflowTol")==0) return LoveUnderflowTolEnum; + if (strcmp(name,"LoveStartingLayer")==0) return LoveStartingLayerEnum; + else if (strcmp(name,"LoveUnderflowTol")==0) return LoveUnderflowTolEnum; else if (strcmp(name,"LovePostWidderThreshold")==0) return LovePostWidderThresholdEnum; else if (strcmp(name,"LoveDebug")==0) return LoveDebugEnum; else if (strcmp(name,"LoveHypergeomNZ")==0) return LoveHypergeomNZEnum; @@ -504,11 +505,11 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"LoveHypergeomTable1")==0) return LoveHypergeomTable1Enum; else if (strcmp(name,"LoveHypergeomTable2")==0) return LoveHypergeomTable2Enum; else if (strcmp(name,"SealevelchangeGSelfAttraction")==0) return SealevelchangeGSelfAttractionEnum; - else if (strcmp(name,"SealevelchangeGViscoElastic")==0) return SealevelchangeGViscoElasticEnum; else stage=5; } if(stage==5){ - if (strcmp(name,"SealevelchangeUViscoElastic")==0) return SealevelchangeUViscoElasticEnum; + if (strcmp(name,"SealevelchangeGViscoElastic")==0) return SealevelchangeGViscoElasticEnum; + else if (strcmp(name,"SealevelchangeUViscoElastic")==0) return SealevelchangeUViscoElasticEnum; else if (strcmp(name,"SealevelchangeHViscoElastic")==0) return SealevelchangeHViscoElasticEnum; else if (strcmp(name,"SealevelchangePolarMotionTransferFunctionColinear")==0) return SealevelchangePolarMotionTransferFunctionColinearEnum; else if (strcmp(name,"SealevelchangePolarMotionTransferFunctionOrthogonal")==0) return SealevelchangePolarMotionTransferFunctionOrthogonalEnum; @@ -627,11 +628,11 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum; else if (strcmp(name,"SmbSemicMethod")==0) return SmbSemicMethodEnum; else if (strcmp(name,"SmbSemicHcrit")==0) return SmbSemicHcritEnum; - else if (strcmp(name,"SmbSemicRcrit")==0) return SmbSemicRcritEnum; else stage=6; } if(stage==6){ - if (strcmp(name,"SmbSemicWcrit")==0) return SmbSemicWcritEnum; + if (strcmp(name,"SmbSemicRcrit")==0) return SmbSemicRcritEnum; + else if (strcmp(name,"SmbSemicWcrit")==0) return SmbSemicWcritEnum; else if (strcmp(name,"SmbSemicMcrit")==0) return SmbSemicMcritEnum; else if (strcmp(name,"SmbSemicAfac")==0) return SmbSemicAfacEnum; else if (strcmp(name,"SmbSemicTauA")==0) return SmbSemicTauAEnum; @@ -750,11 +751,11 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum; else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum; else if (strcmp(name,"BasalforcingsDeepwaterMeltingRatearma")==0) return BasalforcingsDeepwaterMeltingRatearmaEnum; - else if (strcmp(name,"BasalforcingsDeepwaterMeltingRateNoise")==0) return BasalforcingsDeepwaterMeltingRateNoiseEnum; else stage=7; } if(stage==7){ - if (strcmp(name,"BasalforcingsDeepwaterMeltingRateValuesAutoregression")==0) return BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum; + if (strcmp(name,"BasalforcingsDeepwaterMeltingRateNoise")==0) return BasalforcingsDeepwaterMeltingRateNoiseEnum; + else if (strcmp(name,"BasalforcingsDeepwaterMeltingRateValuesAutoregression")==0) return BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum; else if (strcmp(name,"BasalforcingsDeepwaterMeltingRateValuesMovingaverage")==0) return BasalforcingsDeepwaterMeltingRateValuesMovingaverageEnum; else if (strcmp(name,"BasalforcingsFloatingiceMeltingRate")==0) return BasalforcingsFloatingiceMeltingRateEnum; else if (strcmp(name,"BasalforcingsFloatingiceMeltingRateObs")==0) return BasalforcingsFloatingiceMeltingRateObsEnum; @@ -871,13 +872,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum; else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum; else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum; + else if (strcmp(name,"EsaGravitationalAcceleration")==0) return EsaGravitationalAccelerationEnum; else if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum; - else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum; - else if (strcmp(name,"FrictionAlpha2")==0) return FrictionAlpha2Enum; else stage=8; } if(stage==8){ - if (strcmp(name,"FrictionAs")==0) return FrictionAsEnum; + if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum; + else if (strcmp(name,"FrictionAlpha2")==0) return FrictionAlpha2Enum; + else if (strcmp(name,"FrictionAs")==0) return FrictionAsEnum; else if (strcmp(name,"FrictionC")==0) return FrictionCEnum; else if (strcmp(name,"FrictionCmax")==0) return FrictionCmaxEnum; else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum; @@ -995,12 +997,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"P0")==0) return P0Enum; else if (strcmp(name,"P1")==0) return P1Enum; else if (strcmp(name,"Partitioning")==0) return PartitioningEnum; - else if (strcmp(name,"Pressure")==0) return PressureEnum; - else if (strcmp(name,"Radar")==0) return RadarEnum; else stage=9; } if(stage==9){ - if (strcmp(name,"RadarAttenuationMacGregor")==0) return RadarAttenuationMacGregorEnum; + if (strcmp(name,"Pressure")==0) return PressureEnum; + else if (strcmp(name,"Radar")==0) return RadarEnum; + else if (strcmp(name,"RadarAttenuationMacGregor")==0) return RadarAttenuationMacGregorEnum; else if (strcmp(name,"RadarAttenuationWolff")==0) return RadarAttenuationWolffEnum; else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum; else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum; @@ -1118,12 +1120,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum; else if (strcmp(name,"SmbC")==0) return SmbCEnum; else if (strcmp(name,"SmbCcsnowValue")==0) return SmbCcsnowValueEnum; - else if (strcmp(name,"SmbCciceValue")==0) return SmbCciceValueEnum; - else if (strcmp(name,"SmbCotValue")==0) return SmbCotValueEnum; else stage=10; } if(stage==10){ - if (strcmp(name,"SmbD")==0) return SmbDEnum; + if (strcmp(name,"SmbCciceValue")==0) return SmbCciceValueEnum; + else if (strcmp(name,"SmbCotValue")==0) return SmbCotValueEnum; + else if (strcmp(name,"SmbD")==0) return SmbDEnum; else if (strcmp(name,"SmbDailyairdensity")==0) return SmbDailyairdensityEnum; else if (strcmp(name,"SmbDailyairhumidity")==0) return SmbDailyairhumidityEnum; else if (strcmp(name,"SmbDailydlradiation")==0) return SmbDailydlradiationEnum; @@ -1241,12 +1243,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum; else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum; else if (strcmp(name,"SmbZY")==0) return SmbZYEnum; - else if (strcmp(name,"SolidearthExternalDisplacementEastRate")==0) return SolidearthExternalDisplacementEastRateEnum; - else if (strcmp(name,"SolidearthExternalDisplacementNorthRate")==0) return SolidearthExternalDisplacementNorthRateEnum; else stage=11; } if(stage==11){ - if (strcmp(name,"SolidearthExternalDisplacementUpRate")==0) return SolidearthExternalDisplacementUpRateEnum; + if (strcmp(name,"SolidearthExternalDisplacementEastRate")==0) return SolidearthExternalDisplacementEastRateEnum; + else if (strcmp(name,"SolidearthExternalDisplacementNorthRate")==0) return SolidearthExternalDisplacementNorthRateEnum; + else if (strcmp(name,"SolidearthExternalDisplacementUpRate")==0) return SolidearthExternalDisplacementUpRateEnum; else if (strcmp(name,"SolidearthExternalGeoidRate")==0) return SolidearthExternalGeoidRateEnum; else if (strcmp(name,"StochasticForcingDefaultId")==0) return StochasticForcingDefaultIdEnum; else if (strcmp(name,"StrainRateeffective")==0) return StrainRateeffectiveEnum; @@ -1364,12 +1366,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum; else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum; else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum; - else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum; - else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum; else stage=12; } if(stage==12){ - if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum; + if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum; + else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum; + else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum; else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum; else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum; else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum; @@ -1487,12 +1489,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum; else if (strcmp(name,"Cfdragcoeffabsgradtransient")==0) return CfdragcoeffabsgradtransientEnum; else if (strcmp(name,"Cfrheologybbarabsgrad")==0) return CfrheologybbarabsgradEnum; - else if (strcmp(name,"Cfrheologybbarabsgradtransient")==0) return CfrheologybbarabsgradtransientEnum; - else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum; else stage=13; } if(stage==13){ - if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum; + if (strcmp(name,"Cfrheologybbarabsgradtransient")==0) return CfrheologybbarabsgradtransientEnum; + else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum; + else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum; else if (strcmp(name,"Cfsurfacesquaretransient")==0) return CfsurfacesquaretransientEnum; else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum; else if (strcmp(name,"Channel")==0) return ChannelEnum; @@ -1610,12 +1612,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"IceVolumeAboveFloatationScaled")==0) return IceVolumeAboveFloatationScaledEnum; else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum; else if (strcmp(name,"IceVolumeScaled")==0) return IceVolumeScaledEnum; - else if (strcmp(name,"IcefrontMassFlux")==0) return IcefrontMassFluxEnum; - else if (strcmp(name,"IcefrontMassFluxLevelset")==0) return IcefrontMassFluxLevelsetEnum; else stage=14; } if(stage==14){ - if (strcmp(name,"Incremental")==0) return IncrementalEnum; + if (strcmp(name,"IcefrontMassFlux")==0) return IcefrontMassFluxEnum; + else if (strcmp(name,"IcefrontMassFluxLevelset")==0) return IcefrontMassFluxLevelsetEnum; + else if (strcmp(name,"Incremental")==0) return IncrementalEnum; else if (strcmp(name,"Indexed")==0) return IndexedEnum; else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; else if (strcmp(name,"ElementInput")==0) return ElementInputEnum; @@ -1733,12 +1735,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"P2xP1")==0) return P2xP1Enum; else if (strcmp(name,"P2xP4")==0) return P2xP4Enum; else if (strcmp(name,"Paterson")==0) return PatersonEnum; - else if (strcmp(name,"Pengrid")==0) return PengridEnum; - else if (strcmp(name,"Penpair")==0) return PenpairEnum; else stage=15; } if(stage==15){ - if (strcmp(name,"Penta")==0) return PentaEnum; + if (strcmp(name,"Pengrid")==0) return PengridEnum; + else if (strcmp(name,"Penpair")==0) return PenpairEnum; + else if (strcmp(name,"Penta")==0) return PentaEnum; else if (strcmp(name,"PentaInput")==0) return PentaInputEnum; else if (strcmp(name,"Profiler")==0) return ProfilerEnum; else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum; @@ -1856,12 +1858,12 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum; else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum; else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum; - else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum; - else if (strcmp(name,"StrainRate")==0) return StrainRateEnum; else stage=16; } if(stage==16){ - if (strcmp(name,"StressTensor")==0) return StressTensorEnum; + if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum; + else if (strcmp(name,"StrainRate")==0) return StrainRateEnum; + else if (strcmp(name,"StressTensor")==0) return StressTensorEnum; else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum; else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum; else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum; diff --git a/src/c/shared/Enum/issmenums.jl b/src/c/shared/Enum/issmenums.jl index 0184ae50e..bb5e8e61c 100644 --- a/src/c/shared/Enum/issmenums.jl +++ b/src/c/shared/Enum/issmenums.jl @@ -182,6 +182,7 @@ ElasticEnum EplZigZagCounterEnum EsaHElasticEnum + EsaGElasticEnum EsaHemisphereEnum EsaRequestedOutputsEnum EsaUElasticEnum @@ -840,6 +841,7 @@ EsaUmotionEnum EsaXmotionEnum EsaYmotionEnum + EsaGravitationalAccelerationEnum EtaDiffEnum FlowequationBorderFSEnum FrictionAlpha2Enum @@ -1991,6 +1993,7 @@ function EnumToString(enum::IssmEnum) if(enum==ElasticEnum) return "Elastic" end if(enum==EplZigZagCounterEnum) return "EplZigZagCounter" end if(enum==EsaHElasticEnum) return "EsaHElastic" end + if(enum==EsaGElasticEnum) return "EsaGElastic" end if(enum==EsaHemisphereEnum) return "EsaHemisphere" end if(enum==EsaRequestedOutputsEnum) return "EsaRequestedOutputs" end if(enum==EsaUElasticEnum) return "EsaUElastic" end @@ -2649,6 +2652,7 @@ function EnumToString(enum::IssmEnum) if(enum==EsaUmotionEnum) return "EsaUmotion" end if(enum==EsaXmotionEnum) return "EsaXmotion" end if(enum==EsaYmotionEnum) return "EsaYmotion" end + if(enum==EsaGravitationalAccelerationEnum) return "EsaGravitationalAcceleration" end if(enum==EtaDiffEnum) return "EtaDiff" end if(enum==FlowequationBorderFSEnum) return "FlowequationBorderFS" end if(enum==FrictionAlpha2Enum) return "FrictionAlpha2" end @@ -3800,6 +3804,7 @@ function StringToEnum(name::String) if(name=="Elastic") return ElasticEnum end if(name=="EplZigZagCounter") return EplZigZagCounterEnum end if(name=="EsaHElastic") return EsaHElasticEnum end + if(name=="EsaGElastic") return EsaGElasticEnum end if(name=="EsaHemisphere") return EsaHemisphereEnum end if(name=="EsaRequestedOutputs") return EsaRequestedOutputsEnum end if(name=="EsaUElastic") return EsaUElasticEnum end @@ -4458,6 +4463,7 @@ function StringToEnum(name::String) if(name=="EsaUmotion") return EsaUmotionEnum end if(name=="EsaXmotion") return EsaXmotionEnum end if(name=="EsaYmotion") return EsaYmotionEnum end + if(name=="EsaGravitationalAcceleration") return EsaGravitationalAccelerationEnum end if(name=="EtaDiff") return EtaDiffEnum end if(name=="FlowequationBorderFS") return FlowequationBorderFSEnum end if(name=="FrictionAlpha2") return FrictionAlpha2Enum end