Changeset 27285
- Timestamp:
- 09/17/22 06:51:49 (3 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r27284 r27285 256 256 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.malag_coefs"); 257 257 parameters->AddObject(new DoubleMatParam(FrontalForcingsARMAmalagcoefsEnum,transparam,M,N)); 258 xDelete<IssmDouble>(transparam); 259 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.monthly_effects"); 260 parameters->AddObject(new DoubleMatParam(ThermalForcingMonthlyEffectsEnum,transparam,M,N)); 258 261 xDelete<IssmDouble>(transparam); 259 262 /*Do not break here, generic FrontalForcingsRignot parameters still to be retrieved*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r27284 r27285 2775 2775 this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2776 2776 2777 }/*}}}*/ 2778 void Element::MonthlyEffectBasin(IssmDouble* monthlyeff, int enum_type){/*{{{*/ 2779 2780 /*Variable declaration*/ 2781 const int numvertices = this->GetNumberOfVertices(); 2782 int basinid,mindex,basinenum_type,varenum_type; 2783 IssmDouble time,fracyear,yts; 2784 IssmDouble monthsteps[12] = {0.,1./12,2./12,3./12,4./12,5./12,6./12,7./12,8./12,9./12,10./12,11./12}; 2785 IssmDouble* monthlyeff_b = xNew<IssmDouble>(12); 2786 IssmDouble* varlist = xNew<IssmDouble>(numvertices); 2787 2788 /*Get field-specific enums*/ 2789 switch(enum_type){ 2790 case(FrontalForcingsRignotarmaEnum): 2791 basinenum_type = FrontalForcingsBasinIdEnum; 2792 varenum_type = ThermalForcingEnum; 2793 break; 2794 } 2795 2796 /*Evaluate the month index*/ 2797 this->parameters->FindParam(&yts,ConstantsYtsEnum); 2798 this->parameters->FindParam(&time,TimeEnum); 2799 fracyear = time/yts-floor(time/yts); 2800 for(int i=1;i<12;i++){ 2801 if(fracyear>=monthsteps[i-1]) mindex = i-1; 2802 } 2803 if(fracyear>=monthsteps[11]) mindex = 11; 2804 2805 /*Get basin-specific parameters of the element*/ 2806 this->GetInputValue(&basinid,basinenum_type); 2807 for(int ii=0;ii<12;ii++){ 2808 monthlyeff_b[ii] = monthlyeff[basinid*12+ii]; 2809 } 2810 2811 /*Retrieve values non-adjusted for monthly effects*/ 2812 this->GetInputListOnVertices(varlist,varenum_type); 2813 2814 /*Adjust values using monthly effects*/ 2815 for(int v=0;v<numvertices;v++){ 2816 varlist[v] = varlist[v]+monthlyeff_b[mindex]; 2817 } 2818 2819 /*Add input to element*/ 2820 this->AddInput(varenum_type,varlist,P1Enum); 2821 2822 /*Clean-up*/ 2823 xDelete<IssmDouble>(monthlyeff_b); 2824 xDelete<IssmDouble>(varlist); 2777 2825 }/*}}}*/ 2778 2826 void Element::BeckmannGoosseFloatingiceMeltingRate(){/*{{{*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r27260 r27285 164 164 void MigrateGroundingLine(IssmDouble* sheet_ungrounding); 165 165 void MismipFloatingiceMeltingRate(); 166 void MonthlyEffectBasin(IssmDouble* monthlyeff, int enum_type); 166 167 void BeckmannGoosseFloatingiceMeltingRate(); 167 168 void MungsmtpParameterization(void); -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r27261 r27285 59 59 IssmDouble* arlagcoefs = NULL; 60 60 IssmDouble* malagcoefs = NULL; 61 IssmDouble* monthlyeff = NULL; 61 62 62 63 femmodel->parameters->FindParam(&tinit_arma,FrontalForcingsARMAInitialTimeEnum); … … 65 66 femmodel->parameters->FindParam(&arlagcoefs,&M,&Narlagcoefs,FrontalForcingsARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(Narlagcoefs==arorder); 66 67 femmodel->parameters->FindParam(&malagcoefs,&M,&Nmalagcoefs,FrontalForcingsARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(Nmalagcoefs==maorder); 68 femmodel->parameters->FindParam(&monthlyeff,&M,&N,ThermalForcingMonthlyEffectsEnum); _assert_(M==numbasins); _assert_(N==12); 67 69 68 70 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); … … 83 85 for(Object* &object:femmodel->elements->objects){ 84 86 Element* element = xDynamicCast<Element*>(object); 87 /*Compute ARMA*/ 85 88 element->ArmaProcess(isstepforarma,arorder,maorder,telapsed_arma,tstep_arma,termconstant,trend,arlagcoefs,malagcoefs,istfstochastic,FrontalForcingsRignotarmaEnum); 86 } 89 /*Compute monthly effects*/ 90 element->MonthlyEffectBasin(monthlyeff,FrontalForcingsRignotarmaEnum); 91 } 87 92 88 93 /*Cleanup*/ … … 91 96 xDelete<IssmDouble>(arlagcoefs); 92 97 xDelete<IssmDouble>(malagcoefs); 98 xDelete<IssmDouble>(monthlyeff); 93 99 }/*}}}*/ -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27284 r27285 564 564 syn keyword cConstant StressbalanceRiftPenaltyThresholdEnum 565 565 syn keyword cConstant StressbalanceShelfDampeningEnum 566 syn keyword cConstant ThermalForcingMonthlyEffectsEnum 566 567 syn keyword cConstant ThermalIsdrainicecolumnEnum 567 568 syn keyword cConstant ThermalIsdynamicbasalspcEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27284 r27285 558 558 StressbalanceRiftPenaltyThresholdEnum, 559 559 StressbalanceShelfDampeningEnum, 560 ThermalForcingMonthlyEffectsEnum, 560 561 ThermalIsdrainicecolumnEnum, 561 562 ThermalIsdynamicbasalspcEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27284 r27285 566 566 case StressbalanceRiftPenaltyThresholdEnum : return "StressbalanceRiftPenaltyThreshold"; 567 567 case StressbalanceShelfDampeningEnum : return "StressbalanceShelfDampening"; 568 case ThermalForcingMonthlyEffectsEnum : return "ThermalForcingMonthlyEffects"; 568 569 case ThermalIsdrainicecolumnEnum : return "ThermalIsdrainicecolumn"; 569 570 case ThermalIsdynamicbasalspcEnum : return "ThermalIsdynamicbasalspc"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27284 r27285 557 557 syn keyword juliaConstC StressbalanceRiftPenaltyThresholdEnum 558 558 syn keyword juliaConstC StressbalanceShelfDampeningEnum 559 syn keyword juliaConstC ThermalForcingMonthlyEffectsEnum 559 560 syn keyword juliaConstC ThermalIsdrainicecolumnEnum 560 561 syn keyword juliaConstC ThermalIsdynamicbasalspcEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27284 r27285 578 578 else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum; 579 579 else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum; 580 else if (strcmp(name,"ThermalForcingMonthlyEffects")==0) return ThermalForcingMonthlyEffectsEnum; 580 581 else if (strcmp(name,"ThermalIsdrainicecolumn")==0) return ThermalIsdrainicecolumnEnum; 581 582 else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; … … 628 629 else if (strcmp(name,"Xxe")==0) return XxeEnum; 629 630 else if (strcmp(name,"Yye")==0) return YyeEnum; 630 else if (strcmp(name,"Zze")==0) return ZzeEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Areae")==0) return AreaeEnum; 634 if (strcmp(name,"Zze")==0) return ZzeEnum; 635 else if (strcmp(name,"Areae")==0) return AreaeEnum; 635 636 else if (strcmp(name,"WorldComm")==0) return WorldCommEnum; 636 637 else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum; … … 751 752 else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum; 752 753 else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum; 753 else if (strcmp(name,"Dummy")==0) return DummyEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum; 757 if (strcmp(name,"Dummy")==0) return DummyEnum; 758 else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum; 758 759 else if (strcmp(name,"EffectivePressureSubstep")==0) return EffectivePressureSubstepEnum; 759 760 else if (strcmp(name,"EffectivePressureTransient")==0) return EffectivePressureTransientEnum; … … 874 875 else if (strcmp(name,"Misfit")==0) return MisfitEnum; 875 876 else if (strcmp(name,"MovingFrontalVx")==0) return MovingFrontalVxEnum; 876 else if (strcmp(name,"MovingFrontalVy")==0) return MovingFrontalVyEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum; 880 if (strcmp(name,"MovingFrontalVy")==0) return MovingFrontalVyEnum; 881 else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum; 881 882 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 882 883 else if (strcmp(name,"Node")==0) return NodeEnum; … … 997 998 else if (strcmp(name,"SmbCciceValue")==0) return SmbCciceValueEnum; 998 999 else if (strcmp(name,"SmbCotValue")==0) return SmbCotValueEnum; 999 else if (strcmp(name,"SmbD")==0) return SmbDEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"SmbDailyairdensity")==0) return SmbDailyairdensityEnum; 1003 if (strcmp(name,"SmbD")==0) return SmbDEnum; 1004 else if (strcmp(name,"SmbDailyairdensity")==0) return SmbDailyairdensityEnum; 1004 1005 else if (strcmp(name,"SmbDailyairhumidity")==0) return SmbDailyairhumidityEnum; 1005 1006 else if (strcmp(name,"SmbDailydlradiation")==0) return SmbDailydlradiationEnum; … … 1120 1121 else if (strcmp(name,"Surface")==0) return SurfaceEnum; 1121 1122 else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum; 1122 else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 1126 if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum; 1127 else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 1127 1128 else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; 1128 1129 else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; … … 1243 1244 else if (strcmp(name,"Outputdefinition68")==0) return Outputdefinition68Enum; 1244 1245 else if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum; 1245 else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum; 1249 if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 1250 else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum; 1250 1251 else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum; 1251 1252 else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum; … … 1366 1367 else if (strcmp(name,"Element")==0) return ElementEnum; 1367 1368 else if (strcmp(name,"ElementHook")==0) return ElementHookEnum; 1368 else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;1369 1369 else stage=12; 1370 1370 } 1371 1371 if(stage==12){ 1372 if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum; 1372 if (strcmp(name,"ElementSId")==0) return ElementSIdEnum; 1373 else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum; 1373 1374 else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum; 1374 1375 else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum; … … 1489 1490 else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum; 1490 1491 else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum; 1491 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;1492 1492 else stage=13; 1493 1493 } 1494 1494 if(stage==13){ 1495 if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; 1495 if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 1496 else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; 1496 1497 else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum; 1497 1498 else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum; … … 1612 1613 else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum; 1613 1614 else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum; 1614 else if (strcmp(name,"SpatialLinearFloatingMeltRate")==0) return SpatialLinearFloatingMeltRateEnum;1615 1615 else stage=14; 1616 1616 } 1617 1617 if(stage==14){ 1618 if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum; 1618 if (strcmp(name,"SpatialLinearFloatingMeltRate")==0) return SpatialLinearFloatingMeltRateEnum; 1619 else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum; 1619 1620 else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum; 1620 1621 else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum; -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotarma.m
r27260 r27285 15 15 arlag_coefs = NaN; 16 16 malag_coefs = NaN; 17 monthly_effects = NaN; 17 18 basin_id = NaN; 18 19 subglacial_discharge = NaN; … … 64 65 md = checkfield(md,'fieldname','frontalforcings.arlag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.ar_order]); 65 66 md = checkfield(md,'fieldname','frontalforcings.malag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.ma_order]); 67 if(any(~isnan(md.frontalforcings.monthly_effects))) 68 md = checkfield(md,'fieldname','frontalforcings.monthly_effects','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,12]); 69 if(md.timestepping.time_step>=1) 70 error('md.frontalforcings.monthly_effects are provided but md.timestepping.time_step>=1'); 71 end 72 end 66 73 67 74 end % }}} … … 79 86 fielddisplay(self,'arlag_coefs','basin-specific vectors of AR lag coefficients [unitless]'); 80 87 fielddisplay(self,'malag_coefs','basin-specific vectors of MA lag coefficients [unitless]'); 88 fielddisplay(self,'monthly_effects','basin-specific monthly values of TF added at corresponding month (default: all 0) [°C]'); 81 89 end % }}} 82 90 function marshall(self,prefix,md,fid) % {{{ 83 91 yts=md.constants.yts; 92 if(any(isnan(md.frontalforcings.monthly_effects))) %monthly effects not provided, set to 0 93 meffects = zeros(md.frontalforcings.num_basins,12); 94 else 95 meffects = md.frontalforcings.monthly_effects; 96 end 97 84 98 WriteData(fid,prefix,'name','md.frontalforcings.parameterization','data',3,'format','Integer'); 85 99 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_basins','format','Integer'); … … 94 108 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','arlag_coefs','format','DoubleMat','name','md.frontalforcings.arlag_coefs','yts',yts); 95 109 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','malag_coefs','format','DoubleMat','name','md.frontalforcings.malag_coefs','yts',yts); 110 WriteData(fid,prefix,'data',meffects,'name','md.frontalforcings.monthly_effects','format','DoubleMat'); 96 111 end % }}} 97 112 end -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotarma.py
r27260 r27285 22 22 self.arma_timestep = 0 23 23 self.arlag_coefs = np.nan 24 self.malag_coefs = np.nan 25 self.monthly_effects = np.nan 24 26 self.basin_id = np.nan 25 27 self.subglacial_discharge = np.nan … … 43 45 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of AR lag coefficients [unitless]')) 44 46 s += '{}\n'.format(fielddisplay(self, 'malag_coefs', 'basin-specific vectors of MA lag coefficients [unitless]')) 47 s += '{}\n'.format(fielddisplay(self, 'monthly_effects', 'basin-specific monthly values of TF added at corresponding month (default: all 0) [°C]')) 45 48 return s 46 49 #}}} … … 74 77 md = checkfield(md, 'fieldname', 'frontalforcings.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, md.frontalforcings.ar_order]) 75 78 md = checkfield(md, 'fieldname', 'frontalforcings.malag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, md.frontalforcings.ma_order]) 79 if(np.any(np.isnan(md.frontalforcings.monthly_effects)==False)): 80 md = checkfield(md, 'fieldname', 'frontalforcings.monthly_effects', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, 12]) 81 if(md.timestepping.time_step>=1): 82 raise RuntimeError('md.frontalforcings.monthly_effects are provided but md.timestepping.time_step>=1') 76 83 return md 77 84 # }}} … … 84 91 def marshall(self, prefix, md, fid): # {{{ 85 92 yts = md.constants.yts 93 if(np.any(np.isnan(md.frontalforcings.monthly_effects))): #monthly effects not provided, set to 0 94 meffects = np.zeros((md.frontalforcings.num_basins,12)) 95 else: 96 meffects = 1*md.frontalforcings.monthly_effects 86 97 WriteData(fid, prefix, 'name', 'md.frontalforcings.parameterization', 'data', 3, 'format', 'Integer') 87 98 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_basins', 'format', 'Integer') … … 96 107 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.frontalforcings.arlag_coefs', 'yts', yts) 97 108 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'malag_coefs', 'format', 'DoubleMat', 'name', 'md.frontalforcings.malag_coefs', 'yts', yts) 109 WriteData(fid, prefix, 'data', meffects, 'name', 'md.frontalforcings.monthly_effects', 'format', 'DoubleMat') 98 110 # }}}
Note:
See TracChangeset
for help on using the changeset viewer.