source:
issm/oecreview/Archive/22819-23185/ISSM-22851-22852.diff
Last change on this file was 23186, checked in by , 7 years ago | |
---|---|
File size: 27.0 KB |
-
../trunk-jpl/src/m/classes/SMBd18opdd.m
17 17 ismungsm = 0; 18 18 isd18opd = 0; 19 19 issetpddfac = 0; 20 istemperaturescaled = 0; 20 istemperaturescaled = 1; 21 isprecipscaled = 1; 21 22 delta18o = NaN; 22 23 delta18o_surface = NaN; 23 24 temperatures_presentday = NaN; 24 25 precipitations_presentday = NaN; 26 temperatures_reconstructed = NaN; 27 precipitations_reconstructed = NaN; 25 28 pddfac_snow = NaN; 26 29 pddfac_ice = NaN; 27 30 requested_outputs = {}; … … 38 41 function self = extrude(self,md) % {{{ 39 42 if(self.isd18opd),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end 40 43 if(self.isd18opd),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end 44 if(self.istemperaturescaled==0),self.temperatures_reconstructed=project3d(md,'vector',self.temperatures_reconstructed,'type','node');end 45 if(self.isprecipscaled),self.precipitations_reconstructed=project3d(md,'vector',self.precipitations_reconstructed,'type','node');end 41 46 if(self.issetpddfac), self.pddfac_snow=project3d(md,'vector',self.pddfac_snow,'type','node');end 42 47 if(self.issetpddfac), self.pddfac_ice=project3d(md,'vector',self.pddfac_ice,'type','node');end 43 48 self.s0p=project3d(md,'vector',self.s0p,'type','node'); … … 66 71 self.ismungsm = 0; 67 72 self.isd18opd = 1; 68 73 self.istemperaturescaled = 1; 74 self.isprecipscaled = 1; 69 75 self.desfac = 0.5; 70 76 self.rlaps = 6.5; 71 77 self.rlapslgm = 6.5; … … 92 98 md = checkfield(md,'fieldname','smb.delta18o','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 93 99 md = checkfield(md,'fieldname','smb.dpermil','>=',0,'numel',1); 94 100 md = checkfield(md,'fieldname','smb.f','>=',0,'numel',1); 101 if(self.istemperaturescaled==0) 102 lent=size(self.temperatures_reconstructed,2); 103 multt=ceil(lent/12)*12; 104 md = checkfield(md,'fieldname','smb.temperatures_reconstructed','size',[md.mesh.numberofvertices+1 multt],'NaN',1,'Inf',1,'timeseries',1); 105 end 106 if(self.isprecipscaled==0) 107 lenp=size(self.temperatures_reconstructed,2); 108 multp=ceil(lent/12)*12; 109 md = checkfield(md,'fieldname','smb.precipitations_reconstructed','size',[md.mesh.numberofvertices+1 multt],'NaN',1,'Inf',1,'timeseries',1); 110 end 95 111 end 96 112 if(self.issetpddfac==1) 97 113 md = checkfield(md,'fieldname','smb.pddfac_snow','>=',0,'NaN',1,'Inf',1); … … 113 129 if(self.isd18opd==1) 114 130 fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm/d18opd is activated'); 115 131 fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated'); 116 fielddisplay(self,'istemperaturescaled','if delta18o parametrisation from present day temperature and precipitation is activated, is temperature scaled to delta18o value? (0 or 1, default is 0)'); 132 fielddisplay(self,'istemperaturescaled','if delta18o parametrisation from present day temperature and precipitation is activated, is temperature scaled to delta18o value? (0 or 1, default is 1)'); 133 fielddisplay(self,'isprecipscaled','if delta18o parametrisation from present day temperature and precipitation is activated, is precip scaled to delta18o value? (0 or 1, default is 1)'); 134 if(self.istemperaturescaled==0) 135 fielddisplay(self,'temperatures_reconstructed','monthly historical surface temperatures [K], required if delta18o/mungsm/d18opd is activated and istemperaturescaled is not activated'); 136 end 137 if(self.isprecipscaled==0) 138 fielddisplay(self,'precipitations_reconstructed','monthly historical precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated and isprecipscaled is not activated'); 139 end 117 140 fielddisplay(self,'delta18o','delta18o [per mil], required if pdd is activated and d18opd activated'); 118 141 fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated'); 119 142 fielddisplay(self,'f','precip/temperature scaling factor, required if d18opd is activated'); … … 148 171 WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 149 172 WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 150 173 WriteData(fid,prefix,'object',self,'class','smb','fieldname','istemperaturescaled','format','Boolean'); 174 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isprecipscaled','format','Boolean'); 151 175 WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2,'yts',md.constants.yts); 152 176 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dpermil','format','Double'); 153 177 WriteData(fid,prefix,'object',self,'class','smb','fieldname','f','format','Double'); 178 if self.istemperaturescaled==0 179 WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_reconstructed','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 180 end 181 if self.isprecipscaled==0 182 WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_reconstructed','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 183 end 154 184 end 155 185 if self.issetpddfac==1 156 186 WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_snow','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); -
../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
278 278 SmbIssetpddfacEnum, 279 279 SmbIsshortwaveEnum, 280 280 SmbIstemperaturescaledEnum, 281 SmbIsprecipscaledEnum, 281 282 SmbIsthermalEnum, 282 283 SmbIsturbulentfluxEnum, 283 284 SmbKEnum, … … 532 533 SmbPrecipitationEnum, 533 534 SmbPrecipitationsLgmEnum, 534 535 SmbPrecipitationsPresentdayEnum, 536 SmbPrecipitationsReconstructedEnum, 535 537 SmbReEnum, 536 538 SmbRefreezeEnum, 537 539 SmbReiniEnum, … … 543 545 SmbTaEnum, 544 546 SmbTemperaturesLgmEnum, 545 547 SmbTemperaturesPresentdayEnum, 548 SmbTemperaturesReconstructedEnum, 546 549 SmbTEnum, 547 550 SmbTeValueEnum, 548 551 SmbTiniEnum, -
../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
286 286 case SmbIssetpddfacEnum : return "SmbIssetpddfac"; 287 287 case SmbIsshortwaveEnum : return "SmbIsshortwave"; 288 288 case SmbIstemperaturescaledEnum : return "SmbIstemperaturescaled"; 289 case SmbIsprecipscaledEnum : return "SmbIsprecipscaled"; 289 290 case SmbIsthermalEnum : return "SmbIsthermal"; 290 291 case SmbIsturbulentfluxEnum : return "SmbIsturbulentflux"; 291 292 case SmbKEnum : return "SmbK"; … … 538 539 case SmbPrecipitationEnum : return "SmbPrecipitation"; 539 540 case SmbPrecipitationsLgmEnum : return "SmbPrecipitationsLgm"; 540 541 case SmbPrecipitationsPresentdayEnum : return "SmbPrecipitationsPresentday"; 542 case SmbPrecipitationsReconstructedEnum : return "SmbPrecipitationsReconstructed"; 541 543 case SmbReEnum : return "SmbRe"; 542 544 case SmbRefreezeEnum : return "SmbRefreeze"; 543 545 case SmbReiniEnum : return "SmbReini"; … … 549 551 case SmbTaEnum : return "SmbTa"; 550 552 case SmbTemperaturesLgmEnum : return "SmbTemperaturesLgm"; 551 553 case SmbTemperaturesPresentdayEnum : return "SmbTemperaturesPresentday"; 554 case SmbTemperaturesReconstructedEnum : return "SmbTemperaturesReconstructed"; 552 555 case SmbTEnum : return "SmbT"; 553 556 case SmbTeValueEnum : return "SmbTeValue"; 554 557 case SmbTiniEnum : return "SmbTini"; -
../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
292 292 else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum; 293 293 else if (strcmp(name,"SmbIsshortwave")==0) return SmbIsshortwaveEnum; 294 294 else if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum; 295 else if (strcmp(name,"SmbIsprecipscaled")==0) return SmbIsprecipscaledEnum; 295 296 else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum; 296 297 else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum; 297 298 else if (strcmp(name,"SmbK")==0) return SmbKEnum; … … 381 382 else if (strcmp(name,"BasalforcingsGeothermalflux")==0) return BasalforcingsGeothermalfluxEnum; 382 383 else if (strcmp(name,"BasalforcingsGroundediceMeltingRate")==0) return BasalforcingsGroundediceMeltingRateEnum; 383 384 else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum; 384 else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum; 388 if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum; 389 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum; 389 390 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum; 390 391 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum; 391 392 else if (strcmp(name,"Base")==0) return BaseEnum; … … 504 505 else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum; 505 506 else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum; 506 507 else if (strcmp(name,"Sealevel")==0) return SealevelEnum; 507 else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum; 511 if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum; 512 else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum; 512 513 else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum; 513 514 else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum; 514 515 else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum; … … 550 551 else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum; 551 552 else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum; 552 553 else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum; 554 else if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum; 553 555 else if (strcmp(name,"SmbRe")==0) return SmbReEnum; 554 556 else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum; 555 557 else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum; … … 561 563 else if (strcmp(name,"SmbTa")==0) return SmbTaEnum; 562 564 else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum; 563 565 else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum; 566 else if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum; 564 567 else if (strcmp(name,"SmbT")==0) return SmbTEnum; 565 568 else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum; 566 569 else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum; … … 625 628 else if (strcmp(name,"VzSSA")==0) return VzSSAEnum; 626 629 else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum; 627 630 else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; 628 else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;629 else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;630 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 634 if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum; 635 else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum; 636 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum; 637 else if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 635 638 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 636 639 else if (strcmp(name,"InputsEND")==0) return InputsENDEnum; 637 640 else if (strcmp(name,"Absolute")==0) return AbsoluteEnum; … … 748 751 else if (strcmp(name,"FSSolver")==0) return FSSolverEnum; 749 752 else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum; 750 753 else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum; 751 else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;752 else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;753 else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"GenericOption")==0) return GenericOptionEnum; 757 if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; 758 else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum; 759 else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum; 760 else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum; 758 761 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 759 762 else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum; 760 763 else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum; … … 871 874 else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum; 872 875 else if (strcmp(name,"MaxVel")==0) return MaxVelEnum; 873 876 else if (strcmp(name,"MaxVx")==0) return MaxVxEnum; 874 else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;875 else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;876 else if (strcmp(name,"Melange")==0) return MelangeEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum; 880 if (strcmp(name,"MaxVy")==0) return MaxVyEnum; 881 else if (strcmp(name,"MaxVz")==0) return MaxVzEnum; 882 else if (strcmp(name,"Melange")==0) return MelangeEnum; 883 else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum; 881 884 else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum; 882 885 else if (strcmp(name,"MeshX")==0) return MeshXEnum; 883 886 else if (strcmp(name,"MeshY")==0) return MeshYEnum; … … 994 997 else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum; 995 998 else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum; 996 999 else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum; 997 else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;998 else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;999 else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum; 1003 if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum; 1004 else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum; 1005 else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum; 1006 else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum; 1004 1007 else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum; 1005 1008 else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum; 1006 1009 else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum; … … 1117 1120 else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum; 1118 1121 else if (strcmp(name,"TransientInput")==0) return TransientInputEnum; 1119 1122 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; 1120 else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;1121 else if (strcmp(name,"Tria")==0) return TriaEnum;1122 else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum; 1126 if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum; 1127 else if (strcmp(name,"Tria")==0) return TriaEnum; 1128 else if (strcmp(name,"TriaInput")==0) return TriaInputEnum; 1129 else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum; 1127 1130 else if (strcmp(name,"VectorParam")==0) return VectorParamEnum; 1128 1131 else if (strcmp(name,"Vertex")==0) return VertexEnum; 1129 1132 else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum; -
../trunk-jpl/src/c/shared/Elements/elements.h
33 33 IssmDouble* TemperaturesLgm, IssmDouble* TemperaturesPresentday, 34 34 IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout); 35 35 void ComputeD18OTemperaturePrecipitationFromPD(IssmDouble d018,IssmDouble dpermil,bool isTemperatureScaled, 36 IssmDouble f, IssmDouble* PrecipitationPresentday,IssmDouble* TemperaturePresentday, 37 IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout); 36 bool isPrecipScaled, IssmDouble f, IssmDouble* PrecipitationPresentday,IssmDouble* TemperaturePresentday, 37 IssmDouble* PrecipitationReconstructed,IssmDouble* TemperatureReconstructed, IssmDouble* monthlytemperaturesout, 38 IssmDouble* monthlyprecout); 38 39 IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction, IssmDouble dt=0.); 39 40 IssmDouble StressIntensityIntegralWeight(IssmDouble depth, IssmDouble water_depth, IssmDouble thickness); 40 41 -
../trunk-jpl/src/c/shared/Elements/ComputeD18OTemperaturePrecipitationFromPD.cpp
7 7 #include "../Numerics/numerics.h" 8 8 9 9 void ComputeD18OTemperaturePrecipitationFromPD(IssmDouble d018,IssmDouble dpermil,bool isTemperatureScaled, 10 IssmDouble f, IssmDouble* PrecipitationPresentday,IssmDouble* TemperaturePresentday, 11 IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout){ 10 bool isPrecipScaled, IssmDouble f, IssmDouble* PrecipitationPresentday,IssmDouble* TemperaturePresentday, 11 IssmDouble* PrecipitationReconstructed,IssmDouble* TemperatureReconstructed, IssmDouble* monthlytemperaturesout, 12 IssmDouble* monthlyprecout){ 12 13 13 14 IssmDouble monthlytemperaturestmp[12],monthlyprectmp[12]; 14 15 IssmDouble deltaTemp; … … 22 23 for (int imonth = 0; imonth<12; imonth++){ 23 24 24 25 if (isTemperatureScaled)monthlytemperaturestmp[imonth] = TemperaturePresentday[imonth] + deltaTemp; 25 else monthlytemperaturestmp[imonth] = TemperaturePresentday[imonth]; 26 else{ 27 monthlytemperaturestmp[imonth] = TemperatureReconstructed[imonth]; 28 deltaTemp=TemperatureReconstructed[imonth]-TemperaturePresentday[imonth]; 29 } 26 30 27 monthlyprectmp[imonth] = PrecipitationPresentday[imonth]*exp((f/dpermil)*deltaTemp); 28 31 if (isPrecipScaled)monthlyprectmp[imonth] = PrecipitationPresentday[imonth]*exp((f/dpermil)*deltaTemp); 32 else monthlyprectmp[imonth] = PrecipitationReconstructed[imonth]; 33 29 34 /*Assign output pointer*/ 30 35 *(monthlytemperaturesout+imonth) = monthlytemperaturestmp[imonth]; 31 36 *(monthlyprecout+imonth) = monthlyprectmp[imonth]; -
../trunk-jpl/src/c/classes/Elements/Element.cpp
534 534 IssmDouble* monthlyprec=xNew<IssmDouble>(12*numvertices); 535 535 IssmDouble* TemperaturesPresentday=xNew<IssmDouble>(12*numvertices); 536 536 IssmDouble* PrecipitationsPresentday=xNew<IssmDouble>(12*numvertices); 537 IssmDouble* TemperaturesReconstructed=xNew<IssmDouble>(12*numvertices); 538 IssmDouble* PrecipitationsReconstructed=xNew<IssmDouble>(12*numvertices); 537 539 IssmDouble* tmp=xNew<IssmDouble>(numvertices); 538 540 IssmDouble Delta18oTime; 539 541 IssmDouble dpermil,f; 540 542 IssmDouble time,yts,time_yr,month,time_clim; 541 543 bool isTemperatureScaled=true; 544 bool isPrecipScaled=true; 542 545 this->parameters->FindParam(&time,TimeEnum); 543 546 this->parameters->FindParam(&yts,ConstantsYtsEnum); 544 547 this->parameters->FindParam(&f,SmbFEnum); … … 548 551 /*Get some pdd parameters*/ 549 552 dpermil=this->matpar->GetMaterialParameter(SmbDpermilEnum); 550 553 554 this->parameters->FindParam(&isTemperatureScaled,SmbIstemperaturescaledEnum); 555 this->parameters->FindParam(&isPrecipScaled,SmbIsprecipscaledEnum); 556 551 557 /*Recover present day temperature and precipitation*/ 552 558 Input* input=this->inputs->GetInput(SmbTemperaturesPresentdayEnum); _assert_(input); 553 559 Input* input2=this->inputs->GetInput(SmbPrecipitationsPresentdayEnum); _assert_(input2); 560 Input* input3=NULL; 561 if(!isTemperatureScaled){ 562 input3=this->inputs->GetInput(SmbTemperaturesPresentdayEnum); _assert_(input3); 563 } 564 Input* input4=NULL; 565 if(!isPrecipScaled){ 566 input4=this->inputs->GetInput(SmbPrecipitationsPresentdayEnum); _assert_(input4); 567 } 554 568 int offset; 555 569 556 570 offset=dynamic_cast<TransientInput*>(input)->GetTimeInputOffset(time_yr); … … 565 579 gauss->GaussVertex(iv); 566 580 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,time_clim+month/12.*yts); 567 581 input2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss,time_clim+month/12.*yts); 582 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; 568 583 569 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; 584 if(!isTemperatureScaled){ 585 input3->GetInputValue(&TemperaturesReconstructed[iv*12+month],gauss,time_clim+month/12.*yts); 586 } 587 if(!isPrecipScaled){ 588 input4->GetInputValue(&PrecipitationsReconstructed[iv*12+month],gauss,time_clim+month/12.*yts); 589 PrecipitationsReconstructed[iv*12+month]=PrecipitationsReconstructed[iv*12+month]*yts; 590 } 591 570 592 } 571 593 } 572 594 573 595 /*Recover interpolation parameters at time t*/ 574 596 this->parameters->FindParam(&Delta18oTime,SmbDelta18oEnum,time); 575 this->parameters->FindParam(&isTemperatureScaled,SmbIstemperaturescaledEnum);576 597 577 598 /*Compute the temperature and precipitation*/ 578 599 for(int iv=0;iv<numvertices;iv++){ 579 ComputeD18OTemperaturePrecipitationFromPD(Delta18oTime,dpermil,isTemperatureScaled,f, 580 &PrecipitationsPresentday[iv*12], &TemperaturesPresentday[iv*12], 600 ComputeD18OTemperaturePrecipitationFromPD(Delta18oTime,dpermil,isTemperatureScaled,isPrecipScaled, 601 f,&PrecipitationsPresentday[iv*12], &TemperaturesPresentday[iv*12], 602 &PrecipitationsReconstructed[iv*12], &TemperaturesReconstructed[iv*12], 581 603 &monthlytemperatures[iv*12], &monthlyprec[iv*12]); 582 604 } 583 605 … … 622 644 xDelete<IssmDouble>(monthlyprec); 623 645 xDelete<IssmDouble>(TemperaturesPresentday); 624 646 xDelete<IssmDouble>(PrecipitationsPresentday); 647 xDelete<IssmDouble>(TemperaturesReconstructed); 648 xDelete<IssmDouble>(PrecipitationsReconstructed); 625 649 xDelete<IssmDouble>(tmp); 626 650 627 651 } -
../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
20 20 void SmbAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 int smb_model; 23 bool isdelta18o,ismungsm,isd18opd,issetpddfac ;23 bool isdelta18o,ismungsm,isd18opd,issetpddfac,isprecipscaled,istemperaturescaled; 24 24 25 25 /*Update elements: */ 26 26 int counter=0; … … 82 82 iomodel->FetchDataToInput(elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum); 83 83 iomodel->FetchDataToInput(elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 84 84 iomodel->FetchDataToInput(elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum); 85 } 86 else{ 85 }else{ 87 86 iomodel->FetchDataToInput(elements,"md.smb.precipitation",SmbPrecipitationEnum); 88 87 iomodel->FetchDataToInput(elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum); 89 88 } 90 89 break; 91 90 case SMBd18opddEnum: 91 iomodel->FindConstant(&istemperaturescaled,"md.smb.istemperaturescaled"); 92 iomodel->FindConstant(&isprecipscaled,"md.smb.isprecipscaled"); 92 93 iomodel->FindConstant(&ismungsm,"md.smb.ismungsm"); 93 94 iomodel->FindConstant(&isd18opd,"md.smb.isd18opd"); 94 95 iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac"); … … 98 99 if(isd18opd){ 99 100 iomodel->FetchDataToInput(elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum); 100 101 iomodel->FetchDataToInput(elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 102 if(!istemperaturescaled){ 103 iomodel->FetchDataToInput(elements,"md.smb.temperatures_reconstructed",SmbTemperaturesReconstructedEnum); 104 } 105 if(!isprecipscaled){ 106 iomodel->FetchDataToInput(elements,"md.smb.precipitations_reconstructed",SmbPrecipitationsReconstructedEnum); 107 } 101 108 } 102 109 if(issetpddfac){ 103 110 iomodel->FetchDataToInput(elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.); … … 219 226 if(isd18opd){ 220 227 parameters->AddObject(iomodel->CopyConstantObject("md.smb.f",SmbFEnum)); 221 228 parameters->AddObject(iomodel->CopyConstantObject("md.smb.istemperaturescaled",SmbIstemperaturescaledEnum)); 229 parameters->AddObject(iomodel->CopyConstantObject("md.smb.isprecipscaled",SmbIsprecipscaledEnum)); 222 230 iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o"); _assert_(N==2); 223 231 parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M)); 224 232 iomodel->DeleteData(temp,"md.smb.delta18o");
Note:
See TracBrowser
for help on using the repository browser.