From 4ac631330339b7e712c7f038953b26e944afe6a9 Mon Sep 17 00:00:00 2001 From: Tidbit Software <34657535+TidbitSoftware@users.noreply.github.com> Date: Thu, 5 Feb 2026 10:04:42 -0800 Subject: [PATCH 1/4] Need to exclude 550 from testing on Silicon during packaging --- packagers/mac/complete-issm-mac-silicon-binaries-matlab.sh | 2 +- packagers/mac/complete-issm-mac-silicon-binaries-python-3.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packagers/mac/complete-issm-mac-silicon-binaries-matlab.sh b/packagers/mac/complete-issm-mac-silicon-binaries-matlab.sh index 3356f8e7b..b54c5b9ac 100755 --- a/packagers/mac/complete-issm-mac-silicon-binaries-matlab.sh +++ b/packagers/mac/complete-issm-mac-silicon-binaries-matlab.sh @@ -66,7 +66,7 @@ PKG="ISSM-macOS-Silicon-MATLAB" # Name of directory to copy distributable files to VARIANT_REPO_SUBPATH="silicon/matlab" -MATLAB_NROPTIONS="'benchmark','all','exclude',[119,124:126,129,216,234:235,274,362,417:418,420,423,430,433,435,441:442,444:445,448,456,462:464,470:476,508,517,544,546,701:703,808,1101:1110,1201:1208,1301:1304,1401:1402,1601:1602,2002,2004,2006,2010:2013,2020:2021,2052:2053,2085,2090:2092,2110:2113,2424:2425,3001:3300,3480:3481,4001:4100]" # NOTE: Combination of test suites from basic, Dakota, and Solid Earth builds, with tests that require a restart and those that require the JVM excluded +MATLAB_NROPTIONS="'benchmark','all','exclude',[119,124:126,129,216,234:235,274,362,417:418,420,423,430,433,435,441:442,444:445,448,456,462:464,470:476,508,517,544,546,550,701:703,808,1101:1110,1201:1208,1301:1304,1401:1402,1601:1602,2002,2004,2006,2010:2013,2020:2021,2052:2053,2085,2090:2092,2110:2113,2424:2425,3001:3300,3480:3481,4001:4100]" # NOTE: Combination of test suites from basic, Dakota, and Solid Earth builds, with tests that require a restart and those that require the JVM excluded MATLAB_PATH="/Applications/MATLAB_R2023b.app" SIGNING_REPO_BASE_URL="https://issm.ess.uci.edu/svn/issm-macos-signing" SIGNING_REPO_URL="${SIGNING_REPO_BASE_URL}/${VARIANT_REPO_SUBPATH}" diff --git a/packagers/mac/complete-issm-mac-silicon-binaries-python-3.sh b/packagers/mac/complete-issm-mac-silicon-binaries-python-3.sh index 908bef026..137d24679 100755 --- a/packagers/mac/complete-issm-mac-silicon-binaries-python-3.sh +++ b/packagers/mac/complete-issm-mac-silicon-binaries-python-3.sh @@ -66,7 +66,7 @@ PKG="ISSM-macOS-Silicon-Python-3" # Name of directory to copy distributable files to VARIANT_REPO_SUBPATH="silicon/python" -PYTHON_NROPTIONS="--benchmark all --exclude 119 124:126 129 216 234:235 274 362 417:418 420 423 430 433 435 441:442 444:445 448 456 462:464 470:476 508 517 544 546 701:703 808 1101:1110 1201:1208 1301:1304 1401:1402 1601:1602 2002 2004 2006 2010:2013 2020:2021 2052:2053 2085 2090:2092 2110:2113 2424:2425 3001:3300 3480:3481 4001:4100" # NOTE: Combination of test suites from basic, Dakota, and Solid Earth builds, with tests that require a restart and those that require the JVM excluded +PYTHON_NROPTIONS="--benchmark all --exclude 119 124:126 129 216 234:235 274 362 417:418 420 423 430 433 435 441:442 444:445 448 456 462:464 470:476 508 517 544 546 550 701:703 808 1101:1110 1201:1208 1301:1304 1401:1402 1601:1602 2002 2004 2006 2010:2013 2020:2021 2052:2053 2085 2090:2092 2110:2113 2424:2425 3001:3300 3480:3481 4001:4100" # NOTE: Combination of test suites from basic, Dakota, and Solid Earth builds, with tests that require a restart and those that require the JVM excluded SIGNING_REPO_BASE_URL="https://issm.ess.uci.edu/svn/issm-macos-signing" SIGNING_REPO_URL="${SIGNING_REPO_BASE_URL}/${VARIANT_REPO_SUBPATH}" SIGNED_REPO_COPY="./signed" From 17e52455a7377009a3a8536571beefdb9e1c4c70 Mon Sep 17 00:00:00 2001 From: Yinmin Liu <55120383+yinmin-liu@users.noreply.github.com> Date: Mon, 9 Feb 2026 18:19:43 -0500 Subject: [PATCH 2/4] Update lonestar configuration properties --- src/m/classes/clusters/lonestar.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/m/classes/clusters/lonestar.m b/src/m/classes/clusters/lonestar.m index 0bba3edbd..1b3e39b97 100644 --- a/src/m/classes/clusters/lonestar.m +++ b/src/m/classes/clusters/lonestar.m @@ -8,12 +8,12 @@ classdef lonestar properties (SetAccess=public) % {{{ - name = 'ls5.tacc.utexas.edu' + name = 'ls6.tacc.utexas.edu' login = ''; - modules = {'intel/18.0.2' 'gsl'}; + modules = {'intel/24.1' 'impi/21.12' 'gsl/2.8'}; numnodes = 1; cpuspernode = 24; - port = 1099; + port = 0; queue = 'normal'; codepath = ''; executionpath = ''; From c162ca8bb27f9ed193ea52510871c0d4b9dbdce0 Mon Sep 17 00:00:00 2001 From: NJSchlegel <95945328+NJSchlegel@users.noreply.github.com> Date: Wed, 11 Feb 2026 16:36:57 -0500 Subject: [PATCH 3/4] CHG: add Gemb temperature depth outputs, add mean climate to mapping, vectorized lapse rates --- src/c/analyses/SmbAnalysis.cpp | 9 +- src/c/classes/Elements/Element.cpp | 42 ++++-- src/c/shared/Enum/Enum.vim | 4 + src/c/shared/Enum/EnumDefinitions.h | 4 + src/c/shared/Enum/EnumToStringx.cpp | 4 + src/c/shared/Enum/Enumjl.vim | 4 + src/c/shared/Enum/StringToEnumx.cpp | 214 ++++++++++++++-------------- src/c/shared/Enum/issmenums.jl | 12 ++ src/m/classes/SMBgemb.m | 25 ++-- src/m/classes/SMBgemb.py | 22 +-- src/m/solve/listoutputs.m | 4 + test/Archives/Archive258.arch | Bin 24367 -> 24551 bytes test/Archives/Archive259.arch | Bin 24367 -> 24367 bytes test/NightlyRun/test258.m | 12 +- test/NightlyRun/test258.py | 12 +- test/NightlyRun/test259.m | 2 + test/NightlyRun/test259.py | 2 + 17 files changed, 235 insertions(+), 137 deletions(-) diff --git a/src/c/analyses/SmbAnalysis.cpp b/src/c/analyses/SmbAnalysis.cpp index f4ea2e017..3c17be2be 100644 --- a/src/c/analyses/SmbAnalysis.cpp +++ b/src/c/analyses/SmbAnalysis.cpp @@ -402,8 +402,13 @@ void SmbAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int s parameters->AddObject(new DoubleVecParam(SmbMappedforcingelevationEnum,&temp[0],M)); iomodel->DeleteData(temp,"md.smb.mappedforcingelevation"); - parameters->AddObject(iomodel->CopyConstantObject("md.smb.lapseTaValue",SmbLapseTaValueEnum)); - parameters->AddObject(iomodel->CopyConstantObject("md.smb.lapsedlwrfValue",SmbLapsedlwrfValueEnum)); + iomodel->FetchData(&temp,&M,&N,"md.smb.lapseTaValue"); _assert_(N==1); + parameters->AddObject(new DoubleVecParam(SmbLapseTaValueEnum,&temp[0],M)); + iomodel->DeleteData(temp,"md.smb.lapseTaValue"); + iomodel->FetchData(&temp,&M,&N,"md.smb.lapsedlwrfValue"); _assert_(N==1); + parameters->AddObject(new DoubleVecParam(SmbLapsedlwrfValueEnum,&temp[0],M)); + iomodel->DeleteData(temp,"md.smb.lapsedlwrfValue"); + } parameters->AddObject(iomodel->CopyConstantObject("md.smb.aIdx",SmbAIdxEnum)); parameters->AddObject(iomodel->CopyConstantObject("md.smb.eIdx",SmbEIdxEnum)); diff --git a/src/c/classes/Elements/Element.cpp b/src/c/classes/Elements/Element.cpp index 5f87324bb..d675c910f 100644 --- a/src/c/classes/Elements/Element.cpp +++ b/src/c/classes/Elements/Element.cpp @@ -5168,6 +5168,11 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ IssmDouble sumMassAdd=0.0; IssmDouble fac=0.0; IssmDouble sumMass=0.0; + IssmDouble sumH=0.0; + IssmDouble T0m=0.0; + IssmDouble T10m=0.0; + IssmDouble T30m=0.0; + IssmDouble T50m=0.0; IssmDouble dMass=0.0; IssmDouble accsumR=0.0; IssmDouble accsumF=0.0; @@ -5593,8 +5598,11 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ bool isprecipmap=true; parameters->FindParam(&isprecipmap,SmbIsprecipforcingremappedEnum); - parameters->FindParam(&tlapse,SmbLapseTaValueEnum); - parameters->FindParam(&dlwlapse,SmbLapsedlwrfValueEnum); + IssmDouble* tlapse = NULL; + parameters->FindParam(&tlapse,&N,SmbLapseTaValueEnum); _assert_(tlapse); + + IssmDouble* dlwlapse = NULL; + parameters->FindParam(&dlwlapse,&N,SmbLapsedlwrfValueEnum); _assert_(dlwlapse); IssmDouble* elevation = NULL; parameters->FindParam(&elevation,&N,SmbMappedforcingelevationEnum); _assert_(elevation); @@ -5612,9 +5620,11 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ parameters->FindParam(&dsw, Mappedpoint-1, timeinputs, timestepping, dt, SmbDswrfParamEnum); parameters->FindParam(&dswdiff, Mappedpoint-1, timeinputs, timestepping, dt, SmbDswdiffrfParamEnum); - Ta = taparam + (currentsurface - elevation[Mappedpoint-1])*tlapse; - if (fabs(dlwlapse) > Dtol) dlw = fmax(dlwrfparam + (currentsurface - elevation[Mappedpoint-1])*dlwlapse,0.0); - else{ + Ta = taparam + (currentsurface - elevation[Mappedpoint-1])*tlapse[Mappedpoint-1]; + Tmean = Tmean + (currentsurface - elevation[Mappedpoint-1])*tlapse[Mappedpoint-1]; + if (fabs(dlwlapse[Mappedpoint-1]) > Dtol){ + dlw = fmax(dlwrfparam + (currentsurface - elevation[Mappedpoint-1])*dlwlapse[Mappedpoint-1],0.0); + }else{ //adjust downward longwave, holding emissivity equal (Glover et al, 1999) IssmDouble SB = 5.67e-8; // Stefan-Boltzmann constant (W m-2 K-4) IssmDouble effe = 1.; @@ -5622,7 +5632,7 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ dlw = fmax(effe*SB*pow(Ta,4.0),0.0); } - if ( (fabs(dlwlapse) > Dtol) || (fabs(tlapse) > Dtol)){ + if ( (fabs(dlwlapse[Mappedpoint-1]) > Dtol) || (fabs(tlapse[Mappedpoint-1]) > Dtol)){ IssmDouble Rg = 8.314; // gas constant (J mol-1 K-1) IssmDouble dAir = 0.0; // calculated air density [kg/m3] @@ -5638,14 +5648,17 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ //Ding et al., 2019 after Bolton, 1980 //ea37 = rh37*100*6.112.*exp((17.67*(t237-273.15))./(t237-29.65)); rhparam=eaparam/6.112/exp((17.67*(taparam-273.15))/(taparam-29.65)); - eAir=rhparam*6.112*exp((17.67*(Ta-273.15))/(Ta-29.65)); + eAir=fmax(rhparam*6.112*exp((17.67*(Ta-273.15))/(Ta-29.65)),0.0); - if (isprecipmap && (eaparam>0)){ + if (isprecipmap && (eaparam>0) && (eAir>0)){ P=prparam*eAir/eaparam; + C=C*eAir/eaparam; } else P=prparam; xDelete(elevation); + xDelete(tlapse); + xDelete(dlwlapse); } /*}}}*/ @@ -5722,9 +5735,18 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ /*Calculate total system mass:*/ sumMass=0; fac=0; + T0m=0; + T10m=0; + T30m=0; + T50m=0; for(int i=0;i 0) fac += dz[i]*(rho_ice - fmin(d[i],rho_ice)); + if (i==0 || (d[i]0 && sumH <= 50)) T50m = T[i]; + if (i==0 || (d[i]0 && sumH <= 30)) T30m = T[i]; + if (i==0 || (d[i]0 && sumH <= 10)) T10m = T[i]; + if (i==0) T0m = T[i]; } #if defined(_HAVE_AD_) @@ -5835,6 +5857,10 @@ void Element::SmbGemb(IssmDouble timeinputs, int count, int steps){/*{{{*/ this->SetElementInput(SmbMSurfSumEnum,sumMsurf/dt/rho_ice); this->SetElementInput(SmbWAddEnum,sumW/dt); this->SetElementInput(SmbFACEnum,fac/1000.); // output in meters + this->SetElementInput(SmbTsEnum,T0m); // output in K at surface + this->SetElementInput(SmbT10Enum,T10m); // output in K at 10m depth + this->SetElementInput(SmbT30Enum,T30m); // output in K at 10m depth + this->SetElementInput(SmbT50Enum,T50m); // output in K ar 10m depth this->SetElementInput(SmbECDtEnum,EC); /*Free allocations:{{{*/ diff --git a/src/c/shared/Enum/Enum.vim b/src/c/shared/Enum/Enum.vim index 8a081631c..d3900f508 100644 --- a/src/c/shared/Enum/Enum.vim +++ b/src/c/shared/Enum/Enum.vim @@ -1237,6 +1237,9 @@ syn keyword cConstant SmbSummerMeltEnum syn keyword cConstant SmbSummerAlbedoEnum syn keyword cConstant SmbSnowheightEnum syn keyword cConstant SmbTEnum +syn keyword cConstant SmbT10Enum +syn keyword cConstant SmbT30Enum +syn keyword cConstant SmbT50Enum syn keyword cConstant SmbTaEnum syn keyword cConstant SmbTampEnum syn keyword cConstant SmbTeValueEnum @@ -1247,6 +1250,7 @@ syn keyword cConstant SmbTemperaturesPresentdayEnum syn keyword cConstant SmbTemperaturesReconstructedEnum syn keyword cConstant SmbTiniEnum syn keyword cConstant SmbTmeanEnum +syn keyword cConstant SmbTsEnum syn keyword cConstant SmbTzEnum syn keyword cConstant SmbValuesAutoregressionEnum syn keyword cConstant SmbValuesMovingaverageEnum diff --git a/src/c/shared/Enum/EnumDefinitions.h b/src/c/shared/Enum/EnumDefinitions.h index 75b9f07e2..184bc6197 100644 --- a/src/c/shared/Enum/EnumDefinitions.h +++ b/src/c/shared/Enum/EnumDefinitions.h @@ -1234,6 +1234,9 @@ enum definitions{ SmbSummerAlbedoEnum, SmbSnowheightEnum, SmbTEnum, + SmbT10Enum, + SmbT30Enum, + SmbT50Enum, SmbTaEnum, SmbTampEnum, SmbTeValueEnum, @@ -1244,6 +1247,7 @@ enum definitions{ SmbTemperaturesReconstructedEnum, SmbTiniEnum, SmbTmeanEnum, + SmbTsEnum, SmbTzEnum, SmbValuesAutoregressionEnum, SmbValuesMovingaverageEnum, diff --git a/src/c/shared/Enum/EnumToStringx.cpp b/src/c/shared/Enum/EnumToStringx.cpp index b2c9a6e82..e0c1e290b 100644 --- a/src/c/shared/Enum/EnumToStringx.cpp +++ b/src/c/shared/Enum/EnumToStringx.cpp @@ -1239,6 +1239,9 @@ const char* EnumToStringx(int en){ case SmbSummerAlbedoEnum : return "SmbSummerAlbedo"; case SmbSnowheightEnum : return "SmbSnowheight"; case SmbTEnum : return "SmbT"; + case SmbT10Enum : return "SmbT10"; + case SmbT30Enum : return "SmbT30"; + case SmbT50Enum : return "SmbT50"; case SmbTaEnum : return "SmbTa"; case SmbTampEnum : return "SmbTamp"; case SmbTeValueEnum : return "SmbTeValue"; @@ -1249,6 +1252,7 @@ const char* EnumToStringx(int en){ case SmbTemperaturesReconstructedEnum : return "SmbTemperaturesReconstructed"; case SmbTiniEnum : return "SmbTini"; case SmbTmeanEnum : return "SmbTmean"; + case SmbTsEnum : return "SmbTs"; case SmbTzEnum : return "SmbTz"; case SmbValuesAutoregressionEnum : return "SmbValuesAutoregression"; case SmbValuesMovingaverageEnum : return "SmbValuesMovingaverage"; diff --git a/src/c/shared/Enum/Enumjl.vim b/src/c/shared/Enum/Enumjl.vim index 617023921..3a3b32c2f 100644 --- a/src/c/shared/Enum/Enumjl.vim +++ b/src/c/shared/Enum/Enumjl.vim @@ -1230,6 +1230,9 @@ syn keyword juliaConstC SmbSummerMeltEnum syn keyword juliaConstC SmbSummerAlbedoEnum syn keyword juliaConstC SmbSnowheightEnum syn keyword juliaConstC SmbTEnum +syn keyword juliaConstC SmbT10Enum +syn keyword juliaConstC SmbT30Enum +syn keyword juliaConstC SmbT50Enum syn keyword juliaConstC SmbTaEnum syn keyword juliaConstC SmbTampEnum syn keyword juliaConstC SmbTeValueEnum @@ -1240,6 +1243,7 @@ syn keyword juliaConstC SmbTemperaturesPresentdayEnum syn keyword juliaConstC SmbTemperaturesReconstructedEnum syn keyword juliaConstC SmbTiniEnum syn keyword juliaConstC SmbTmeanEnum +syn keyword juliaConstC SmbTsEnum syn keyword juliaConstC SmbTzEnum syn keyword juliaConstC SmbValuesAutoregressionEnum syn keyword juliaConstC SmbValuesMovingaverageEnum diff --git a/src/c/shared/Enum/StringToEnumx.cpp b/src/c/shared/Enum/StringToEnumx.cpp index 1ab351b62..0d795e1a1 100644 --- a/src/c/shared/Enum/StringToEnumx.cpp +++ b/src/c/shared/Enum/StringToEnumx.cpp @@ -1269,6 +1269,9 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"SmbSummerAlbedo")==0) return SmbSummerAlbedoEnum; else if (strcmp(name,"SmbSnowheight")==0) return SmbSnowheightEnum; else if (strcmp(name,"SmbT")==0) return SmbTEnum; + else if (strcmp(name,"SmbT10")==0) return SmbT10Enum; + else if (strcmp(name,"SmbT30")==0) return SmbT30Enum; + else if (strcmp(name,"SmbT50")==0) return SmbT50Enum; else if (strcmp(name,"SmbTa")==0) return SmbTaEnum; else if (strcmp(name,"SmbTamp")==0) return SmbTampEnum; else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum; @@ -1279,6 +1282,7 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum; else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum; else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum; + else if (strcmp(name,"SmbTs")==0) return SmbTsEnum; else if (strcmp(name,"SmbTz")==0) return SmbTzEnum; else if (strcmp(name,"SmbValuesAutoregression")==0) return SmbValuesAutoregressionEnum; else if (strcmp(name,"SmbValuesMovingaverage")==0) return SmbValuesMovingaverageEnum; @@ -1362,14 +1366,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"VyAverage")==0) return VyAverageEnum; else if (strcmp(name,"VyBase")==0) return VyBaseEnum; else if (strcmp(name,"VyDebris")==0) return VyDebrisEnum; - else if (strcmp(name,"Vy")==0) return VyEnum; - else if (strcmp(name,"VyMesh")==0) return VyMeshEnum; - else if (strcmp(name,"VyObs")==0) return VyObsEnum; - else if (strcmp(name,"VyShear")==0) return VyShearEnum; else stage=12; } if(stage==12){ - if (strcmp(name,"VySurface")==0) return VySurfaceEnum; + if (strcmp(name,"Vy")==0) return VyEnum; + else if (strcmp(name,"VyMesh")==0) return VyMeshEnum; + else if (strcmp(name,"VyObs")==0) return VyObsEnum; + else if (strcmp(name,"VyShear")==0) return VyShearEnum; + else if (strcmp(name,"VySurface")==0) return VySurfaceEnum; else if (strcmp(name,"Vz")==0) return VzEnum; else if (strcmp(name,"VzFS")==0) return VzFSEnum; else if (strcmp(name,"VzHO")==0) return VzHOEnum; @@ -1485,14 +1489,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum; else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum; else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum; - else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum; - else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum; - else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum; - else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum; else stage=13; } if(stage==13){ - if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum; + if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum; + else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum; + else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum; + else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum; + else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum; else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum; else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum; else if (strcmp(name,"Outputdefinition101")==0) return Outputdefinition101Enum; @@ -1608,14 +1612,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition219")==0) return Outputdefinition219Enum; else if (strcmp(name,"Outputdefinition220")==0) return Outputdefinition220Enum; else if (strcmp(name,"Outputdefinition221")==0) return Outputdefinition221Enum; - else if (strcmp(name,"Outputdefinition222")==0) return Outputdefinition222Enum; - else if (strcmp(name,"Outputdefinition223")==0) return Outputdefinition223Enum; - else if (strcmp(name,"Outputdefinition224")==0) return Outputdefinition224Enum; - else if (strcmp(name,"Outputdefinition225")==0) return Outputdefinition225Enum; else stage=14; } if(stage==14){ - if (strcmp(name,"Outputdefinition226")==0) return Outputdefinition226Enum; + if (strcmp(name,"Outputdefinition222")==0) return Outputdefinition222Enum; + else if (strcmp(name,"Outputdefinition223")==0) return Outputdefinition223Enum; + else if (strcmp(name,"Outputdefinition224")==0) return Outputdefinition224Enum; + else if (strcmp(name,"Outputdefinition225")==0) return Outputdefinition225Enum; + else if (strcmp(name,"Outputdefinition226")==0) return Outputdefinition226Enum; else if (strcmp(name,"Outputdefinition227")==0) return Outputdefinition227Enum; else if (strcmp(name,"Outputdefinition228")==0) return Outputdefinition228Enum; else if (strcmp(name,"Outputdefinition229")==0) return Outputdefinition229Enum; @@ -1731,14 +1735,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition338")==0) return Outputdefinition338Enum; else if (strcmp(name,"Outputdefinition339")==0) return Outputdefinition339Enum; else if (strcmp(name,"Outputdefinition303")==0) return Outputdefinition303Enum; - else if (strcmp(name,"Outputdefinition340")==0) return Outputdefinition340Enum; - else if (strcmp(name,"Outputdefinition341")==0) return Outputdefinition341Enum; - else if (strcmp(name,"Outputdefinition342")==0) return Outputdefinition342Enum; - else if (strcmp(name,"Outputdefinition343")==0) return Outputdefinition343Enum; else stage=15; } if(stage==15){ - if (strcmp(name,"Outputdefinition344")==0) return Outputdefinition344Enum; + if (strcmp(name,"Outputdefinition340")==0) return Outputdefinition340Enum; + else if (strcmp(name,"Outputdefinition341")==0) return Outputdefinition341Enum; + else if (strcmp(name,"Outputdefinition342")==0) return Outputdefinition342Enum; + else if (strcmp(name,"Outputdefinition343")==0) return Outputdefinition343Enum; + else if (strcmp(name,"Outputdefinition344")==0) return Outputdefinition344Enum; else if (strcmp(name,"Outputdefinition345")==0) return Outputdefinition345Enum; else if (strcmp(name,"Outputdefinition346")==0) return Outputdefinition346Enum; else if (strcmp(name,"Outputdefinition347")==0) return Outputdefinition347Enum; @@ -1854,14 +1858,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition456")==0) return Outputdefinition456Enum; else if (strcmp(name,"Outputdefinition457")==0) return Outputdefinition457Enum; else if (strcmp(name,"Outputdefinition458")==0) return Outputdefinition458Enum; - else if (strcmp(name,"Outputdefinition459")==0) return Outputdefinition459Enum; - else if (strcmp(name,"Outputdefinition405")==0) return Outputdefinition405Enum; - else if (strcmp(name,"Outputdefinition460")==0) return Outputdefinition460Enum; - else if (strcmp(name,"Outputdefinition461")==0) return Outputdefinition461Enum; else stage=16; } if(stage==16){ - if (strcmp(name,"Outputdefinition462")==0) return Outputdefinition462Enum; + if (strcmp(name,"Outputdefinition459")==0) return Outputdefinition459Enum; + else if (strcmp(name,"Outputdefinition405")==0) return Outputdefinition405Enum; + else if (strcmp(name,"Outputdefinition460")==0) return Outputdefinition460Enum; + else if (strcmp(name,"Outputdefinition461")==0) return Outputdefinition461Enum; + else if (strcmp(name,"Outputdefinition462")==0) return Outputdefinition462Enum; else if (strcmp(name,"Outputdefinition463")==0) return Outputdefinition463Enum; else if (strcmp(name,"Outputdefinition464")==0) return Outputdefinition464Enum; else if (strcmp(name,"Outputdefinition465")==0) return Outputdefinition465Enum; @@ -1977,14 +1981,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition574")==0) return Outputdefinition574Enum; else if (strcmp(name,"Outputdefinition575")==0) return Outputdefinition575Enum; else if (strcmp(name,"Outputdefinition576")==0) return Outputdefinition576Enum; - else if (strcmp(name,"Outputdefinition577")==0) return Outputdefinition577Enum; - else if (strcmp(name,"Outputdefinition578")==0) return Outputdefinition578Enum; - else if (strcmp(name,"Outputdefinition579")==0) return Outputdefinition579Enum; - else if (strcmp(name,"Outputdefinition507")==0) return Outputdefinition507Enum; else stage=17; } if(stage==17){ - if (strcmp(name,"Outputdefinition580")==0) return Outputdefinition580Enum; + if (strcmp(name,"Outputdefinition577")==0) return Outputdefinition577Enum; + else if (strcmp(name,"Outputdefinition578")==0) return Outputdefinition578Enum; + else if (strcmp(name,"Outputdefinition579")==0) return Outputdefinition579Enum; + else if (strcmp(name,"Outputdefinition507")==0) return Outputdefinition507Enum; + else if (strcmp(name,"Outputdefinition580")==0) return Outputdefinition580Enum; else if (strcmp(name,"Outputdefinition581")==0) return Outputdefinition581Enum; else if (strcmp(name,"Outputdefinition582")==0) return Outputdefinition582Enum; else if (strcmp(name,"Outputdefinition583")==0) return Outputdefinition583Enum; @@ -2100,14 +2104,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition692")==0) return Outputdefinition692Enum; else if (strcmp(name,"Outputdefinition693")==0) return Outputdefinition693Enum; else if (strcmp(name,"Outputdefinition694")==0) return Outputdefinition694Enum; - else if (strcmp(name,"Outputdefinition695")==0) return Outputdefinition695Enum; - else if (strcmp(name,"Outputdefinition696")==0) return Outputdefinition696Enum; - else if (strcmp(name,"Outputdefinition697")==0) return Outputdefinition697Enum; - else if (strcmp(name,"Outputdefinition698")==0) return Outputdefinition698Enum; else stage=18; } if(stage==18){ - if (strcmp(name,"Outputdefinition699")==0) return Outputdefinition699Enum; + if (strcmp(name,"Outputdefinition695")==0) return Outputdefinition695Enum; + else if (strcmp(name,"Outputdefinition696")==0) return Outputdefinition696Enum; + else if (strcmp(name,"Outputdefinition697")==0) return Outputdefinition697Enum; + else if (strcmp(name,"Outputdefinition698")==0) return Outputdefinition698Enum; + else if (strcmp(name,"Outputdefinition699")==0) return Outputdefinition699Enum; else if (strcmp(name,"Outputdefinition609")==0) return Outputdefinition609Enum; else if (strcmp(name,"Outputdefinition700")==0) return Outputdefinition700Enum; else if (strcmp(name,"Outputdefinition701")==0) return Outputdefinition701Enum; @@ -2223,14 +2227,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition819")==0) return Outputdefinition819Enum; else if (strcmp(name,"Outputdefinition820")==0) return Outputdefinition820Enum; else if (strcmp(name,"Outputdefinition821")==0) return Outputdefinition821Enum; - else if (strcmp(name,"Outputdefinition822")==0) return Outputdefinition822Enum; - else if (strcmp(name,"Outputdefinition823")==0) return Outputdefinition823Enum; - else if (strcmp(name,"Outputdefinition824")==0) return Outputdefinition824Enum; - else if (strcmp(name,"Outputdefinition825")==0) return Outputdefinition825Enum; else stage=19; } if(stage==19){ - if (strcmp(name,"Outputdefinition826")==0) return Outputdefinition826Enum; + if (strcmp(name,"Outputdefinition822")==0) return Outputdefinition822Enum; + else if (strcmp(name,"Outputdefinition823")==0) return Outputdefinition823Enum; + else if (strcmp(name,"Outputdefinition824")==0) return Outputdefinition824Enum; + else if (strcmp(name,"Outputdefinition825")==0) return Outputdefinition825Enum; + else if (strcmp(name,"Outputdefinition826")==0) return Outputdefinition826Enum; else if (strcmp(name,"Outputdefinition827")==0) return Outputdefinition827Enum; else if (strcmp(name,"Outputdefinition828")==0) return Outputdefinition828Enum; else if (strcmp(name,"Outputdefinition829")==0) return Outputdefinition829Enum; @@ -2346,14 +2350,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition938")==0) return Outputdefinition938Enum; else if (strcmp(name,"Outputdefinition939")==0) return Outputdefinition939Enum; else if (strcmp(name,"Outputdefinition903")==0) return Outputdefinition903Enum; - else if (strcmp(name,"Outputdefinition940")==0) return Outputdefinition940Enum; - else if (strcmp(name,"Outputdefinition941")==0) return Outputdefinition941Enum; - else if (strcmp(name,"Outputdefinition942")==0) return Outputdefinition942Enum; - else if (strcmp(name,"Outputdefinition943")==0) return Outputdefinition943Enum; else stage=20; } if(stage==20){ - if (strcmp(name,"Outputdefinition944")==0) return Outputdefinition944Enum; + if (strcmp(name,"Outputdefinition940")==0) return Outputdefinition940Enum; + else if (strcmp(name,"Outputdefinition941")==0) return Outputdefinition941Enum; + else if (strcmp(name,"Outputdefinition942")==0) return Outputdefinition942Enum; + else if (strcmp(name,"Outputdefinition943")==0) return Outputdefinition943Enum; + else if (strcmp(name,"Outputdefinition944")==0) return Outputdefinition944Enum; else if (strcmp(name,"Outputdefinition945")==0) return Outputdefinition945Enum; else if (strcmp(name,"Outputdefinition946")==0) return Outputdefinition946Enum; else if (strcmp(name,"Outputdefinition947")==0) return Outputdefinition947Enum; @@ -2469,14 +2473,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1056")==0) return Outputdefinition1056Enum; else if (strcmp(name,"Outputdefinition1057")==0) return Outputdefinition1057Enum; else if (strcmp(name,"Outputdefinition1058")==0) return Outputdefinition1058Enum; - else if (strcmp(name,"Outputdefinition1059")==0) return Outputdefinition1059Enum; - else if (strcmp(name,"Outputdefinition1005")==0) return Outputdefinition1005Enum; - else if (strcmp(name,"Outputdefinition1060")==0) return Outputdefinition1060Enum; - else if (strcmp(name,"Outputdefinition1061")==0) return Outputdefinition1061Enum; else stage=21; } if(stage==21){ - if (strcmp(name,"Outputdefinition1062")==0) return Outputdefinition1062Enum; + if (strcmp(name,"Outputdefinition1059")==0) return Outputdefinition1059Enum; + else if (strcmp(name,"Outputdefinition1005")==0) return Outputdefinition1005Enum; + else if (strcmp(name,"Outputdefinition1060")==0) return Outputdefinition1060Enum; + else if (strcmp(name,"Outputdefinition1061")==0) return Outputdefinition1061Enum; + else if (strcmp(name,"Outputdefinition1062")==0) return Outputdefinition1062Enum; else if (strcmp(name,"Outputdefinition1063")==0) return Outputdefinition1063Enum; else if (strcmp(name,"Outputdefinition1064")==0) return Outputdefinition1064Enum; else if (strcmp(name,"Outputdefinition1065")==0) return Outputdefinition1065Enum; @@ -2592,14 +2596,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1174")==0) return Outputdefinition1174Enum; else if (strcmp(name,"Outputdefinition1175")==0) return Outputdefinition1175Enum; else if (strcmp(name,"Outputdefinition1176")==0) return Outputdefinition1176Enum; - else if (strcmp(name,"Outputdefinition1177")==0) return Outputdefinition1177Enum; - else if (strcmp(name,"Outputdefinition1178")==0) return Outputdefinition1178Enum; - else if (strcmp(name,"Outputdefinition1179")==0) return Outputdefinition1179Enum; - else if (strcmp(name,"Outputdefinition1107")==0) return Outputdefinition1107Enum; else stage=22; } if(stage==22){ - if (strcmp(name,"Outputdefinition1180")==0) return Outputdefinition1180Enum; + if (strcmp(name,"Outputdefinition1177")==0) return Outputdefinition1177Enum; + else if (strcmp(name,"Outputdefinition1178")==0) return Outputdefinition1178Enum; + else if (strcmp(name,"Outputdefinition1179")==0) return Outputdefinition1179Enum; + else if (strcmp(name,"Outputdefinition1107")==0) return Outputdefinition1107Enum; + else if (strcmp(name,"Outputdefinition1180")==0) return Outputdefinition1180Enum; else if (strcmp(name,"Outputdefinition1181")==0) return Outputdefinition1181Enum; else if (strcmp(name,"Outputdefinition1182")==0) return Outputdefinition1182Enum; else if (strcmp(name,"Outputdefinition1183")==0) return Outputdefinition1183Enum; @@ -2715,14 +2719,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1292")==0) return Outputdefinition1292Enum; else if (strcmp(name,"Outputdefinition1293")==0) return Outputdefinition1293Enum; else if (strcmp(name,"Outputdefinition1294")==0) return Outputdefinition1294Enum; - else if (strcmp(name,"Outputdefinition1295")==0) return Outputdefinition1295Enum; - else if (strcmp(name,"Outputdefinition1296")==0) return Outputdefinition1296Enum; - else if (strcmp(name,"Outputdefinition1297")==0) return Outputdefinition1297Enum; - else if (strcmp(name,"Outputdefinition1298")==0) return Outputdefinition1298Enum; else stage=23; } if(stage==23){ - if (strcmp(name,"Outputdefinition1299")==0) return Outputdefinition1299Enum; + if (strcmp(name,"Outputdefinition1295")==0) return Outputdefinition1295Enum; + else if (strcmp(name,"Outputdefinition1296")==0) return Outputdefinition1296Enum; + else if (strcmp(name,"Outputdefinition1297")==0) return Outputdefinition1297Enum; + else if (strcmp(name,"Outputdefinition1298")==0) return Outputdefinition1298Enum; + else if (strcmp(name,"Outputdefinition1299")==0) return Outputdefinition1299Enum; else if (strcmp(name,"Outputdefinition1209")==0) return Outputdefinition1209Enum; else if (strcmp(name,"Outputdefinition1300")==0) return Outputdefinition1300Enum; else if (strcmp(name,"Outputdefinition1301")==0) return Outputdefinition1301Enum; @@ -2838,14 +2842,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1419")==0) return Outputdefinition1419Enum; else if (strcmp(name,"Outputdefinition1420")==0) return Outputdefinition1420Enum; else if (strcmp(name,"Outputdefinition1421")==0) return Outputdefinition1421Enum; - else if (strcmp(name,"Outputdefinition1422")==0) return Outputdefinition1422Enum; - else if (strcmp(name,"Outputdefinition1423")==0) return Outputdefinition1423Enum; - else if (strcmp(name,"Outputdefinition1424")==0) return Outputdefinition1424Enum; - else if (strcmp(name,"Outputdefinition1425")==0) return Outputdefinition1425Enum; else stage=24; } if(stage==24){ - if (strcmp(name,"Outputdefinition1426")==0) return Outputdefinition1426Enum; + if (strcmp(name,"Outputdefinition1422")==0) return Outputdefinition1422Enum; + else if (strcmp(name,"Outputdefinition1423")==0) return Outputdefinition1423Enum; + else if (strcmp(name,"Outputdefinition1424")==0) return Outputdefinition1424Enum; + else if (strcmp(name,"Outputdefinition1425")==0) return Outputdefinition1425Enum; + else if (strcmp(name,"Outputdefinition1426")==0) return Outputdefinition1426Enum; else if (strcmp(name,"Outputdefinition1427")==0) return Outputdefinition1427Enum; else if (strcmp(name,"Outputdefinition1428")==0) return Outputdefinition1428Enum; else if (strcmp(name,"Outputdefinition1429")==0) return Outputdefinition1429Enum; @@ -2961,14 +2965,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1538")==0) return Outputdefinition1538Enum; else if (strcmp(name,"Outputdefinition1539")==0) return Outputdefinition1539Enum; else if (strcmp(name,"Outputdefinition1503")==0) return Outputdefinition1503Enum; - else if (strcmp(name,"Outputdefinition1540")==0) return Outputdefinition1540Enum; - else if (strcmp(name,"Outputdefinition1541")==0) return Outputdefinition1541Enum; - else if (strcmp(name,"Outputdefinition1542")==0) return Outputdefinition1542Enum; - else if (strcmp(name,"Outputdefinition1543")==0) return Outputdefinition1543Enum; else stage=25; } if(stage==25){ - if (strcmp(name,"Outputdefinition1544")==0) return Outputdefinition1544Enum; + if (strcmp(name,"Outputdefinition1540")==0) return Outputdefinition1540Enum; + else if (strcmp(name,"Outputdefinition1541")==0) return Outputdefinition1541Enum; + else if (strcmp(name,"Outputdefinition1542")==0) return Outputdefinition1542Enum; + else if (strcmp(name,"Outputdefinition1543")==0) return Outputdefinition1543Enum; + else if (strcmp(name,"Outputdefinition1544")==0) return Outputdefinition1544Enum; else if (strcmp(name,"Outputdefinition1545")==0) return Outputdefinition1545Enum; else if (strcmp(name,"Outputdefinition1546")==0) return Outputdefinition1546Enum; else if (strcmp(name,"Outputdefinition1547")==0) return Outputdefinition1547Enum; @@ -3084,14 +3088,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1656")==0) return Outputdefinition1656Enum; else if (strcmp(name,"Outputdefinition1657")==0) return Outputdefinition1657Enum; else if (strcmp(name,"Outputdefinition1658")==0) return Outputdefinition1658Enum; - else if (strcmp(name,"Outputdefinition1659")==0) return Outputdefinition1659Enum; - else if (strcmp(name,"Outputdefinition1605")==0) return Outputdefinition1605Enum; - else if (strcmp(name,"Outputdefinition1660")==0) return Outputdefinition1660Enum; - else if (strcmp(name,"Outputdefinition1661")==0) return Outputdefinition1661Enum; else stage=26; } if(stage==26){ - if (strcmp(name,"Outputdefinition1662")==0) return Outputdefinition1662Enum; + if (strcmp(name,"Outputdefinition1659")==0) return Outputdefinition1659Enum; + else if (strcmp(name,"Outputdefinition1605")==0) return Outputdefinition1605Enum; + else if (strcmp(name,"Outputdefinition1660")==0) return Outputdefinition1660Enum; + else if (strcmp(name,"Outputdefinition1661")==0) return Outputdefinition1661Enum; + else if (strcmp(name,"Outputdefinition1662")==0) return Outputdefinition1662Enum; else if (strcmp(name,"Outputdefinition1663")==0) return Outputdefinition1663Enum; else if (strcmp(name,"Outputdefinition1664")==0) return Outputdefinition1664Enum; else if (strcmp(name,"Outputdefinition1665")==0) return Outputdefinition1665Enum; @@ -3207,14 +3211,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1774")==0) return Outputdefinition1774Enum; else if (strcmp(name,"Outputdefinition1775")==0) return Outputdefinition1775Enum; else if (strcmp(name,"Outputdefinition1776")==0) return Outputdefinition1776Enum; - else if (strcmp(name,"Outputdefinition1777")==0) return Outputdefinition1777Enum; - else if (strcmp(name,"Outputdefinition1778")==0) return Outputdefinition1778Enum; - else if (strcmp(name,"Outputdefinition1779")==0) return Outputdefinition1779Enum; - else if (strcmp(name,"Outputdefinition1707")==0) return Outputdefinition1707Enum; else stage=27; } if(stage==27){ - if (strcmp(name,"Outputdefinition1780")==0) return Outputdefinition1780Enum; + if (strcmp(name,"Outputdefinition1777")==0) return Outputdefinition1777Enum; + else if (strcmp(name,"Outputdefinition1778")==0) return Outputdefinition1778Enum; + else if (strcmp(name,"Outputdefinition1779")==0) return Outputdefinition1779Enum; + else if (strcmp(name,"Outputdefinition1707")==0) return Outputdefinition1707Enum; + else if (strcmp(name,"Outputdefinition1780")==0) return Outputdefinition1780Enum; else if (strcmp(name,"Outputdefinition1781")==0) return Outputdefinition1781Enum; else if (strcmp(name,"Outputdefinition1782")==0) return Outputdefinition1782Enum; else if (strcmp(name,"Outputdefinition1783")==0) return Outputdefinition1783Enum; @@ -3330,14 +3334,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Outputdefinition1892")==0) return Outputdefinition1892Enum; else if (strcmp(name,"Outputdefinition1893")==0) return Outputdefinition1893Enum; else if (strcmp(name,"Outputdefinition1894")==0) return Outputdefinition1894Enum; - else if (strcmp(name,"Outputdefinition1895")==0) return Outputdefinition1895Enum; - else if (strcmp(name,"Outputdefinition1896")==0) return Outputdefinition1896Enum; - else if (strcmp(name,"Outputdefinition1897")==0) return Outputdefinition1897Enum; - else if (strcmp(name,"Outputdefinition1898")==0) return Outputdefinition1898Enum; else stage=28; } if(stage==28){ - if (strcmp(name,"Outputdefinition1899")==0) return Outputdefinition1899Enum; + if (strcmp(name,"Outputdefinition1895")==0) return Outputdefinition1895Enum; + else if (strcmp(name,"Outputdefinition1896")==0) return Outputdefinition1896Enum; + else if (strcmp(name,"Outputdefinition1897")==0) return Outputdefinition1897Enum; + else if (strcmp(name,"Outputdefinition1898")==0) return Outputdefinition1898Enum; + else if (strcmp(name,"Outputdefinition1899")==0) return Outputdefinition1899Enum; else if (strcmp(name,"Outputdefinition1809")==0) return Outputdefinition1809Enum; else if (strcmp(name,"Outputdefinition1900")==0) return Outputdefinition1900Enum; else if (strcmp(name,"Outputdefinition1901")==0) return Outputdefinition1901Enum; @@ -3453,14 +3457,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum; else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; - else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; - else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; - else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum; - else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum; else stage=29; } if(stage==29){ - if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum; + if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; + else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; + else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum; + else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum; + else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum; else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum; else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum; else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum; @@ -3576,14 +3580,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"Gradient2")==0) return Gradient2Enum; else if (strcmp(name,"Gradient3")==0) return Gradient3Enum; else if (strcmp(name,"Gradient4")==0) return Gradient4Enum; - else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum; - else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum; - else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum; - else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum; else stage=30; } if(stage==30){ - if (strcmp(name,"Gset")==0) return GsetEnum; + if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum; + else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum; + else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum; + else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum; + else if (strcmp(name,"Gset")==0) return GsetEnum; else if (strcmp(name,"Gsl")==0) return GslEnum; else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum; else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum; @@ -3699,14 +3703,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum; else if (strcmp(name,"Mpi")==0) return MpiEnum; else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; - else if (strcmp(name,"Mumps")==0) return MumpsEnum; - else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum; - else if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum; - else if (strcmp(name,"Nodal")==0) return NodalEnum; else stage=31; } if(stage==31){ - if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum; + if (strcmp(name,"Mumps")==0) return MumpsEnum; + else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum; + else if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum; + else if (strcmp(name,"Nodal")==0) return NodalEnum; + else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum; else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum; else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum; else if (strcmp(name,"None")==0) return NoneEnum; @@ -3822,14 +3826,14 @@ int StringToEnumx(const char* name,bool notfounderror){ else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum; else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum; else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum; - else if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum; - else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum; - else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum; - else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum; else stage=32; } if(stage==32){ - if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum; + if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum; + else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum; + else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum; + else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum; + else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum; else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum; else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum; else if (strcmp(name,"TotalSmbRefreeze")==0) return TotalSmbRefreezeEnum; diff --git a/src/c/shared/Enum/issmenums.jl b/src/c/shared/Enum/issmenums.jl index 25158c48a..54077ea1a 100644 --- a/src/c/shared/Enum/issmenums.jl +++ b/src/c/shared/Enum/issmenums.jl @@ -1226,6 +1226,9 @@ SmbSummerAlbedoEnum SmbSnowheightEnum SmbTEnum + SmbT10Enum + SmbT30Enum + SmbT50Enum SmbTaEnum SmbTampEnum SmbTeValueEnum @@ -1236,6 +1239,7 @@ SmbTemperaturesReconstructedEnum SmbTiniEnum SmbTmeanEnum + SmbTsEnum SmbTzEnum SmbValuesAutoregressionEnum SmbValuesMovingaverageEnum @@ -4992,6 +4996,9 @@ function EnumToString(enum::IssmEnum) if(enum==SmbSummerAlbedoEnum) return "SmbSummerAlbedo" end if(enum==SmbSnowheightEnum) return "SmbSnowheight" end if(enum==SmbTEnum) return "SmbT" end + if(enum==SmbT10Enum) return "SmbT10" end + if(enum==SmbT30Enum) return "SmbT30" end + if(enum==SmbT50Enum) return "SmbT50" end if(enum==SmbTaEnum) return "SmbTa" end if(enum==SmbTampEnum) return "SmbTamp" end if(enum==SmbTeValueEnum) return "SmbTeValue" end @@ -5002,6 +5009,7 @@ function EnumToString(enum::IssmEnum) if(enum==SmbTemperaturesReconstructedEnum) return "SmbTemperaturesReconstructed" end if(enum==SmbTiniEnum) return "SmbTini" end if(enum==SmbTmeanEnum) return "SmbTmean" end + if(enum==SmbTsEnum) return "SmbTs" end if(enum==SmbTzEnum) return "SmbTz" end if(enum==SmbValuesAutoregressionEnum) return "SmbValuesAutoregression" end if(enum==SmbValuesMovingaverageEnum) return "SmbValuesMovingaverage" end @@ -8758,6 +8766,9 @@ function StringToEnum(name::String) if(name=="SmbSummerAlbedo") return SmbSummerAlbedoEnum end if(name=="SmbSnowheight") return SmbSnowheightEnum end if(name=="SmbT") return SmbTEnum end + if(name=="SmbT10") return SmbT10Enum end + if(name=="SmbT30") return SmbT30Enum end + if(name=="SmbT50") return SmbT50Enum end if(name=="SmbTa") return SmbTaEnum end if(name=="SmbTamp") return SmbTampEnum end if(name=="SmbTeValue") return SmbTeValueEnum end @@ -8768,6 +8779,7 @@ function StringToEnum(name::String) if(name=="SmbTemperaturesReconstructed") return SmbTemperaturesReconstructedEnum end if(name=="SmbTini") return SmbTiniEnum end if(name=="SmbTmean") return SmbTmeanEnum end + if(name=="SmbTs") return SmbTsEnum end if(name=="SmbTz") return SmbTzEnum end if(name=="SmbValuesAutoregression") return SmbValuesAutoregressionEnum end if(name=="SmbValuesMovingaverage") return SmbValuesMovingaverageEnum end diff --git a/src/m/classes/SMBgemb.m b/src/m/classes/SMBgemb.m index 66cbece71..7884b9408 100644 --- a/src/m/classes/SMBgemb.m +++ b/src/m/classes/SMBgemb.m @@ -52,9 +52,10 @@ mappedforcingelevation = NaN; %The elevation of each mapped forcing location (m above sea level). Of size number %of forcing points. Use if ismappedforcing is true. lapseTaValue = NaN; %Temperature lapse rate if forcing has different grid and should be remapped. Use if ismappedforcing is true. - % (Default value is -0.006 K m-1.) + % (Default value is -0.006 K m-1., vector of mapping points) lapsedlwrfValue = NaN; %Longwave down lapse rate if forcing has different grid and should be remapped. Use if ismappedforcing is true. - % If set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1.) + % Where set to 0, dlwrf will scale with a constant effective atmospheric emissivity. + % (Default value is -0.032 W m-2 m-1., vector of mapping points) % Initialization of snow properties Dzini = NaN; %cell depth (m) @@ -224,8 +225,8 @@ function disp(self) % {{{ fielddisplay(self,'mappedforcingpoint','Mapping of which forcing point will map to each mesh element for ismappedforcing option (integer). Size number of elements.'); fielddisplay(self,'mappedforcingelevation','The elevation of each mapped forcing location (m above sea level) for ismappedforcing option. Size number of forcing points.'); - fielddisplay(self,'lapseTaValue','Temperature lapse rate if forcing has different grid and should be remapped for ismappedforcing option. (Default value is -0.006 K m-1.)'); - fielddisplay(self,'lapsedlwrfValue','Longwave down lapse rate if forcing has different grid and should be remapped for ismappedforcing option. If set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1.)'); + fielddisplay(self,'lapseTaValue','Temperature lapse rate of each mapped forcing location, if forcing has different grid and should be remapped for ismappedforcing option. (Default value is -0.006 K m-1, vector of mapping points)'); + fielddisplay(self,'lapsedlwrfValue','Longwave down lapse rate of each mapped forcing location, if forcing has different grid and should be remapped for ismappedforcing option. Where set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1, vector of mapping points)'); %snow properties init fielddisplay(self,'Dzini','Initial cell depth when restart [m]'); @@ -295,6 +296,8 @@ function disp(self) % {{{ self.P=project3d(md,'vector',self.P,'type','element'); self.eAir=project3d(md,'vector',self.eAir,'type','element'); self.pAir=project3d(md,'vector',self.pAir,'type','element'); + self.C=project3d(md,'vector',self.C,'type','element'); + self.Tmean=project3d(md,'vector',self.Tmean,'type','element'); end if ~isnan(self.Dzini) @@ -467,8 +470,14 @@ function disp(self) % {{{ if (self.ismappedforcing) md = checkfield(md,'fieldname','smb.mappedforcingpoint','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>',0,'<=',sizeta(1)-1); md = checkfield(md,'fieldname','smb.mappedforcingelevation','size',[sizeta(1)-1 1],'NaN',1,'Inf',1); - md = checkfield(md,'fieldname','smb.lapseTaValue','NaN',1,'Inf',1); - md = checkfield(md,'fieldname','smb.lapsedlwrfValue','NaN',1,'Inf',1); + if prod(size(self.lapseTaValue))==1 + disp('WARNING:smb.lapseTaValue is now a vector of mapped elements. Set to md.smb.lapseTaValue*ones(size(md.smb.mappedforcingelevation)).'); + end + if prod(size(self.lapsedlwrfValue))==1 + disp('WARNING:smb.lapsedlwrfValue is now a vector of mapped elements. Set to md.smb.lapsedlwrfValue*ones(size(md.smb.mappedforcingelevation)).'); + end + md = checkfield(md,'fieldname','smb.lapseTaValue','size',[sizeta(1)-1 1],'NaN',1,'Inf',1); + md = checkfield(md,'fieldname','smb.lapsedlwrfValue','size',[sizeta(1)-1 1], 'NaN',1,'Inf',1); end md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4]); @@ -607,8 +616,8 @@ function marshall(self,prefix,md,fid) % {{{ if (self.ismappedforcing) WriteData(fid,prefix,'object',self,'class','smb','fieldname','mappedforcingpoint','format','IntMat','mattype',2); WriteData(fid,prefix,'object',self,'class','smb','fieldname','mappedforcingelevation','format','DoubleMat','mattype',3); - WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapseTaValue','format','Double'); - WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapsedlwrfValue','format','Double'); + WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapseTaValue','format','DoubleMat','mattype',3); + WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapsedlwrfValue','format','DoubleMat','mattype',3); end %figure out dt from forcings: diff --git a/src/m/classes/SMBgemb.py b/src/m/classes/SMBgemb.py index dad4ab10f..ed05e7407 100644 --- a/src/m/classes/SMBgemb.py +++ b/src/m/classes/SMBgemb.py @@ -56,8 +56,8 @@ def __init__(self, *args): # {{{ self.dulwrfValue = np.nan #Delta with which to perturb the long wave radiation upwards. Use if isdeltaLWup is true. self.mappedforcingpoint = np.nan #Mapping of which forcing point will map to each mesh element (integer). Of size number of elements. Use if ismappedforcing is true. self.mappedforcingelevation = np.nan #The elevation of each mapped forcing location (m above sea level). Of size number of forcing points. Use if ismappedforcing is true. - self.lapseTaValue = np.nan #Temperature lapse rate if forcing has different grid and should be remapped. Use if ismappedforcing is true. (Default value is -0.006 K m-1.) - self.lapsedlwrfValue = np.nan #Longwave down lapse rate if forcing has different grid and should be remapped. Use if ismappedforcing is true. If set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1.) + self.lapseTaValue = np.nan #Temperature lapse rate if forcing has different grid and should be remapped. Use if ismappedforcing is true. (Default value is -0.006 K m-1., vector of mapping points) + self.lapsedlwrfValue = np.nan #Longwave down lapse rate if forcing has different grid and should be remapped. Use if ismappedforcing is true. Where set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1., vector of mapping points) # Initialization of snow properties self.Dzini = np.nan # cell depth (m) @@ -224,8 +224,8 @@ def __repr__(self): # {{{ s += '{}\n'.format(fielddisplay(self,'mappedforcingpoint','Mapping of which forcing point will map to each mesh element for ismappedforcing option (integer). Size number of elements.')) s += '{}\n'.format(fielddisplay(self,'mappedforcingelevation','The elevation of each mapped forcing location (m above sea level) for ismappedforcing option. Size number of forcing points.')) - s += '{}\n'.format(fielddisplay(self,'lapseTaValue','Temperature lapse rate if forcing has different grid and should be remapped for ismappedforcing option. (Default value is -0.006 K m-1.)')) - s += '{}\n'.format(fielddisplay(self,'lapsedlwrfValue','Longwave down lapse rate if forcing has different grid and should be remapped for ismappedforcing option. If set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1.)')) + s += '{}\n'.format(fielddisplay(self,'lapseTaValue','Temperature lapse rate of each mapped forcing location, if forcing has different grid and should be remapped for ismappedforcing option. (Default value is -0.006 K m-1, vector of mapping points)')) + s += '{}\n'.format(fielddisplay(self,'lapsedlwrfValue','Longwave down lapse rate of each mapped forcing location if forcing has different grid and should be remapped for ismappedforcing option. Where set to 0, dlwrf will scale with a constant effective atmospheric emissivity. (Default value is -0.032 W m-2 m-1., vector of mapping points)')) # Snow properties init s += '{}\n'.format(fielddisplay(self, 'Dzini', 'Initial cell depth when restart [m]')) @@ -450,8 +450,14 @@ def checkconsistency(self, md, solution, analyses): # {{{ if self.ismappedforcing: md = checkfield(md, 'fieldname', 'smb.mappedforcingpoint', 'size',[md.mesh.numberofelements], 'NaN', 1, 'Inf', 1, '>', 0, '<=' ,sizeta[0]-1) md = checkfield(md, 'fieldname', 'smb.mappedforcingelevation', 'size', [sizeta[0]-1], 'NaN', 1, 'Inf', 1) - md = checkfield(md, 'fieldname', 'smb.lapseTaValue', 'NaN', 1, 'Inf', 1) - md = checkfield(md, 'fieldname', 'smb.lapsedlwrfValue', 'NaN', 1, 'Inf', 1) + if np.prod(np.shape(self.lapseTaValue))==1: + print("WARNING:smb.lapseTaValue is now a vector of mapped elements. Set to md.smb.lapseTaValue*ones.np(np.shape(md.smb.mappedforcingelevation)).") + + if np.prod(np.shape(self.lapsedlwrfValue))==1: + print("WARNING:smb.lapsedlwrfValue is now a vector of mapped elements. Set to md.smb.lapsedlwrfValue*np.ones(np.shape(md.smb.mappedforcingelevation)).") + + md = checkfield(md, 'fieldname', 'smb.lapseTaValue', 'size',[sizeta[0]-1],'NaN',1,'Inf',1); + md = checkfield(md, 'fieldname', 'smb.lapsedlwrfValue', 'size',[sizeta[0]-1], 'NaN',1,'Inf',1); md = checkfield(md, 'fieldname', 'smb.aIdx', 'NaN', 1, 'Inf', 1, 'values', [0, 1, 2, 3, 4]) md = checkfield(md, 'fieldname', 'smb.eIdx', 'NaN', 1, 'Inf', 1, 'values', [0, 1, 2]) @@ -584,8 +590,8 @@ def marshall(self, prefix, md, fid): # {{{ if self.ismappedforcing: WriteData(fid,prefix,'object',self,'class','smb','fieldname','mappedforcingpoint','format','IntMat','mattype',2) WriteData(fid,prefix,'object',self,'class','smb','fieldname','mappedforcingelevation','format','DoubleMat','mattype',3) - WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapseTaValue','format','Double') - WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapsedlwrfValue','format','Double') + WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapseTaValue','format','DoubleMat','mattype',3) + WriteData(fid,prefix,'object',self,'class','smb','fieldname','lapsedlwrfValue','format','DoubleMat','mattype',3) # Figure out dt from forcings if (np.any(self.P[-1] - self.Ta[-1] != 0) | np.any(self.V[-1] - self.Ta[-1] != 0) | np.any(self.dswrf[-1] - self.Ta[-1] != 0) | np.any(self.dlwrf[-1] - self.Ta[-1] != 0) | np.any(self.eAir[-1] - self.Ta[-1] != 0) | np.any(self.pAir[-1] - self.Ta[-1] != 0)): diff --git a/src/m/solve/listoutputs.m b/src/m/solve/listoutputs.m index 117382680..6539a0129 100644 --- a/src/m/solve/listoutputs.m +++ b/src/m/solve/listoutputs.m @@ -501,6 +501,9 @@ SmbSummerAlbedo SmbSnowheight SmbT +SmbT10 +SmbT30 +SmbT50 SmbTa SmbTamp SmbTeValue @@ -511,6 +514,7 @@ SmbTemperaturesReconstructed SmbTini SmbTmean +SmbTs SmbTz SmbValuesAutoregression SmbValuesMovingaverage diff --git a/test/Archives/Archive258.arch b/test/Archives/Archive258.arch index b408bc93d443f1f1d6a212304551ee25e3221e18..48c6811b53c19d43f9276c8832b8788eeab5778d 100644 GIT binary patch literal 24551 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 AW&i*H literal 24367 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 UWuHf5W)F`gs_>B#UQnX*UqGwf-T(jq diff --git a/test/Archives/Archive259.arch b/test/Archives/Archive259.arch index 7e67c3df583c318dba1eca8a34dd0e54a56bb8cb..52c8af74f7a3e7f240beeb8f3fe30e3dbcf2d9db 100644 GIT binary patch literal 24367 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 Vok?PQ#>^fWOH}PtkV6-*{~w=4E(`zw literal 24367 zcmeI)c{G*V-vDrhkRmcvq|&5lFoZ(i9bKi;ph=`MRZ8xoWF9()jA;-VGtW|{B$+dp zAxdd5r3@z}(MY}9y|(*X?&7}hdVjxv-uIlftk3$M=lksaJm0;aecFo-3k%C^78aIC z_=j)9X~W|tmc}w`)*e1;Vr*(8jo+Mxe#2nzbewZ(+?Y|$cTg^BvrR82i?vLN&b*`EHs)y1NX7RF~*U z3_gXpX~kmQCznCU+fu2LrhEuLz95gzCfVVi4C?%Q!geF@(z1#6OL~ zc?vmM)SAT*9icsGx2-Tlo9Y*dK{3P)Sw#p%euB>T?3!m*KkITW8sUoe;6>30qve7$k74x%ymuB?NI=>Rewb z011J^uOOz(Ixyz}^EvoGzYYWjhHkD=Y=cpQKZA@!0t6Bx#dmJuy$^xJRO;?`lhqJ7 zVvvXu>nDZtFshPN#d|hm2qIGY;!X{E5JYTFH8{ZW1cF9PjCF2~dU^_o2|a!{oK|PT zsJjQ3xaQx21mffGnulD}{;!P*IVsW(`5O3{GiC56C z0%FRvJ(`*Gw!^44X^Py+uOWr_nbX@Y!VpqMOg;C@o3UCDh-q`|^kjV_Vbr24x~t6M zA#KET8^<;)VOJn#K*V8jp8z1<7W}(Av*5(Z*^wS1F) zXCx2{GUfFxy6b^h=<~?eCASHPMGoCL2{-2h@xFD4iA~QAAQrpKHA@c924YD>-nV7n z+kjYF*LA=>H35j_vxU>zG_L}&;%r@;>es_Stn9uaV59IFh!1TP0#*lZ1!DC=&hv7! zI)PZzmHeP}mJSeWJG8H+1n3*)8Eo zzCdi5$*&un-V4N5uARCv>hVBqn|@86E-eeh*YjQH7()XP+g0zG2SsiI;v0)HEpJ^J zAilk`;`^ks<3Q}3YTRVfe-4OUX3y$suYLz&cYBAY*QziezBBz0aAvL#5Z`m`&O2TE z7>FM-TzS4+5&~jxwg=s$R}_dJqZ^i+#@+>DUtqw8tQ9Fh{1m8b#;I}xi2cz8enW>H zfH;tIPCx%rB@jQi9*XajT?NFi0-{GwG#voqx4i~kY^CWy{2r5Fw`;B?5C_=>ITrrB z3dEr^S{jRYB>?f~hvU=v^^U-Zh()OY#ee6<`isM5 zG@`yf(+>N-4N*UuD}Q{PhNz#aXNtI{Aaj<5wZEqSK<1N@*vm`mkon{?L&fTRWX|e0 z$z~uDnX?(}_$(QV%-LDrXoUG{zZIC&KfcC(X zR%~L3Uco_R&Us?{%!SX9IhWm~T$v1HJ~ip}x>x&=Irp7A+ZAcZeA@euD1sZA^UQa) ztd~RPywmiLq`yJt{6~jh|9_lrd1c@-t`~RHi&rNHalJkto1U1A>zE_BWvVQ$cS=j< zx(j$*I#YOW%*5kWG^u0%4MhENe-P|>5K%)_`YH!`@%TPg-`S4+R`H=|(RDoTlxBsG z9-_Wjwy~Eo5cSzp;&oO5o)=+Hy>lZF)t~TCUTguPK2?U~&?=c%D(mzf}<+SfKoPk)N2*E}LJ zXK{XOi{{Ca&4_AA@y%~tiKu2LK0QNUL^W-F9Unap&vRiZiOOAwdeO>lm4L73c|xS@ zFLy*Wn$H-B^+(h*1#2}e5kxf%e)X^nLDZANH2$gU5%u_d@!+dUMAd8TQq((wsJdyE zwm$g$+L}G}caQ5E{e z+ReDG<%?quNKZvnX}7nZq!Xe_Qr0c?!0i`XmL{h?MAZHD+f}dP`ze~juqom~R6%W) z&bt!){03L+`TvHfyyNP|684D7l~>Hwz{hjgbA_&?Au79}+u5T6QFjxbp8bsLpXC^s zV~MZx&R+F%CLV~&T+z2t{4QP(I8$1U-ykaeji0+jJEGEx({h8@5S1D`NB1OdFU8~4 zC7ldJ-J+&FAHwUyP3^3iMY@PeR(o$K9fhbH(s`Q<4G@(izUFG89HJ5h_03P?yaev; z`dXTZif7|gR)2=5*k3_w<~~AH%uk-@T#bl|{zVBL(!jEo$(iB#6U8ms>?4h+NI{z= zoACWdh`+YC8bDOItU>N$QACBQ53Sa0Kvbw+mTO!wqOMy7z81mrFT^+Ixj;Xnf-_ny zen=rI=$Ymk-ff5q{P{s>?$UA! zz6`tE@!Dv&5MaxDFRft~jgkW9NleNroZH+rGa05Wb%aua>wT$K!GV`A+(hiYTu* z;j_i~xYvxN+g5l!dpc~@qLm}c<6UoP?|$rIzZ7XNM7cka(|@Fc)hyLs_6bpL6~D1^ z;d$w{DIt6dz7N;(p7q1^ch%&~>#RZ4`TG7wmc3ZLM3Dzph;r$k-+MnDYqKkK>Mks| z+~%YzL^+2Qe13xabC&<$!{Ul4dhMMqZk$g)#h11Xum5!JesAA>h@vHHPgx*<-6iYm znS-cvUmU|j@jO2lzS>!8F?K6*d)R^~r>`;Z{T^ZC_xBVFV|6ss58!s3cpQ)3!t>Oz zxOLeVJP#ZlPKn&xj#Zqkt%}Fjq5tLgAHQSMZ_TS*h_!HS*Ji^i=$h;_LX`dB!g^l^ zY|&Fq!%nQ%DGpnA?B18_#PRcFFD|-7IRR02y^Dm_y~pM=4$m~jUNO;Mg6n2y14%;1MmoW=FFm8Z$e zOJIff@V03o%H|v0u{#O-imfaSkDpCpedu}o{My8InqC~lUQ#*h&x5t93g7SntAF*r z+VFYXZgwsU{}&Y>%rC?Bu^}#DWqpU&GaI6ShJH>Sj)|;RU7crfJfig{&t5NlzoWMM z9Z0IhF|olwTQm~K#QR4US{=nPF*!?j4z7Y-vY32vFm*JRb z)wW;B1II*j*~44$b7M_B6=!685yzuyET4zxwe_hHDW1>wX5g53w%4m+2**UnE_=IB z91}gi>^mKVV`9)OewH;jCf?YbzU3y4iG?oQ2+t2|Vq@XuLl!tD_V;V@VgonqM=-|9$F1~&nVob-m^?f)d)}DNNO%cb$!FtcHM{qo% z?eZ6S{CM7vs-wK++!q`ZJ>whAX5yH5uWkkhehzGjJxA}_&&BbGcJl;YR#f2mP2B03 zzV0=Si8L$wbLKcEre0VRm55_vi#@2~=fZA8`{_T~Eb!;UsB0hGj;O&g(J)%#DV|^U zM6az3l#F9y%Ej};^U9cGwE|G@Pbb$PA-f|WQXs_Olw z>4Rh9{-sKxN;oE(Y}v)5G}j{shGSysPbIugI^+?* zPnN|0zHrDJF@N4#?Hf2Ab=~SB_TiYQ8So5$Zad@?b**Ia=Z-@@(Rll^^}{jIR9TXH zI3}74Ow}5Wi59;<#m~1xKG8CNr`~W(wAOlu*DHs7qK%Q@@Go)3-So))ZPRo1V?MCQ z%A&Ia-{MxP96^?>uUW@IS^Z}n%Oa zwBl(mkY(o=i@@4#$g-=ULsv;2S?k2TJm_^0SsU!nPBh9vHrC6t@=q>7wgG3GeuNhy zCvC3mJ5qJXNn@k%%CEQ4IU#!B z+$r-5(N|=pr>HMQbde1_yCee;UFxOK0j+pMduM-HenTjt-3W=OU7e3;uIi3rJAOm7 zQ-?$ra&APlqt1((R9q14u;{c**9SMzpCxvJyi>HXV;`5L7D>XU_ z;^SHy3NFYZn&}!Y>6$`B^DK|juE6bimQ!6~uMo{D;t{>+D5B}!?O9R23DN8&=Oqh! z54&Oa&}l@gsMvhyp%bD-Os?B1mw;#qmp@Xx3`8q(%a3R~isnr?7T$ zMBf)w;$FBC(VShk$H*Q*w7U|#ZU<%|S~&l5Qw=smyVD`F_A&0Sf!Al<8!1HR%6Q1f zrh@NZKkg zxz+Cyq8qi>s@)ev&H}GDOD`%#F41`=+`EU6YXj8gFEvH(P8Yrz99Kr37uS8<=q7IJRhHeR-M5FKe;Gq z{c=c3S-}w69M~K#S0+MR*xr~0T4$lHeRV{=ooev+8U46zO_FF zZ3Drbvm8!A+vlWi-<-wJc2FuyD`ge5l`WZ7zG5A;DYAY&shJIJzp1M&-Mt;!_K0SP za%Dgp&tP4K$6RO)ofqB3@qE}AyY`*cT#6n1PVb*RGGHw);G|?uf%gLO%Iy*c?^{w&V(kplTT)Coe3|To97N) zx(+Q0Tl(iux(-cM9wEhv63{Xgp|^Yr(6a08p_c-`pe5V;u~$X{v?O{Ogul;&mfecm z7J0pemQ`t&9E=mJ2YI`e`zUWGt_JLPni<4 z9_lR1OYB7opnB8gtK!1_@Zb=;s%au-06sMCrbqs7o1Wf3YRLj0xTi~UeqIO+ z;oKP6@0!rznH-0iiD!VPm`u(ALd1hp^;wreexskQMnH}o;L}vQw>BFm| z1BHHR8qkvZzHiUcz0kZm^Ra*LY5W@!t*bT{yP@H+_JCw$CA1z$?|Is-{ZBUqolZq( zZrqUqvibU7I<~)mSG!}|8QTwu$L9T~V$$Du{-^r=Pq#bX{V?BWR)ARnW(AlPU{-)x z0cHi56<}6iOa;c>^eFyq)5G8{5#(?S1_nn9!{EhxU~mO3zO+CX7@Uj5#iW&hF~hL8 zY`rFy;%dz}1B|JnIqEypfiY#qbn}JVfx%lr-7I$+wYzqa_Rg&|ATnmH)8Iau4UCyL z731A>pt~ckAzQBHFROeLji04Lx2k0=XHn9qUFlN`n!mI{XWs|;eJ8|$!F}eDRDl;T zrX5wWjxfdjWuG{yoeK>9f#?_S#jqk;y1eJ`b@H=IZTSKWp>G=1L1Dm{GgFz`)czY8@JxM`xG$dUUp8%!}THx7xq^b;`$0* z$neg-kMARXpGN(&zntmZB&A=E+jrP(Wa^LgC^wl$!~KVK1bnRl2G7%`%v@Vs2WJP1 zvM0b0ICLz#x&hZ!!CO=r9~bl%H;3wfG1D#10*~WNOSuj0bbP&LcJtJ6zq3(la5cW~ zIoe6SQ-^>deq6xFn*-N@&rVs#>M!{WzW%ll*K7KkJ=PzG$Nhx5y-TW;X~ ztJPCa_v7~HW>;--{fPWtc2h6o`p=KAkDRg_7-B*THq#66ywW(BV(K?)_n@ql(%L@g z=&NxPksgG$yk?e@{so8ma<~(4|ga3!~0DsQ>G490GBk_3t({my-az0UR zBqox6h$N3Vwte}L^T%_|$Z;a+he+NZPm(vDqd@`=XmFl z_s5<`-XBlJk^aV$+~;_Xy{l+m~Ul zCfSI0-&x)JJslHfkA8PH&LXez+s0p>{pXdCRP6ZK_*>`x%!YSu*IwtWT{K}f{|bN)_)JAq{J6-3*`s5L*lv9Gjr`OwVfN@)qG#@kp9ej^{ujrI-ckSn diff --git a/test/NightlyRun/test258.m b/test/NightlyRun/test258.m index 0137c0554..f44b26caf 100644 --- a/test/NightlyRun/test258.m +++ b/test/NightlyRun/test258.m @@ -42,6 +42,8 @@ md.smb.isprecipforcingremapped=1; md.smb.mappedforcingpoint=griddata(xe2,ye2,mpoints,xe,ye,'nearest'); md.smb.mappedforcingelevation=mean(md2.geometry.surface(md2.mesh.elements),2); +md.smb.lapseTaValue=md.smb.lapseTaValue*ones(size(md.smb.mappedforcingelevation)); +md.smb.lapsedlwrfValue=md.smb.lapsedlwrfValue*ones(size(md.smb.mappedforcingelevation)); %smb settings md.smb.requested_outputs={'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC',... @@ -49,7 +51,7 @@ 'SmbMeanULW','SmbNetLW','SmbNetSW','SmbWAdd','SmbRunoff','SmbRefreeze','SmbMelt',... 'SmbEC','SmbPrecipitation','SmbRain','SmbAccumulatedMassBalance','SmbAccumulatedRunoff',... 'SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain',... - 'SmbAccumulatedPrecipitation','SmbAccumulatedRefreeze'}; + 'SmbAccumulatedPrecipitation','SmbAccumulatedRefreeze','SmbTs','SmbT10','SmbT30','SmbT50'}; %only run smb core: md.transient.isstressbalance=0; @@ -71,8 +73,8 @@ end %Fields and tolerances to track changes -field_names ={'Layers','SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF','SmbMeanULW','SmbNetLW','SmbNetSW','SmbAccumulatedMassBalance','SmbAccumulatedRunoff','SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain','SmbAccumulatedRefreeze','SmbRunoff','SmbMelt','SmbEC','SmbPrecipitation','SmbRain','SmbRefreeze','SmbWAdd'}; -field_tolerances ={1e-12,4e-11,2e-11,3e-11,6e-11,8e-11,8e-11,1e-12,5e-11,2e-12,1e-12,1e-12,4e-11,2e-11,5e-11,1e-11,9e-10,2e-11,1e-11,9e-10,2e-11,2e-09,1e-11,1e-11,1e-11,8e-10,2e-11,2e-11,1e-11,1e-11,2e-11,1e-11}; +field_names ={'Layers','SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF','SmbMeanULW','SmbNetLW','SmbNetSW','SmbTs','SmbT10','SmbT30','SmbT50','SmbAccumulatedMassBalance','SmbAccumulatedRunoff','SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain','SmbAccumulatedRefreeze','SmbRunoff','SmbMelt','SmbEC','SmbPrecipitation','SmbRain','SmbRefreeze','SmbWAdd'}; +field_tolerances ={1e-12,4e-11,2e-11,3e-11,6e-11,8e-11,8e-11,1e-12,5e-11,2e-12,1e-12,1e-12,4e-11,2e-11,5e-11,1e-11,9e-10,2e-11,2e-11,2e-11,2e-11,2e-11,1e-11,9e-10,2e-11,2e-09,1e-11,1e-11,1e-11,8e-10,2e-11,2e-11,1e-11,1e-11,2e-11,1e-11}; field_values={... (nlayers),... @@ -93,6 +95,10 @@ (md.results.TransientSolution(end).SmbMeanULW(1)),... (md.results.TransientSolution(end).SmbNetLW(1)),... (md.results.TransientSolution(end).SmbNetSW(1)),... + (md.results.TransientSolution(end).SmbTs(1)),... + (md.results.TransientSolution(end).SmbT10(1)),... + (md.results.TransientSolution(end).SmbT30(1)),... + (md.results.TransientSolution(end).SmbT50(1)),... (md.results.TransientSolution(end).SmbAccumulatedMassBalance(1)),... (md.results.TransientSolution(end).SmbAccumulatedRunoff(1)),... (md.results.TransientSolution(end).SmbAccumulatedMelt(1)),... diff --git a/test/NightlyRun/test258.py b/test/NightlyRun/test258.py index c325da6f2..7a865b70b 100644 --- a/test/NightlyRun/test258.py +++ b/test/NightlyRun/test258.py @@ -60,6 +60,8 @@ interpp = NearestNDInterpolator((xe2, ye2), mpoints) md.smb.mappedforcingpoint=interpp(xe,ye) md.smb.mappedforcingelevation=np.mean(md2.geometry.surface[md2.mesh.elements-1],axis=1) +md.smb.lapseTaValue=md.smb.lapseTaValue*np.ones(np.shape(md.smb.mappedforcingelevation)) +md.smb.lapsedlwrfValue=md.smb.lapsedlwrfValue*np.ones(np.shape(md.smb.mappedforcingelevation)) #smb settings md.smb.requested_outputs = ['SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC', @@ -67,7 +69,7 @@ 'SmbMeanULW','SmbNetLW','SmbNetSW','SmbWAdd','SmbRunoff','SmbRefreeze','SmbMelt', 'SmbEC','SmbPrecipitation','SmbRain','SmbAccumulatedMassBalance','SmbAccumulatedRunoff', 'SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain', - 'SmbAccumulatedPrecipitation','SmbAccumulatedRefreeze'] + 'SmbAccumulatedPrecipitation','SmbAccumulatedRefreeze','SmbTs','SmbT10','SmbT30','SmbT50'] #only run smb core: md.transient.isstressbalance = 0 @@ -88,8 +90,8 @@ nlayers=np.minimum(md.results.TransientSolution[i].SmbT.shape[1], nlayers) #Fields and tolerances to track changes -field_names = ['Layers', 'SmbDz', 'SmbT', 'SmbD', 'SmbRe', 'SmbGdn', 'SmbGsp', 'SmbA', 'SmbEC', 'SmbMassBalance', 'SmbMAdd', 'SmbDzAdd', 'SmbFAC', 'SmbMeanSHF', 'SmbMeanLHF', 'SmbMeanULW', 'SmbNetLW', 'SmbNetSW', 'SmbAccumulatedMassBalance', 'SmbAccumulatedRunoff', 'SmbAccumulatedMelt', 'SmbAccumulatedEC', 'SmbAccumulatedPrecipitation', 'SmbAccumulatedRain', 'SmbAccumulatedRefreeze', 'SmbRunoff', 'SmbMelt', 'SmbEC', 'SmbPrecipitation', 'SmbRain', 'SmbRefreeze', 'SmbWAdd'] -field_tolerances = [1e-12, 4e-11, 2e-11, 3e-11, 6e-11, 8e-11, 8e-11, 1e-12, 5e-11, 2e-12, 1e-12, 1e-12, 4e-11, 2e-11, 5e-11, 1e-11, 9e-10, 2e-11, 1e-11, 9e-10, 2e-11, 2e-09, 1e-11, 1e-11, 1e-11, 8e-10, 2e-11, 2e-11, 1e-11, 1e-11, 2e-11, 1e-11] +field_names = ['Layers', 'SmbDz', 'SmbT', 'SmbD', 'SmbRe', 'SmbGdn', 'SmbGsp', 'SmbA', 'SmbEC', 'SmbMassBalance', 'SmbMAdd', 'SmbDzAdd', 'SmbFAC', 'SmbMeanSHF', 'SmbMeanLHF', 'SmbMeanULW', 'SmbNetLW', 'SmbNetSW', 'SmbTs', 'SmbT10', 'SmbT30', 'SmbT50', 'SmbAccumulatedMassBalance', 'SmbAccumulatedRunoff', 'SmbAccumulatedMelt', 'SmbAccumulatedEC', 'SmbAccumulatedPrecipitation', 'SmbAccumulatedRain', 'SmbAccumulatedRefreeze', 'SmbRunoff', 'SmbMelt', 'SmbEC', 'SmbPrecipitation', 'SmbRain', 'SmbRefreeze', 'SmbWAdd'] +field_tolerances = [1e-12, 4e-11, 2e-11, 3e-11, 6e-11, 8e-11, 8e-11, 1e-12, 5e-11, 2e-12, 1e-12, 1e-12, 4e-11, 2e-11, 5e-11, 1e-11, 9e-10, 2e-11, 2e-11, 2e-11, 2e-11, 2e-11, 1e-11, 9e-10, 2e-11, 2e-09, 1e-11, 1e-11, 1e-11, 8e-10, 2e-11, 2e-11, 1e-11, 1e-11, 2e-11, 1e-11] # Shape is different in python solution (fixed using reshape) which can cause test failure field_values = [ @@ -111,6 +113,10 @@ md.results.TransientSolution[-1].SmbMeanULW[0], md.results.TransientSolution[-1].SmbNetLW[0], md.results.TransientSolution[-1].SmbNetSW[0], + md.results.TransientSolution[-1].SmbTs[0], + md.results.TransientSolution[-1].SmbT10[0], + md.results.TransientSolution[-1].SmbT30[0], + md.results.TransientSolution[-1].SmbT50[0], md.results.TransientSolution[-1].SmbAccumulatedMassBalance[0], md.results.TransientSolution[-1].SmbAccumulatedRunoff[0], md.results.TransientSolution[-1].SmbAccumulatedMelt[0], diff --git a/test/NightlyRun/test259.m b/test/NightlyRun/test259.m index 5b7816c26..0a504ee1b 100644 --- a/test/NightlyRun/test259.m +++ b/test/NightlyRun/test259.m @@ -43,6 +43,8 @@ md.smb.lapsedlwrfValue=0; md.smb.mappedforcingpoint=griddata(xe2,ye2,mpoints,xe,ye,'nearest'); md.smb.mappedforcingelevation=mean(md2.geometry.surface(md2.mesh.elements),2); +md.smb.lapseTaValue=md.smb.lapseTaValue*ones(size(md.smb.mappedforcingelevation)); +md.smb.lapsedlwrfValue=md.smb.lapsedlwrfValue*ones(size(md.smb.mappedforcingelevation)); %smb settings md.smb.requested_outputs={'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC',... diff --git a/test/NightlyRun/test259.py b/test/NightlyRun/test259.py index d65fc217b..bb113bc1d 100644 --- a/test/NightlyRun/test259.py +++ b/test/NightlyRun/test259.py @@ -61,6 +61,8 @@ interpp = NearestNDInterpolator((xe2, ye2), mpoints) md.smb.mappedforcingpoint=interpp(xe,ye) md.smb.mappedforcingelevation=np.mean(md2.geometry.surface[md2.mesh.elements-1],axis=1) +md.smb.lapseTaValue=md.smb.lapseTaValue*np.ones(np.shape(md.smb.mappedforcingelevation)) +md.smb.lapsedlwrfValue=md.smb.lapsedlwrfValue*np.ones(np.shape(md.smb.mappedforcingelevation)) #smb settings md.smb.requested_outputs = ['SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC', From 82dbe02f7b4f0ba9f97a6971a365978c12a179f2 Mon Sep 17 00:00:00 2001 From: mmorligh Date: Fri, 13 Feb 2026 08:44:27 +1300 Subject: [PATCH 4/4] CHG: fixed function name and added some doc --- src/m/inversions/velocitymisfit.m | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/m/inversions/velocitymisfit.m b/src/m/inversions/velocitymisfit.m index 989a3067c..8b7be83eb 100644 --- a/src/m/inversions/velocitymisfit.m +++ b/src/m/inversions/velocitymisfit.m @@ -1,12 +1,12 @@ -function J=misfit(md) +function J=velocitymisfit(md) %MISFIT - compute misfit % % Usage: -% J=misfit(md) -% -% Example: -% J=misfit(md) +% J = velocitymisfit(md) % +% - modeled velocities will be pulled from md.initialization.vx/vy +% - observed velocities will be pulled from md.inversion.vx_obs/vy_obs + if dimension(md.mesh)==2, elements=md.mesh.elements;