Changeset 22918
- Timestamp:
- 07/13/18 13:01:36 (7 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
r22909 r22918 41 41 42 42 iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum); 43 iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum); 43 iomodel->FetchDataToInput(elements,"md.geometry.bed",BedEnum); 44 iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum); 44 45 iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0); 45 46 iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); … … 165 166 case SurfaceSlopeXEnum: input2 = basalelement->GetInput(SurfaceEnum); _assert_(input2); break; 166 167 case SurfaceSlopeYEnum: input2 = basalelement->GetInput(SurfaceEnum); _assert_(input2); break; 167 case BedSlopeXEnum: input2 = basalelement->GetInput(BaseEnum); _assert_(input2); break; 168 case BedSlopeYEnum: input2 = basalelement->GetInput(BaseEnum); _assert_(input2); break; 168 case BedSlopeXEnum: input2 = basalelement->GetInput(BedEnum); _assert_(input2); break; 169 case BedSlopeYEnum: input2 = basalelement->GetInput(BedEnum); _assert_(input2); break; 170 case BaseSlopeXEnum: input2 = basalelement->GetInput(BaseEnum); _assert_(input2); break; 171 case BaseSlopeYEnum: input2 = basalelement->GetInput(BaseEnum); _assert_(input2); break; 169 172 case LevelsetfunctionSlopeXEnum: input2 = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(input2); break; 170 173 case LevelsetfunctionSlopeYEnum: input2 = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(input2); break; … … 182 185 if(input2) input2->GetInputDerivativeValue(&slopes[0],xyz_list,gauss); 183 186 switch(input_enum){ 184 case SurfaceSlopeXEnum: case BedSlopeXEnum: case LevelsetfunctionSlopeXEnum: value = slopes[0]; break;185 case SurfaceSlopeYEnum: case BedSlopeYEnum: case LevelsetfunctionSlopeYEnum: value = slopes[1]; break;187 case SurfaceSlopeXEnum: case BedSlopeXEnum: case BaseSlopeXEnum: case LevelsetfunctionSlopeXEnum: value = slopes[0]; break; 188 case SurfaceSlopeYEnum: case BedSlopeYEnum: case BaseSlopeYEnum: case LevelsetfunctionSlopeYEnum: value = slopes[1]; break; 186 189 default: input->GetInputValue(&value,gauss); 187 190 } -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r22828 r22918 281 281 virtual void PicoUpdateBoxid(int* pmax_boxid_basin)=0; 282 282 virtual void PicoUpdateBox(int loopboxid)=0; 283 virtual void PicoComputeBaseSlope(void)=0; 284 virtual void PicoComputeGroundingLineDepth(void)=0; 285 virtual void PicoComputeBasalMelt(void)=0; 283 286 virtual void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0; 284 287 virtual int PressureInterpolation()=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r22828 r22918 143 143 void PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");}; 144 144 void PicoUpdateBox(int loopboxid){_error_("not implemented yet");}; 145 void PicoComputeBaseSlope(void){_error_("not implemented yet");}; 146 void PicoComputeGroundingLineDepth(void){_error_("not implemented yet");}; 147 void PicoComputeBasalMelt(void){_error_("not implemented yet");}; 145 148 void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding); 146 149 int PressureInterpolation(); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r22828 r22918 132 132 void PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");}; 133 133 void PicoUpdateBox(int loopboxid){_error_("not implemented yet");}; 134 void PicoComputeBaseSlope(void){_error_("not implemented yet");}; 135 void PicoComputeGroundingLineDepth(void){_error_("not implemented yet");}; 136 void PicoComputeBasalMelt(void){_error_("not implemented yet");}; 134 137 void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");}; 135 138 int PressureInterpolation(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r22828 r22918 140 140 void PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");}; 141 141 void PicoUpdateBox(int loopboxid){_error_("not implemented yet");}; 142 void PicoComputeBaseSlope(void){_error_("not implemented yet");}; 143 void PicoComputeGroundingLineDepth(void){_error_("not implemented yet");}; 144 void PicoComputeBasalMelt(void){_error_("not implemented yet");}; 142 145 void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");}; 143 146 int PressureInterpolation(void); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r22828 r22918 2937 2937 IssmDouble gamma_T, overturning_coeff, thickness; 2938 2938 IssmDouble pressure, T_star,p_coeff, q_coeff; 2939 bool isplume; 2939 2940 2940 2941 /*Get variables*/ … … 2959 2960 this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum); 2960 2961 this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 2962 this->parameters->FindParam(&isplume, BasalforcingsPicoIsplumeEnum); 2961 2963 Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input); 2962 2964 _assert_(basinid<=num_basins); … … 3001 3003 Socs[i] = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Tocs[i]); 3002 3004 potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure; 3003 basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);3005 if(!isplume){basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);} 3004 3006 overturnings[i] = overturning_coeff*rho_star*(Beta*(soc_farocean-Socs[i])-alpha*(toc_farocean-Tocs[i])); 3005 3007 } 3006 3008 3007 this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);3009 if(!isplume){this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);} 3008 3010 this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum); 3009 3011 this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum); … … 3038 3040 Socs[i] = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda)); 3039 3041 potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure; 3040 basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);3041 } 3042 3043 this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);3042 if(!isplume){basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);} 3043 } 3044 3045 if(!isplume){this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);} 3044 3046 this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum); 3045 3047 this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum); … … 3056 3058 } 3057 3059 /*}}}*/ 3060 void Tria::PicoComputeBaseSlope(void){/*{{{*/ 3061 3062 //if(!this->IsIceInElement() || !this->IsFloating()) return; 3063 3064 /*Define variables and get inputs */ 3065 IssmDouble slopex,slopey; 3066 IssmDouble slope[NUMVERTICES]; 3067 Input* baseslopex_input = this->GetInput(BaseSlopeXEnum); _assert_(baseslopex_input); 3068 Input* baseslopey_input = this->GetInput(BaseSlopeYEnum); _assert_(baseslopey_input); 3069 3070 Gauss* gauss=this->NewGauss(); 3071 for(int i=0;i<NUMVERTICES;i++){ 3072 gauss->GaussVertex(i); 3073 baseslopex_input->GetInputValue(&slopex,gauss); 3074 baseslopey_input->GetInputValue(&slopey,gauss); 3075 slope[i] = sqrt(slopex*slopex + slopey*slopey); 3076 } 3077 3078 this->AddInput(BasalforcingsPicoShelfSlopeEnum,slope,P1Enum); 3079 3080 /*Cleanup and return*/ 3081 delete gauss; 3082 }/*}}}*/ 3083 void Tria::PicoComputeGroundingLineDepth(void){/*{{{*/ 3084 3085 if(!this->IsIceInElement() || !this->IsFloating()) return; 3086 3087 /*Define variables and get inputs */ 3088 IssmDouble bed; 3089 IssmDouble zgl[NUMVERTICES]; 3090 Input* bed_input = this->GetInput(BedEnum); _assert_(bed_input); 3091 3092 Gauss* gauss=this->NewGauss(); 3093 for(int i=0;i<NUMVERTICES;i++){ 3094 gauss->GaussVertex(i); 3095 bed_input->GetInputValue(&bed,gauss); 3096 zgl[i] = bed -50.; 3097 } 3098 3099 this->AddInput(BasalforcingsPicoGroundingLineDepthEnum,zgl,P1Enum); 3100 3101 /*Cleanup and return*/ 3102 delete gauss; 3103 }/*}}}*/ 3104 void Tria::PicoComputeBasalMelt(void){/*{{{*/ 3105 3106 if(!this->IsIceInElement() || !this->IsFloating()) return; 3107 3108 IssmDouble E0, Cd, CdT, YT, lam1, lam2, lam3, M0, CdTS0, y1, y2, x0; 3109 IssmDouble Tf_gl, YTS, CdTS, G1, G2, G3, g_alpha, M, l, X_hat, M_hat; 3110 IssmDouble alpha, zgl, Toc, Soc, z_base, yts; 3111 3112 /*Get variables*/ 3113 E0 = 3.6e-2; //Entrainment coefficient 3114 Cd = 2.5e-3; //Drag coefficient 3115 CdT = 1.1e-3; //Turbulent heat exchange coefficient 3116 YT = CdT/sqrt(Cd); //Heat exchange coefficient 3117 lam1 = -5.73e-2; //Freezing point-salinity coefficient (degrees C) 3118 lam2 = 8.32e-2; //Freezing point offset (degrees C) 3119 lam3 = 7.61e-4; //Freezing point-depth coefficient (K m-1) 3120 M0 = 10.; //Melt-rate parameter (m yr-1 C-2) 3121 CdTS0 = 6e-4; //Heat exchange parameter 3122 y1 = 0.545; //Heat exchange parameter 3123 y2 = 3.5e-5; //Heat exchange parameter 3124 x0 = 0.56; //Dimentionless scaling factor 3125 3126 /*Define arrays*/ 3127 IssmDouble basalmeltrates_shelf[NUMVERTICES]; //Basal melt-rate 3128 3129 /*Polynomial coefficients*/ 3130 IssmDouble p[12]; 3131 p[0] = 0.1371330075095435; 3132 p[1] = 5.527656234709359E1; 3133 p[2] = -8.951812433987858E2; 3134 p[3] = 8.927093637594877E3; 3135 p[4] = -5.563863123811898E4; 3136 p[5] = 2.218596970948727E5; 3137 p[6] = -5.820015295669482E5; 3138 p[7] = 1.015475347943186E6; 3139 p[8] = -1.166290429178556E6; 3140 p[9] = 8.466870335320488E5; 3141 p[10] = -3.520598035764990E5; 3142 p[11] = 6.387953795485420E4; 3143 3144 /*Get inputs*/ 3145 Input* alpha_input=this->GetInput(BasalforcingsPicoShelfSlopeEnum); _assert_(alpha_input); 3146 Input* zgl_input=this->GetInput(BasalforcingsPicoGroundingLineDepthEnum); _assert_(zgl_input); 3147 Input* toc_input=this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(toc_input); 3148 Input* soc_input=this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(soc_input); 3149 Input* base_input=this->GetInput(BaseEnum); _assert_(base_input); 3150 this->FindParam(&yts, ConstantsYtsEnum); 3151 3152 /*Loop over the number of vertices in this element*/ 3153 Gauss* gauss=this->NewGauss(); 3154 for(int i=0;i<NUMVERTICES;i++){ 3155 gauss->GaussVertex(i); 3156 3157 /*Get inputs*/ 3158 alpha_input->GetInputValue(&alpha,gauss); 3159 zgl_input->GetInputValue(&zgl,gauss); 3160 toc_input->GetInputValue(&Toc,gauss); //(K) 3161 soc_input->GetInputValue(&Soc,gauss); 3162 base_input->GetInputValue(&z_base,gauss); 3163 3164 /*Make necessary conversions*/ 3165 Toc = Toc-273.15; // (Degrees C) 3166 alpha = atan(alpha); // (Degrees) 3167 3168 /*Low bound for Toc to ensure X_hat is between 0 and 1*/ 3169 if(Toc<lam1*Soc+lam2) {Toc=lam1*Soc+lam2;} 3170 3171 /*Compute parameters needed for melt-rate calculation*/ 3172 Tf_gl = lam1*Soc+lam2+lam3*zgl; //Characteristic freezing point 3173 YTS = YT*(y1+y2*(((Toc-Tf_gl)*E0*sin(alpha))/(lam3*(CdTS0+E0*sin(alpha))))); //Effective heat exchange coefficient 3174 CdTS = sqrt(Cd)*YTS; //Heat exchange coefficient 3175 G1 = sqrt(sin(alpha)/(Cd+E0*sin(alpha))); //Geometric factor 3176 G2 = sqrt(CdTS/(CdTS+E0*sin(alpha))); //Geometric factor 3177 G3 = (E0*sin(alpha))/(CdTS+E0*sin(alpha)); //Geometric factor 3178 g_alpha = G1*G2*G3; //Melt scaling factor 3179 M = M0*g_alpha*pow((Toc-Tf_gl),2); //Melt-rate scale 3180 l = ((Toc-Tf_gl)*(x0*CdTS+E0*sin(alpha)))/(lam3*x0*(CdTS+E0*sin(alpha))); //Length scale 3181 X_hat = (z_base-zgl)/l; //Dimentionless coordinate system 3182 3183 /*Compute polynomial fit*/ 3184 M_hat = 0.; //Reset summation variable for each node 3185 for(int ii=0;ii<12;ii++) { 3186 M_hat += p[ii]*pow(X_hat,ii); //Polynomial fit 3187 } 3188 3189 /*Compute melt-rate*/ 3190 basalmeltrates_shelf[i] = (M*M_hat)/yts; //Basal melt-rate (m/s) 3191 } 3192 /*Save computed melt-rate*/ 3193 this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum); 3194 3195 /*Cleanup and return*/ 3196 delete gauss; 3197 }/*}}}*/ 3058 3198 void Tria::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){/*{{{*/ 3059 3199 -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r22828 r22918 114 114 void PicoUpdateBoxid(int* pmax_boxid_basin); 115 115 void PicoUpdateBox(int loopboxid); 116 void PicoComputeBaseSlope(void); 117 void PicoComputeGroundingLineDepth(void); 118 void PicoComputeBasalMelt(void); 116 119 void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding); 117 120 int PressureInterpolation(); -
issm/trunk-jpl/src/c/cores/bmb_core.cpp
r22914 r22918 20 20 /*In some cases we need to run additional analyses to get the required input data*/ 21 21 if(basalforcing_model==BasalforcingsPicoEnum){ 22 //femmodel->parameters->FindParam(&isplume,BasalforcingsIsplumeEnum);22 femmodel->parameters->FindParam(&isplume,BasalforcingsPicoIsplumeEnum); 23 23 if(isplume){ 24 25 24 femmodel->SetCurrentConfiguration(L2ProjectionBaseAnalysisEnum); 26 _error_("STOP"); 27 //femmodel->parameters->SetParam(BaseSlopeXEnum,InputToL2ProjectEnum); 25 femmodel->parameters->SetParam(BaseSlopeXEnum,InputToL2ProjectEnum); 28 26 solutionsequence_linear(femmodel); 29 //femmodel->parameters->SetParam(BaseSlopeYEnum,InputToL2ProjectEnum);27 femmodel->parameters->SetParam(BaseSlopeYEnum,InputToL2ProjectEnum); 30 28 solutionsequence_linear(femmodel); 31 29 } -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
r22749 r22918 10 10 11 11 int maxbox; 12 bool isplume; 12 13 13 14 /*First, reset all melt to 0 */ … … 20 21 } 21 22 23 /*PICO nelt rate parameterization (Reese et al., 2018)*/ 22 24 femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum); 23 25 UpdateBoxIdsPico(femmodel); … … 26 28 UpdateBoxPico(femmodel,i); 27 29 ComputeAverageOceanvarsPico(femmodel,i); 30 } 31 32 /*Optional buoyant plume melt rate parameterization (Lazeroms et al., 2018) */ 33 femmodel->parameters->FindParam(&isplume,BasalforcingsPicoIsplumeEnum); 34 if(isplume){ 35 ComputeSubshelfSlopePlume(femmodel); 36 ComputeGroundingLineDepthPlume(femmodel); 37 ComputeBasalMeltPlume(femmodel); 28 38 } 29 39 }/*}}}*/ … … 222 232 xDelete<IssmDouble>(boxareas); 223 233 }/*}}}*/ 234 void ComputeSubshelfSlopePlume(FemModel* femmodel){/*{{{*/ 235 for(int i=0;i<femmodel->elements->Size();i++){ 236 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 237 element->PicoComputeBaseSlope(); 238 } 239 }/*}}}*/ 240 void ComputeGroundingLineDepthPlume(FemModel* femmodel){/*{{{*/ 241 for(int i=0;i<femmodel->elements->Size();i++){ 242 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 243 element->PicoComputeGroundingLineDepth(); 244 } 245 }/*}}}*/ 246 void ComputeBasalMeltPlume(FemModel* femmodel){/*{{{*/ 247 for(int i=0;i<femmodel->elements->Size();i++){ 248 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 249 element->PicoComputeBasalMelt(); 250 } 251 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h
r22732 r22918 15 15 void UpdateBoxPico(FemModel* femmodel, int loopboxid); 16 16 void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid); 17 void ComputeSubshelfSlopePlume(FemModel* femmodel); 18 void ComputeGroundingLineDepthPlume(FemModel* femmodel); 19 void ComputeBasalMeltPlume(FemModel* femmodel); 17 20 18 21 #endif /* _FloatingiceMeltingRatePicox_H*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r22802 r22918 233 233 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum)); 234 234 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum)); 235 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.isplume",BasalforcingsPicoIsplumeEnum)); 235 236 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature"); 236 237 _assert_(M>=1 && N>=1); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22911 r22918 73 73 BasalforcingsPicoFarOceantemperatureEnum, 74 74 BasalforcingsPicoGammaTEnum, 75 BasalforcingsPicoIsplumeEnum, 75 76 BasalforcingsPicoMaxboxcountEnum, 76 77 BasalforcingsPicoNumBasinsEnum, … … 372 373 BasalforcingsPicoBasinIdEnum, 373 374 BasalforcingsPicoBoxIdEnum, 375 BasalforcingsPicoGroundingLineDepthEnum, 376 BasalforcingsPicoShelfSlopeEnum, 374 377 BasalforcingsPicoSubShelfOceanOverturningEnum, 375 378 BasalforcingsPicoSubShelfOceanSalinityEnum, 376 379 BasalforcingsPicoSubShelfOceanTempEnum, 377 380 BaseEnum, 381 BaseSlopeXEnum, 382 BaseSlopeYEnum, 378 383 BedEnum, 379 384 BedSlopeXEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22911 r22918 81 81 case BasalforcingsPicoFarOceantemperatureEnum : return "BasalforcingsPicoFarOceantemperature"; 82 82 case BasalforcingsPicoGammaTEnum : return "BasalforcingsPicoGammaT"; 83 case BasalforcingsPicoIsplumeEnum : return "BasalforcingsPicoIsplume"; 83 84 case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount"; 84 85 case BasalforcingsPicoNumBasinsEnum : return "BasalforcingsPicoNumBasins"; … … 378 379 case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId"; 379 380 case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId"; 381 case BasalforcingsPicoGroundingLineDepthEnum : return "BasalforcingsPicoGroundingLineDepth"; 382 case BasalforcingsPicoShelfSlopeEnum : return "BasalforcingsPicoShelfSlope"; 380 383 case BasalforcingsPicoSubShelfOceanOverturningEnum : return "BasalforcingsPicoSubShelfOceanOverturning"; 381 384 case BasalforcingsPicoSubShelfOceanSalinityEnum : return "BasalforcingsPicoSubShelfOceanSalinity"; 382 385 case BasalforcingsPicoSubShelfOceanTempEnum : return "BasalforcingsPicoSubShelfOceanTemp"; 383 386 case BaseEnum : return "Base"; 387 case BaseSlopeXEnum : return "BaseSlopeX"; 388 case BaseSlopeYEnum : return "BaseSlopeY"; 384 389 case BedEnum : return "Bed"; 385 390 case BedSlopeXEnum : return "BedSlopeX"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22911 r22918 81 81 else if (strcmp(name,"BasalforcingsPicoFarOceantemperature")==0) return BasalforcingsPicoFarOceantemperatureEnum; 82 82 else if (strcmp(name,"BasalforcingsPicoGammaT")==0) return BasalforcingsPicoGammaTEnum; 83 else if (strcmp(name,"BasalforcingsPicoIsplume")==0) return BasalforcingsPicoIsplumeEnum; 83 84 else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum; 84 85 else if (strcmp(name,"BasalforcingsPicoNumBasins")==0) return BasalforcingsPicoNumBasinsEnum; … … 136 137 else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum; 137 138 else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum; 138 else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum;139 139 else stage=2; 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum; 142 if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum; 143 else if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum; 143 144 else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum; 144 145 else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum; … … 259 260 else if (strcmp(name,"SealevelriseTidalLoveH")==0) return SealevelriseTidalLoveHEnum; 260 261 else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum; 261 else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum; 265 if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum; 266 else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum; 266 267 else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 267 268 else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum; … … 382 383 else if (strcmp(name,"BasalforcingsGeothermalflux")==0) return BasalforcingsGeothermalfluxEnum; 383 384 else if (strcmp(name,"BasalforcingsGroundediceMeltingRate")==0) return BasalforcingsGroundediceMeltingRateEnum; 384 else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum; 388 if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum; 389 else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum; 390 else if (strcmp(name,"BasalforcingsPicoGroundingLineDepth")==0) return BasalforcingsPicoGroundingLineDepthEnum; 391 else if (strcmp(name,"BasalforcingsPicoShelfSlope")==0) return BasalforcingsPicoShelfSlopeEnum; 389 392 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum; 390 393 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum; 391 394 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum; 392 395 else if (strcmp(name,"Base")==0) return BaseEnum; 396 else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum; 397 else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum; 393 398 else if (strcmp(name,"Bed")==0) return BedEnum; 394 399 else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; … … 501 506 else if (strcmp(name,"Misfit")==0) return MisfitEnum; 502 507 else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum; 503 else if (strcmp(name,"Node")==0) return NodeEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"Node")==0) return NodeEnum; 504 512 else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum; 505 513 else if (strcmp(name,"P0")==0) return P0Enum; 506 514 else if (strcmp(name,"P1")==0) return P1Enum; 507 515 else if (strcmp(name,"Pressure")==0) return PressureEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum; 516 else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum; 512 517 else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum; 513 518 else if (strcmp(name,"Sealevel")==0) return SealevelEnum; … … 624 629 else if (strcmp(name,"Vy")==0) return VyEnum; 625 630 else if (strcmp(name,"VyMesh")==0) return VyMeshEnum; 626 else if (strcmp(name,"VyObs")==0) return VyObsEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"VyObs")==0) return VyObsEnum; 627 635 else if (strcmp(name,"Vz")==0) return VzEnum; 628 636 else if (strcmp(name,"VzFS")==0) return VzFSEnum; 629 637 else if (strcmp(name,"VzHO")==0) return VzHOEnum; 630 638 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"VzSSA")==0) return VzSSAEnum; 639 else if (strcmp(name,"VzSSA")==0) return VzSSAEnum; 635 640 else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum; 636 641 else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; … … 747 752 else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum; 748 753 else if (strcmp(name,"Free")==0) return FreeEnum; 749 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 750 758 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; 751 759 else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum; 752 760 else if (strcmp(name,"Fset")==0) return FsetEnum; 753 761 else if (strcmp(name,"FSpressure")==0) return FSpressureEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"FSSolver")==0) return FSSolverEnum; 762 else if (strcmp(name,"FSSolver")==0) return FSSolverEnum; 758 763 else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum; 759 764 else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum; … … 870 875 else if (strcmp(name,"Matestar")==0) return MatestarEnum; 871 876 else if (strcmp(name,"Matice")==0) return MaticeEnum; 872 else if (strcmp(name,"Matlitho")==0) return MatlithoEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Matlitho")==0) return MatlithoEnum; 873 881 else if (strcmp(name,"Matpar")==0) return MatparEnum; 874 882 else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum; 875 883 else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum; 876 884 else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum; 885 else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum; 881 886 else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum; 882 887 else if (strcmp(name,"MaxVel")==0) return MaxVelEnum; … … 993 998 else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum; 994 999 else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum; 995 else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum; 996 1004 else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum; 997 1005 else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum; 998 1006 else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum; 999 1007 else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum; 1008 else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum; 1004 1009 else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum; 1005 1010 else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum; … … 1116 1121 else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum; 1117 1122 else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum; 1118 else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum; 1119 1127 else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum; 1120 1128 else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum; 1121 1129 else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum; 1122 1130 else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum; 1131 else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum; 1127 1132 else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum; 1128 1133 else if (strcmp(name,"TransientInput")==0) return TransientInputEnum; -
issm/trunk-jpl/src/m/classes/basalforcingspico.m
r22749 r22918 13 13 farocean_temperature = NaN; 14 14 farocean_salinity = NaN; 15 isplume = NaN; 15 16 geothermalflux = NaN; 16 17 groundedice_melting_rate = NaN; … … 38 39 disp(' no maximum number of boxes set, setting value to 5'); 39 40 end 40 41 41 if isnan(self.overturning_coeff) 42 42 self.overturning_coeff = 1e6; %m^3/s 43 43 disp(' no overturning strength set, setting value to 1e6'); 44 44 end 45 46 45 if isnan(self.gamma_T) 47 46 self.gamma_T = 2e-5; %m/s … … 56 55 function self = setdefaultparameters(self) % {{{ 57 56 58 self.maxboxcount = 5;57 self.maxboxcount = 5; 59 58 self.overturning_coeff = 1e6; %m^3/s 60 self.gamma_T = 2e-5; %m/s 59 self.gamma_T = 2e-5; %m/s 60 self.isplume = false; 61 61 62 62 end % }}} … … 70 70 md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]); 71 71 md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]); 72 md = checkfield(md,'fieldname','basalforcings.isplume','values',[0 1]); 72 73 md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1); 73 74 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1); … … 79 80 fielddisplay(self,'basin_id','basin number assigned to each node [unitless]'); 80 81 fielddisplay(self,'maxboxcount','maximum number of boxes initialized under all ice shelves'); 81 fielddisplay(self,'overturning_coeff',' Overturning strength [m^3/s]');82 fielddisplay(self,'gamma_T',' Turbulent temperature exchange velocity [m/s]');82 fielddisplay(self,'overturning_coeff','overturning strength [m^3/s]'); 83 fielddisplay(self,'gamma_T','turbulent temperature exchange velocity [m/s]'); 83 84 fielddisplay(self,'farocean_temperature','depth averaged ocean temperature in front of the ice shelf for basin i [K]'); 84 85 fielddisplay(self,'farocean_salinity','depth averaged ocean salinity in front of the ice shelf for basin i [psu]'); 86 fielddisplay(self,'isplume','boolean to use buoyant plume melt rate parameterization from Lazeroms et al., 2018 (default false)'); 85 87 fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]'); 86 88 fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]'); … … 98 100 WriteData(fid,prefix,'object',self,'fieldname','farocean_temperature','format','DoubleMat','name','md.basalforcings.farocean_temperature','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts); 99 101 WriteData(fid,prefix,'object',self,'fieldname','farocean_salinity','format','DoubleMat','name','md.basalforcings.farocean_salinity','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts); 100 %WriteData(fid,prefix,'object',self,'fieldname','basin_id','format','DoubleMat','name','md.basalforcings.basin_id','mattype',2);101 102 WriteData(fid,prefix,'object',self,'fieldname','basin_id','data',self.basin_id-1,'name','md.basalforcings.basin_id','format','IntMat','mattype',2); %Change to 0-indexing 103 WriteData(fid,prefix,'object',self,'fieldname','isplume','format','Boolean'); 102 104 WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','name','md.basalforcings.geothermalflux','mattype',1,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts); 103 105 WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); -
issm/trunk-jpl/test/NightlyRun/test470.m
r22752 r22918 24 24 md.basalforcings.farocean_salinity = [31 32 33; 34 35 36; 0.5 1 1.5]; %PSU 25 25 md.basalforcings.maxboxcount=5; 26 md.basalforcings.isplume = 0; 26 27 27 28 %Boundary conditions:
Note:
See TracChangeset
for help on using the changeset viewer.