Skip to content

Commit ac32b41

Browse files
authored
Merge pull request ISSMteam#131 from NJSchlegel/GEMB_mapping
Gemb mapping
2 parents 4378dd5 + 0a1fa1a commit ac32b41

File tree

17 files changed

+333
-198
lines changed

17 files changed

+333
-198
lines changed

src/c/analyses/SmbAnalysis.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,13 @@ void SmbAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s
402402
parameters->AddObject(new DoubleVecParam(SmbMappedforcingelevationEnum,&temp[0],M));
403403
iomodel->DeleteData(temp,"md.smb.mappedforcingelevation");
404404

405-
parameters->AddObject(iomodel->CopyConstantObject("md.smb.lapseTaValue",SmbLapseTaValueEnum));
406-
parameters->AddObject(iomodel->CopyConstantObject("md.smb.lapsedlwrfValue",SmbLapsedlwrfValueEnum));
405+
iomodel->FetchData(&temp,&M,&N,"md.smb.lapseTaValue"); _assert_(N==1);
406+
parameters->AddObject(new DoubleVecParam(SmbLapseTaValueEnum,&temp[0],M));
407+
iomodel->DeleteData(temp,"md.smb.lapseTaValue");
408+
iomodel->FetchData(&temp,&M,&N,"md.smb.lapsedlwrfValue"); _assert_(N==1);
409+
parameters->AddObject(new DoubleVecParam(SmbLapsedlwrfValueEnum,&temp[0],M));
410+
iomodel->DeleteData(temp,"md.smb.lapsedlwrfValue");
411+
407412
}
408413
parameters->AddObject(iomodel->CopyConstantObject("md.smb.aIdx",SmbAIdxEnum));
409414
parameters->AddObject(iomodel->CopyConstantObject("md.smb.eIdx",SmbEIdxEnum));

src/c/classes/Elements/Element.cpp

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5185,6 +5185,11 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/
51855185
IssmDouble sumMassAdd=0.0;
51865186
IssmDouble fac=0.0;
51875187
IssmDouble sumMass=0.0;
5188+
IssmDouble sumH=0.0;
5189+
IssmDouble T0m=0.0;
5190+
IssmDouble T10m=0.0;
5191+
IssmDouble T30m=0.0;
5192+
IssmDouble T50m=0.0;
51885193
IssmDouble dMass=0.0;
51895194
IssmDouble accsumR=0.0;
51905195
IssmDouble accsumF=0.0;
@@ -5610,8 +5615,11 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/
56105615
bool isprecipmap=true;
56115616
parameters->FindParam(&isprecipmap,SmbIsprecipforcingremappedEnum);
56125617

5613-
parameters->FindParam(&tlapse,SmbLapseTaValueEnum);
5614-
parameters->FindParam(&dlwlapse,SmbLapsedlwrfValueEnum);
5618+
IssmDouble* tlapse = NULL;
5619+
parameters->FindParam(&tlapse,&N,SmbLapseTaValueEnum); _assert_(tlapse);
5620+
5621+
IssmDouble* dlwlapse = NULL;
5622+
parameters->FindParam(&dlwlapse,&N,SmbLapsedlwrfValueEnum); _assert_(dlwlapse);
56155623

56165624
IssmDouble* elevation = NULL;
56175625
parameters->FindParam(&elevation,&N,SmbMappedforcingelevationEnum); _assert_(elevation);
@@ -5629,17 +5637,19 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/
56295637
parameters->FindParam(&dsw, Mappedpoint-1, timeinputs, timestepping, dt, SmbDswrfParamEnum);
56305638
parameters->FindParam(&dswdiff, Mappedpoint-1, timeinputs, timestepping, dt, SmbDswdiffrfParamEnum);
56315639

