Changeset 23808
- Timestamp:
- 03/27/19 19:26:53 (6 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
r23585 r23808 214 214 parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdensification",SmbIsdensificationEnum)); 215 215 parameters->AddObject(iomodel->CopyConstantObject("md.smb.isturbulentflux",SmbIsturbulentfluxEnum)); 216 parameters->AddObject(iomodel->CopyConstantObject("md.smb.isclimatology",SmbIsclimatologyEnum)); 216 217 parameters->AddObject(iomodel->CopyConstantObject("md.smb.InitDensityScaling",SmbInitDensityScalingEnum)); 217 218 parameters->AddObject(iomodel->CopyConstantObject("md.smb.ThermoDeltaTScaling",SmbThermoDeltaTScalingEnum)); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r23797 r23808 3215 3215 IssmDouble Tz,Vz=0.0; 3216 3216 IssmDouble rho_ice, rho_water,aSnow,aIce; 3217 IssmDouble time,dt; 3217 IssmDouble time,dt,starttime,finaltime; 3218 IssmDouble timeclim=0.0; 3218 3219 IssmDouble t,smb_dt; 3219 3220 IssmDouble yts; … … 3250 3251 IssmDouble dMass=0.0; 3251 3252 bool isgraingrowth,isalbedo,isshortwave,isthermal,isaccumulation,ismelt,isdensification,isturbulentflux; 3253 bool isclimatology=false; 3252 3254 IssmDouble init_scaling=0.0; 3253 3255 IssmDouble thermo_scaling=1.0; 3254 3256 IssmDouble adThresh=1023.0; 3257 int offset0, offsetend; 3258 IssmDouble time0, timeend; 3255 3259 3256 3260 /*}}}*/ … … 3296 3300 parameters->FindParam(&dt,TimesteppingTimeStepEnum); /*transient core time step*/ 3297 3301 parameters->FindParam(&yts,ConstantsYtsEnum); 3302 parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 3303 parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 3298 3304 parameters->FindParam(&smb_dt,SmbDtEnum); /*time period for the smb solution, usually smaller than the glaciological dt*/ 3299 3305 parameters->FindParam(&aIdx,SmbAIdxEnum); … … 3305 3311 parameters->FindParam(&t0dry,SmbT0dryEnum); 3306 3312 parameters->FindParam(&K,SmbKEnum); 3313 parameters->FindParam(&isclimatology,SmbIsclimatologyEnum); 3307 3314 parameters->FindParam(&isgraingrowth,SmbIsgraingrowthEnum); 3308 3315 parameters->FindParam(&isalbedo,SmbIsalbedoEnum); … … 3466 3473 //go back to time - deltaT: 3467 3474 time-=dt; 3475 if (isclimatology){ 3476 //If this is a climatology, we need to repeat the forcing after the final time 3477 offset0=dynamic_cast<TransientInput*>(Ta_input)->GetTimeInputOffset(starttime); 3478 offsetend=dynamic_cast<TransientInput*>(Ta_input)->GetTimeInputOffset(finaltime); 3479 time0=dynamic_cast<TransientInput*>(Ta_input)->GetTimeByOffset(offset0); 3480 timeend=dynamic_cast<TransientInput*>(Ta_input)->GetTimeByOffset(offsetend); 3481 timeclim=time0+fmod(time-time0,timeend-time0); 3482 } 3483 else{ 3484 timeclim=time; 3485 } 3468 3486 3469 3487 /*Start loop: */ … … 3474 3492 3475 3493 /*extract daily data:{{{*/ 3476 Ta_input->GetInputValue(&Ta,gauss,t );//screen level air temperature [K]3477 V_input->GetInputValue(&V,gauss,t ); //wind speed [m s-1]3478 Dlwr_input->GetInputValue(&dlw,gauss,t ); //downward longwave radiation flux [W m-2]3479 Dswr_input->GetInputValue(&dsw,gauss,t ); //downward shortwave radiation flux [W m-2]3480 P_input->GetInputValue(&P,gauss,t ); //precipitation [kg m-2]3481 eAir_input->GetInputValue(&eAir,gauss,t ); //screen level vapor pressure [Pa]3482 pAir_input->GetInputValue(&pAir,gauss,t ); // screen level air pressure [Pa]3494 Ta_input->GetInputValue(&Ta,gauss,t-time+timeclim);//screen level air temperature [K] 3495 V_input->GetInputValue(&V,gauss,t-time+timeclim); //wind speed [m s-1] 3496 Dlwr_input->GetInputValue(&dlw,gauss,t-time+timeclim); //downward longwave radiation flux [W m-2] 3497 Dswr_input->GetInputValue(&dsw,gauss,t-time+timeclim); //downward shortwave radiation flux [W m-2] 3498 P_input->GetInputValue(&P,gauss,t-time+timeclim); //precipitation [kg m-2] 3499 eAir_input->GetInputValue(&eAir,gauss,t-time+timeclim); //screen level vapor pressure [Pa] 3500 pAir_input->GetInputValue(&pAir,gauss,t-time+timeclim); // screen level air pressure [Pa] 3483 3501 teValue_input->GetInputValue(&teValue,gauss); // screen level air pressure [Pa] 3484 3502 aValue_input->GetInputValue(&aValue,gauss); // screen level air pressure [Pa] -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r23795 r23808 335 335 SmbIsaccumulationEnum, 336 336 SmbIsalbedoEnum, 337 SmbIsclimatologyEnum, 337 338 SmbIsd18opdEnum, 338 339 SmbIsdelta18oEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r23795 r23808 343 343 case SmbIsaccumulationEnum : return "SmbIsaccumulation"; 344 344 case SmbIsalbedoEnum : return "SmbIsalbedo"; 345 case SmbIsclimatologyEnum : return "SmbIsclimatology"; 345 346 case SmbIsd18opdEnum : return "SmbIsd18opd"; 346 347 case SmbIsdelta18oEnum : return "SmbIsdelta18o"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r23795 r23808 349 349 else if (strcmp(name,"SmbIsaccumulation")==0) return SmbIsaccumulationEnum; 350 350 else if (strcmp(name,"SmbIsalbedo")==0) return SmbIsalbedoEnum; 351 else if (strcmp(name,"SmbIsclimatology")==0) return SmbIsclimatologyEnum; 351 352 else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum; 352 353 else if (strcmp(name,"SmbIsdelta18o")==0) return SmbIsdelta18oEnum; … … 382 383 else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum; 383 384 else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum; 384 else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 388 if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum; 389 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 389 390 else if (strcmp(name,"Step")==0) return StepEnum; 390 391 else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum; … … 505 506 else if (strcmp(name,"EplHeadHydrostep")==0) return EplHeadHydrostepEnum; 506 507 else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum; 507 else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum; 511 if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum; 512 else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum; 512 513 else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum; 513 514 else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum; … … 628 629 else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum; 629 630 else if (strcmp(name,"SmbC")==0) return SmbCEnum; 630 else if (strcmp(name,"SmbDailysnowfall")==0) return SmbDailysnowfallEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"SmbDailyrainfall")==0) return SmbDailyrainfallEnum; 634 if (strcmp(name,"SmbDailysnowfall")==0) return SmbDailysnowfallEnum; 635 else if (strcmp(name,"SmbDailyrainfall")==0) return SmbDailyrainfallEnum; 635 636 else if (strcmp(name,"SmbDailydsradiation")==0) return SmbDailydsradiationEnum; 636 637 else if (strcmp(name,"SmbDailydlradiation")==0) return SmbDailydlradiationEnum; … … 751 752 else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum; 752 753 else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; 753 else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum; 757 if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum; 758 else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum; 758 759 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum; 759 760 else if (strcmp(name,"Waterheight")==0) return WaterheightEnum; … … 874 875 else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum; 875 876 else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; 876 else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"GaussTria")==0) return GaussTriaEnum; 880 if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum; 881 else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum; 881 882 else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum; 882 883 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum; … … 997 998 else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum; 998 999 else if (strcmp(name,"None")==0) return NoneEnum; 999 else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum; 1003 if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum; 1004 else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum; 1004 1005 else if (strcmp(name,"OldGradient")==0) return OldGradientEnum; 1005 1006 else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum; … … 1120 1121 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum; 1121 1122 else if (strcmp(name,"P2xP4")==0) return P2xP4Enum; 1122 else if (strcmp(name,"Paterson")==0) return PatersonEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"Pengrid")==0) return PengridEnum; 1126 if (strcmp(name,"Paterson")==0) return PatersonEnum; 1127 else if (strcmp(name,"Pengrid")==0) return PengridEnum; 1127 1128 else if (strcmp(name,"Penpair")==0) return PenpairEnum; 1128 1129 else if (strcmp(name,"Penta")==0) return PentaEnum; … … 1243 1244 else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum; 1244 1245 else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum; 1245 else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"StrainRate")==0) return StrainRateEnum; 1249 if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum; 1250 else if (strcmp(name,"StrainRate")==0) return StrainRateEnum; 1250 1251 else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum; 1251 1252 else if (strcmp(name,"StressTensor")==0) return StressTensorEnum; -
issm/trunk-jpl/src/m/classes/SMBgemb.m
r23468 r23808 22 22 isdensification; 23 23 isturbulentflux; 24 isclimatology; 24 25 25 26 %inputs: … … 159 160 self.isdensification=1; 160 161 self.isturbulentflux=1; 162 self.isclimatology=0; 161 163 162 164 self.aIdx = 1; … … 213 215 md = checkfield(md,'fieldname','smb.isdensification','values',[0 1]); 214 216 md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0 1]); 217 md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]); 215 218 216 219 md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'Inf',1,'>',273-100,'<',273+100); %-100/100 celsius min/max value … … 277 280 fielddisplay(self,'isdensification','run densification module (default true)'); 278 281 fielddisplay(self,'isturbulentflux','run turbulant heat fluxes module (default true)'); 282 fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)'); 279 283 fielddisplay(self,'Ta','2 m air temperature, in Kelvin'); 280 284 fielddisplay(self,'V','wind speed (m s-1)'); … … 370 374 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdensification','format','Boolean'); 371 375 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean'); 376 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean'); 372 377 373 378 WriteData(fid,prefix,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts); -
issm/trunk-jpl/src/m/classes/SMBgemb.py
r23716 r23808 132 132 string = "%s\n%s"%(string,fielddisplay(self,'isdensification','run densification module (default true)')) 133 133 string = "%s\n%s"%(string,fielddisplay(self,'isturbulentflux','run turbulant heat fluxes module (default true)')) 134 string = "%s\n%s"%(string,fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)')) 134 135 string = "%s\n%s"%(string,fielddisplay(self,'Ta','2 m air temperature, in Kelvin')) 135 136 string = "%s\n%s"%(string,fielddisplay(self,'V','wind speed (m s-1)')) … … 237 238 self.isdensification = 1 238 239 self.isturbulentflux = 1 240 self.isclimatology = 0 239 241 240 242 self.aIdx = 1 … … 291 293 md = checkfield(md,'fieldname','smb.isdensification','values',[0,1]) 292 294 md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0,1]) 295 md = checkfield(md,'fieldname','smb.isclimatology','values',[0,1]) 293 296 294 297 md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'Inf',1,'>',273-100,'<',273+100) #-100/100 celsius min/max value … … 357 360 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdensification','format','Boolean') 358 361 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean') 362 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean') 359 363 360 364 WriteData(fid,prefix,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
Note:
See TracChangeset
for help on using the changeset viewer.