5632-
Ta = taparam + (currentsurface - elevation[Mappedpoint-1])*tlapse;
5633-
if (fabs(dlwlapse) > Dtol) dlw = fmax(dlwrfparam + (currentsurface - elevation[Mappedpoint-1])*dlwlapse,0.0);
5634-
else{
5640+
Ta = taparam + (currentsurface - elevation[Mappedpoint-1])*tlapse[Mappedpoint-1];
5641+
Tmean = Tmean + (currentsurface - elevation[Mappedpoint-1])*tlapse[Mappedpoint-1];
5642+
if (fabs(dlwlapse[Mappedpoint-1]) > Dtol){
5643+
dlw = fmax(dlwrfparam + (currentsurface - elevation[Mappedpoint-1])*dlwlapse[Mappedpoint-1],0.0);
5644+
}else{
56355645
//adjust downward longwave, holding emissivity equal (Glover et al, 1999)
56365646
IssmDouble SB = 5.67e-8; // Stefan-Boltzmann constant (W m-2 K-4)
56375647
IssmDouble effe = 1.;
56385648
effe = dlwrfparam/(SB * pow(taparam,4.0));
56395649
dlw = fmax(effe*SB*pow(Ta,4.0),0.0);
56405650
}
56415651

5642-
if ( (fabs(dlwlapse) > Dtol) || (fabs(tlapse) > Dtol)){
5652+
if ( (fabs(dlwlapse[Mappedpoint-1]) > Dtol) || (fabs(tlapse[Mappedpoint-1]) > Dtol)){
56435653
IssmDouble Rg = 8.314; // gas constant (J mol-1 K-1)
56445654
IssmDouble dAir = 0.0;
56455655
// calculated air density [kg/m3]
@@ -5655,14 +5665,17 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/
56555665
//Ding et al., 2019 after Bolton, 1980
56565666
//ea37 = rh37*100*6.112.*exp((17.67*(t237-273.15))./(t237-29.65));
56575667
rhparam=eaparam/6.112/exp((17.67*(taparam-273.15))/(taparam-29.65));
5658-
eAir=rhparam*6.112*exp((17.67*(Ta-273.15))/(Ta-29.65));
5668+
eAir=fmax(rhparam*6.112*exp((17.67*(Ta-273.15))/(Ta-29.65)),0.0);
56595669

5660-
if (isprecipmap && (eaparam>0)){
5670+
if (isprecipmap && (eaparam>0) && (eAir>0)){
56615671
P=prparam*eAir/eaparam;
5672+
C=C*eAir/eaparam;
56625673
}
56635674
else P=prparam;
56645675

56655676
xDelete<IssmDouble>(elevation);
5677+
xDelete<IssmDouble>(tlapse);
5678+
xDelete<IssmDouble>(dlwlapse);
56665679
}
56675680
/*}}}*/
56685681

@@ -5739,9 +5752,18 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/
57395752
/*Calculate total system mass:*/
57405753
sumMass=0;
57415754
fac=0;
5755+
T0m=0;
5756+
T10m=0;
5757+
T30m=0;
5758+
T50m=0;
57425759
for(int i=0;i<m;i++){
57435760
sumMass += dz[i]*d[i];
5761+
sumH += dz[i];
57445762
if (d[i] > 0) fac += dz[i]*(rho_ice - fmin(d[i],rho_ice));
5763+
if (i==0 || (d[i]<rho_ice && d[i]>0 && sumH <= 50)) T50m = T[i];
5764+
if (i==0 || (d[i]<rho_ice && d[i]>0 && sumH <= 30)) T30m = T[i];
5765+
if (i==0 || (d[i]<rho_ice && d[i]>0 && sumH <= 10)) T10m = T[i];
5766+
if (i==0) T0m = T[i];
57455767
}
57465768

57475769
#if defined(_HAVE_AD_)
@@ -5852,6 +5874,10 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/
58525874
this->SetElementInput(SmbMSurfSumEnum,sumMsurf/dt/rho_ice);
58535875
this->SetElementInput(SmbWAddEnum,sumW/dt);
58545876
this->SetElementInput(SmbFACEnum,fac/1000.); // output in meters
5877+
this->SetElementInput(SmbTsEnum,T0m); // output in K at surface
5878+
this->SetElementInput(SmbT10Enum,T10m); // output in K at 10m depth
5879+
this->SetElementInput(SmbT30Enum,T30m); // output in K at 10m depth
5880+
this->SetElementInput(SmbT50Enum,T50m); // output in K ar 10m depth
58555881
this->SetElementInput(SmbECDtEnum,EC);
58565882

58575883
/*Free allocations:{{{*/

src/c/shared/Enum/Enum.vim

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,11 @@ syn keyword cConstant FlowequationIsNitscheEnum
211211
syn keyword cConstant FeFSNitscheGammaEnum
212212
syn keyword cConstant FrictionCouplingEnum
213213
syn keyword cConstant FrictionDeltaEnum
214+
syn keyword cConstant FrictionDNNEnum
215+
syn keyword cConstant FrictionDNNpsEnum
216+
syn keyword cConstant FrictionDNNstEnum
217+
syn keyword cConstant FrictionDNNInputScaleEnum
218+
syn keyword cConstant FrictionDNNOutputScaleEnum
214219
syn keyword cConstant FrictionEffectivePressureLimitEnum
215220
syn keyword cConstant FrictionFEnum
216221
syn keyword cConstant FrictionGammaEnum
@@ -249,7 +254,6 @@ syn keyword cConstant FrontalForcingsSdNumberofParamsEnum
249254
syn keyword cConstant FrontalForcingsSdpolyparamsEnum
250255
syn keyword cConstant GrdModelEnum
251256
syn keyword cConstant GroundinglineFrictionInterpolationEnum
252-
syn keyword cConstant GroundinglineIntrusionDistanceEnum
253257
syn keyword cConstant GroundinglineMeltInterpolationEnum
254258
syn keyword cConstant GroundinglineMigrationEnum
255259
syn keyword cConstant GroundinglineNumRequestedOutputsEnum
@@ -911,6 +915,7 @@ syn keyword cConstant FrontalForcingsBasinIdEnum
911915
syn keyword cConstant FrontalForcingsSubglacialDischargearmaEnum
912916
syn keyword cConstant FrontalForcingsSubglacialDischargeEnum
913917
syn keyword cConstant GeometryHydrostaticRatioEnum
918+
syn keyword cConstant GroundinglineIntrusionDistanceEnum
914919
syn keyword cConstant NGiaEnum
915920
syn keyword cConstant NGiaRateEnum
916921
syn keyword cConstant UGiaEnum
@@ -1237,6 +1242,9 @@ syn keyword cConstant SmbSummerMeltEnum
12371242
syn keyword cConstant SmbSummerAlbedoEnum
12381243
syn keyword cConstant SmbSnowheightEnum
12391244
syn keyword cConstant SmbTEnum
1245+
syn keyword cConstant SmbT10Enum
1246+
syn keyword cConstant SmbT30Enum
1247+
syn keyword cConstant SmbT50Enum
12401248
syn keyword cConstant SmbTaEnum
12411249
syn keyword cConstant SmbTampEnum
12421250
syn keyword cConstant SmbTeValueEnum
@@ -1247,6 +1255,7 @@ syn keyword cConstant SmbTemperaturesPresentdayEnum
12471255
syn keyword cConstant SmbTemperaturesReconstructedEnum
12481256
syn keyword cConstant SmbTiniEnum
12491257
syn keyword cConstant SmbTmeanEnum
1258+
syn keyword cConstant SmbTsEnum
12501259
syn keyword cConstant SmbTzEnum
12511260
syn keyword cConstant SmbValuesAutoregressionEnum
12521261
syn keyword cConstant SmbValuesMovingaverageEnum
@@ -3796,16 +3805,15 @@ syn keyword cType Cfsurfacelogvel
37963805
syn keyword cType Cfsurfacesquare
37973806
syn keyword cType Cfsurfacesquaretransient
37983807
syn keyword cType Channel
3799-
syn keyword cType classes
38003808
syn keyword cType Constraint
38013809
syn keyword cType Constraints
38023810
syn keyword cType Contour
38033811
syn keyword cType Contours
38043812
syn keyword cType ControlInput
38053813
syn keyword cType ControlParam
38063814
syn keyword cType Covertree
3807-
syn keyword cType DatasetInput
38083815
syn keyword cType DataSetParam
3816+
syn keyword cType DatasetInput
38093817
syn keyword cType Definition
38103818
syn keyword cType DependentObject
38113819
syn keyword cType DoubleInput
@@ -3818,20 +3826,19 @@ syn keyword cType Element
38183826
syn keyword cType ElementHook
38193827
syn keyword cType ElementInput
38203828
syn keyword cType ElementMatrix
3821-
syn keyword cType Elements
38223829
syn keyword cType ElementVector
3830+
syn keyword cType Elements
38233831
syn keyword cType ExponentialVariogram
38243832
syn keyword cType ExternalResult
38253833
syn keyword cType FemModel
38263834
syn keyword cType FileParam
38273835
syn keyword cType Friction
38283836
syn keyword cType Gauss
3829-
syn keyword cType GaussianVariogram
3830-
syn keyword cType gaussobjects
38313837
syn keyword cType GaussPenta
38323838
syn keyword cType GaussSeg
38333839
syn keyword cType GaussTetra
38343840
syn keyword cType GaussTria
3841+
syn keyword cType GaussianVariogram
38353842
syn keyword cType GenericExternalResult
38363843
syn keyword cType GenericOption
38373844
syn keyword cType GenericParam
@@ -3848,7 +3855,6 @@ syn keyword cType IntVecParam
38483855
syn keyword cType IoModel
38493856
syn keyword cType IssmDirectApplicInterface
38503857
syn keyword cType IssmParallelDirectApplicInterface
3851-
syn keyword cType krigingobjects
38523858
syn keyword cType Load
38533859
syn keyword cType Loads
38543860
syn keyword cType Masscon
@@ -3859,7 +3865,6 @@ syn keyword cType Materials
38593865
syn keyword cType Matestar
38603866
syn keyword cType Matice
38613867
syn keyword cType Matlitho
3862-
syn keyword cType matrixobjects
38633868
syn keyword cType MatrixParam
38643869
syn keyword cType Misfit
38653870
syn keyword cType Moulin
@@ -3886,13 +3891,13 @@ syn keyword cType Quadtree
38863891
syn keyword cType Radar
38873892
syn keyword cType Regionaloutput
38883893
syn keyword cType Results
3889-
syn keyword cType Riftfront
38903894
syn keyword cType RiftStruct
3895+
syn keyword cType Riftfront
38913896
syn keyword cType SealevelGeometry
38923897
syn keyword cType Seg
38933898
syn keyword cType SegInput
3894-
syn keyword cType Segment
38953899
syn keyword cType SegRef
3900+
syn keyword cType Segment
38963901
syn keyword cType SpcDynamic
38973902
syn keyword cType SpcStatic
38983903
syn keyword cType SpcTransient
@@ -3913,6 +3918,10 @@ syn keyword cType Variogram
39133918
syn keyword cType VectorParam
39143919
syn keyword cType Vertex
39153920
syn keyword cType Vertices
3921+
syn keyword cType classes
3922+
syn keyword cType gaussobjects
3923+
syn keyword cType krigingobjects
3924+
syn keyword cType matrixobjects
39163925
syn keyword cType AdjointBalancethickness2Analysis
39173926
syn keyword cType AdjointBalancethicknessAnalysis
39183927
syn keyword cType AdjointHorizAnalysis

src/c/shared/Enum/EnumDefinitions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,9 @@ enum definitions{
12391239
SmbSummerAlbedoEnum,
12401240
SmbSnowheightEnum,
12411241
SmbTEnum,
1242+
SmbT10Enum,
1243+
SmbT30Enum,
1244+
SmbT50Enum,
12421245
SmbTaEnum,
12431246
SmbTampEnum,
12441247
SmbTeValueEnum,
@@ -1249,6 +1252,7 @@ enum definitions{
12491252
SmbTemperaturesReconstructedEnum,
12501253
SmbTiniEnum,
12511254
SmbTmeanEnum,
1255+
SmbTsEnum,
12521256
SmbTzEnum,
12531257
SmbValuesAutoregressionEnum,
12541258
SmbValuesMovingaverageEnum,

src/c/shared/Enum/EnumToStringx.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,11 @@ const char* EnumToStringx(int en){
213213
case FeFSNitscheGammaEnum : return "FeFSNitscheGamma";
214214
case FrictionCouplingEnum : return "FrictionCoupling";
215215
case FrictionDeltaEnum : return "FrictionDelta";
216+
case FrictionDNNEnum : return "FrictionDNN";
217+
case FrictionDNNpsEnum : return "FrictionDNNps";
218+
case FrictionDNNstEnum : return "FrictionDNNst";
219+
case FrictionDNNInputScaleEnum : return "FrictionDNNInputScale";
220+
case FrictionDNNOutputScaleEnum : return "FrictionDNNOutputScale";
216221
case FrictionEffectivePressureLimitEnum : return "FrictionEffectivePressureLimit";
217222
case FrictionFEnum : return "FrictionF";
218223
case FrictionGammaEnum : return "FrictionGamma";
@@ -251,7 +256,6 @@ const char* EnumToStringx(int en){
251256
case FrontalForcingsSdpolyparamsEnum : return "FrontalForcingsSdpolyparams";
252257
case GrdModelEnum : return "GrdModel";
253258
case GroundinglineFrictionInterpolationEnum : return "GroundinglineFrictionInterpolation";
254-
case GroundinglineIntrusionDistanceEnum : return "GroundinglineIntrusionDistance";
255259
case GroundinglineMeltInterpolationEnum : return "GroundinglineMeltInterpolation";
256260
case GroundinglineMigrationEnum : return "GroundinglineMigration";
257261
case GroundinglineNumRequestedOutputsEnum : return "GroundinglineNumRequestedOutputs";
@@ -913,6 +917,7 @@ const char* EnumToStringx(int en){
913917
case FrontalForcingsSubglacialDischargearmaEnum : return "FrontalForcingsSubglacialDischargearma";
914918
case FrontalForcingsSubglacialDischargeEnum : return "FrontalForcingsSubglacialDischarge";
915919
case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
920+
case GroundinglineIntrusionDistanceEnum : return "GroundinglineIntrusionDistance";
916921
case NGiaEnum : return "NGia";
917922
case NGiaRateEnum : return "NGiaRate";
918923
case UGiaEnum : return "UGia";
@@ -1239,6 +1244,9 @@ const char* EnumToStringx(int en){
12391244
case SmbSummerAlbedoEnum : return "SmbSummerAlbedo";
12401245
case SmbSnowheightEnum : return "SmbSnowheight";
12411246
case SmbTEnum : return "SmbT";
1247+
case SmbT10Enum : return "SmbT10";
1248+
case SmbT30Enum : return "SmbT30";
1249+
case SmbT50Enum : return "SmbT50";
12421250
case SmbTaEnum : return "SmbTa";
12431251
case SmbTampEnum : return "SmbTamp";
12441252
case SmbTeValueEnum : return "SmbTeValue";
@@ -1249,6 +1257,7 @@ const char* EnumToStringx(int en){
12491257
case SmbTemperaturesReconstructedEnum : return "SmbTemperaturesReconstructed";
12501258
case SmbTiniEnum : return "SmbTini";
12511259
case SmbTmeanEnum : return "SmbTmean";
1260+
case SmbTsEnum : return "SmbTs";
12521261
case SmbTzEnum : return "SmbTz";
12531262
case SmbValuesAutoregressionEnum : return "SmbValuesAutoregression";
12541263
case SmbValuesMovingaverageEnum : return "SmbValuesMovingaverage";

src/c/shared/Enum/Enumjl.vim

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ syn keyword juliaConstC FlowequationIsNitscheEnum
204204
syn keyword juliaConstC FeFSNitscheGammaEnum
205205
syn keyword juliaConstC FrictionCouplingEnum
206206
syn keyword juliaConstC FrictionDeltaEnum
207+
syn keyword juliaConstC FrictionDNNEnum
208+
syn keyword juliaConstC FrictionDNNpsEnum
209+
syn keyword juliaConstC FrictionDNNstEnum
210+
syn keyword juliaConstC FrictionDNNInputScaleEnum
211+
syn keyword juliaConstC FrictionDNNOutputScaleEnum
207212
syn keyword juliaConstC FrictionEffectivePressureLimitEnum
208213
syn keyword juliaConstC FrictionFEnum
209214
syn keyword juliaConstC FrictionGammaEnum
@@ -242,7 +247,6 @@ syn keyword juliaConstC FrontalForcingsSdNumberofParamsEnum
242247
syn keyword juliaConstC FrontalForcingsSdpolyparamsEnum
243248
syn keyword juliaConstC GrdModelEnum
244249
syn keyword juliaConstC GroundinglineFrictionInterpolationEnum
245-
syn keyword juliaConstC GroundinglineIntrusionDistanceEnum
246250
syn keyword juliaConstC GroundinglineMeltInterpolationEnum
247251
syn keyword juliaConstC GroundinglineMigrationEnum
248252
syn keyword juliaConstC GroundinglineNumRequestedOutputsEnum
@@ -904,6 +908,7 @@ syn keyword juliaConstC FrontalForcingsBasinIdEnum
904908
syn keyword juliaConstC FrontalForcingsSubglacialDischargearmaEnum
905909
syn keyword juliaConstC FrontalForcingsSubglacialDischargeEnum
906910
syn keyword juliaConstC GeometryHydrostaticRatioEnum
911+
syn keyword juliaConstC GroundinglineIntrusionDistanceEnum
907912
syn keyword juliaConstC NGiaEnum
908913
syn keyword juliaConstC NGiaRateEnum
909914
syn keyword juliaConstC UGiaEnum
@@ -1230,6 +1235,9 @@ syn keyword juliaConstC SmbSummerMeltEnum
12301235
syn keyword juliaConstC SmbSummerAlbedoEnum
12311236
syn keyword juliaConstC SmbSnowheightEnum
12321237
syn keyword juliaConstC SmbTEnum
1238+
syn keyword juliaConstC SmbT10Enum
1239+
syn keyword juliaConstC SmbT30Enum
1240+
syn keyword juliaConstC SmbT50Enum
12331241
syn keyword juliaConstC SmbTaEnum
12341242
syn keyword juliaConstC SmbTampEnum
12351243
syn keyword juliaConstC SmbTeValueEnum
@@ -1240,6 +1248,7 @@ syn keyword juliaConstC SmbTemperaturesPresentdayEnum
12401248
syn keyword juliaConstC SmbTemperaturesReconstructedEnum
12411249
syn keyword juliaConstC SmbTiniEnum
12421250
syn keyword juliaConstC SmbTmeanEnum
1251+
syn keyword juliaConstC SmbTsEnum
12431252
syn keyword juliaConstC SmbTzEnum
12441253
syn keyword juliaConstC SmbValuesAutoregressionEnum
12451254
syn keyword juliaConstC SmbValuesMovingaverageEnum

0 commit comments

Comments
 (0)