Changeset 22448


Ignore:
Timestamp:
02/21/18 18:19:30 (7 years ago)
Author:
schlegel
Message:

CHG: add pdd factor input field

Location:
issm/trunk-jpl/src
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp

    r21709 r22448  
    2121       
    2222        int    smb_model;
    23         bool   isdelta18o,ismungsm,isd18opd;
     23        bool   isdelta18o,ismungsm,isd18opd,issetpddfac;
    2424       
    2525        /*Update elements: */
     
    9090                        iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
    9191                        iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
     92                        iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
    9293                        iomodel->FetchDataToInput(elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
    9394                        iomodel->FetchDataToInput(elements,"md.smb.s0p",SmbS0pEnum);
     
    9798                                iomodel->FetchDataToInput(elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
    9899                        }
    99 
     100                        if(issetpddfac){
     101                                iomodel->FetchDataToInput(elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);
     102                                iomodel->FetchDataToInput(elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);
     103                        }
    100104                        break;
    101105                case SMBgradientsEnum:
     
    137141        int     numoutputs;
    138142        char**  requestedoutputs = NULL;
    139         bool    isdelta18o,ismungsm,isd18opd,interp;
     143        bool    isdelta18o,ismungsm,isd18opd,issetpddfac,interp;
    140144        int     smb_model;
    141145        IssmDouble *temp = NULL;
     
    176180                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdelta18o",SmbIsdelta18oEnum));
    177181                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
     182                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
    178183                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
    179184                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
     
    208213                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
    209214                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.isd18opd",SmbIsd18opdEnum));
     215                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
    210216                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
    211217                        parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
     
    213219                        iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
    214220                        iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
     221                        iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
    215222                        if(isd18opd){
    216223                                iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o"); _assert_(N==2);
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r22429 r22448  
    21282128}
    21292129/*}}}*/
    2130 void       Element::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm){/*{{{*/
     2130void       Element::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac){/*{{{*/
    21312131
    21322132        int  numvertices = this->GetNumberOfVertices();
     
    21442144        IssmDouble* s0p=xNew<IssmDouble>(numvertices);
    21452145        IssmDouble* s0t=xNew<IssmDouble>(numvertices);
     2146        IssmDouble pddsnowfac = -1.;
     2147        IssmDouble pddicefac = -1.;
    21462148        IssmDouble rho_water,rho_ice,desfac,rlaps,rlapslgm;
    21472149        IssmDouble PfacTime,TdiffTime,sealevTime;
     
    21902192        }
    21912193
     2194        /*Recover pdd factors at time t.
     2195         *     This parameter is set, if the user wants to define the
     2196         *     pdd factors regionally, if issetpddfac==1 in the d18opdd method */
     2197        if (issetpddfac==1){
     2198                input=this->GetInput(SmbPddfacSnowEnum); _assert_(input);
     2199                input2=this->GetInput(SmbPddfacIceEnum); _assert_(input2);
     2200        }
     2201
    21922202        /*Recover info at the vertices: */
    21932203        GetInputListOnVertices(&h[0],ThicknessEnum);
     
    21982208        /*measure the surface mass balance*/
    21992209        for (int iv = 0; iv<numvertices; iv++){
     2210                gauss->GaussVertex(iv);
     2211                pddsnowfac=-1.;
     2212                pddicefac=-1.;
     2213                input->GetInputValue(&pddsnowfac,gauss);
     2214                input2->GetInputValue(&pddicefac,gauss);
    22002215                agd[iv]=PddSurfaceMassBalance(&monthlytemperatures[iv*12], &monthlyprec[iv*12],
    22012216                                        pdds, pds, &melt[iv], &accu[iv], signorm, yts, h[iv], s[iv],
    22022217                                        desfac, s0t[iv], s0p[iv],rlaps,rlapslgm,TdiffTime,sealevTime,
    2203                                         rho_water,rho_ice);
     2218                                        pddsnowfac,pddicefac,rho_water,rho_ice);
    22042219                /*Get yearlytemperatures */
    22052220                for(int month=0;month<12;month++) {
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r22379 r22448  
    140140                ElementMatrix*     NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
    141141                ElementVector*     NewElementVector(int approximation_enum=NoneApproximationEnum);
    142                 void               PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm);
     142                void               PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac);
    143143                IssmDouble         PureIceEnthalpy(IssmDouble pressure);
    144144                void               ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp

    r22249 r22448  
    188188
    189189        bool ismungsm;
     190        bool issetpddfac;
    190191
    191192        IssmDouble *pdds    = NULL;
     
    198199        // Get ismungsm parameter
    199200        femmodel->parameters->FindParam(&ismungsm,SmbIsmungsmEnum);
     201
     202        // Get issetpddfac parameter
     203        femmodel->parameters->FindParam(&issetpddfac,SmbIssetpddfacEnum);
    200204
    201205        /* initialize PDD (creation of a lookup table)*/
     
    253257        for(i=0;i<femmodel->elements->Size();i++){
    254258                element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    255                 element->PositiveDegreeDay(pdds,pds,signorm,ismungsm);
     259                element->PositiveDegreeDay(pdds,pds,signorm,ismungsm,issetpddfac);
    256260        }
    257261        /*free ressouces: */
  • issm/trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp

    r19325 r22448  
    44 */
    55
     6#include "../io/io.h"
    67#include "./elements.h"
    78#include "../Numerics/numerics.h"
     
    1112                                 IssmDouble signorm, IssmDouble yts, IssmDouble h, IssmDouble s, IssmDouble desfac,
    1213                                 IssmDouble s0t,IssmDouble s0p, IssmDouble rlaps,IssmDouble rlapslgm,
    13                                  IssmDouble TdiffTime,IssmDouble sealevTime,
     14                                 IssmDouble TdiffTime,IssmDouble sealevTime, IssmDouble pddsnowfac,IssmDouble pddicefac,
    1415                                 IssmDouble rho_water,IssmDouble rho_ice){
    1516
     
    6768  IssmDouble fsupT=0.5,  fsupndd=0.5;  // Tsurf mode factors for supice
    6869  IssmDouble pddtj, hmx2;
     70  IssmDouble pddsnowfac0=4.3, pddicefac0=8.3;
     71  IssmDouble snowfac, icefac;
    6972
    7073  sconv=(rho_water/rho_ice)/12.; //rhow_rain/rhoi / 12 months
     
    128131  prect = qmp;     // total precipitation during 1 year taking into account des. ef.
    129132  Tsum=Tsum/3;
     133
     134  snowfac=pddsnowfac0;
     135  icefac=pddicefac0;
     136  if (pddsnowfac>=0) {
     137          if (pddsnowfac<1.65) {
     138                  _printf0_("WARNING: Pdd snow factor input, " << pddsnowfac << ", results in a negative value. It will be ignored. \n");
     139          }
     140          else{
     141                snowfac=pddsnowfac;
     142          }
     143  }
     144  if (pddicefac>=0) {
     145          if (pddicefac>17.22) {
     146                  _printf0_("WARNING: Pdd ice factor input, " << pddsnowfac << ", results in a negative value. It will be ignored. \n");
     147          }
     148          else{
     149            icefac=pddicefac;
     150          }
     151  }
    130152 
    131153  /***** determine PDD factors *****/
    132154  if(Tsum< -1.) {
    133     snwmf=2.65*0.001;   //  ablation factor for snow per positive degree day.*0.001 to go from mm to m/ppd
     155    snwmf=(2.65+snowfac-pddsnowfac0)*0.001;   //  ablation factor for snow per positive degree day.*0.001 to go from mm to m/ppd
    134156    smf=17.22*0.001;    //  ablation factor for ice per pdd (Braithwaite 1995 from tarasov 2002)
    135157  }
    136158  else if(Tsum< 10){
    137     snwmf = (0.15*Tsum + 2.8)*0.001;
    138     smf = (0.0067*pow((10.-Tsum),3) + 8.3)*0.001;
     159    snwmf = (0.15*(Tsum+1) + (2.65+snowfac-pddsnowfac0))*0.001;
     160    smf = (((icefac-pddicefac0)/(Tsum+1))*pow((10.-Tsum),3) + pddicefac0)*0.001;
    139161  }
    140162  else{
    141     snwmf=4.3*0.001;
    142     smf=8.3*0.001;
     163    snwmf=snowfac*0.001;
     164    smf=icefac*0.001;
    143165  }
    144166  snwmf=0.95*snwmf;
  • issm/trunk-jpl/src/c/shared/Elements/elements.h

    r21826 r22448  
    2222                                 IssmDouble yts, IssmDouble h, IssmDouble s, IssmDouble desfac,IssmDouble s0t,
    2323                                 IssmDouble s0p, IssmDouble rlaps, IssmDouble rlapslgm,
    24                                  IssmDouble TdiffTime,IssmDouble sealevTime,
     24                                 IssmDouble TdiffTime,IssmDouble sealevTime,IssmDouble pddsnowfac,IssmDouble pddicefac,
    2525                                 IssmDouble rho_water, IssmDouble rho_ice);
    2626void ComputeDelta18oTemperaturePrecipitation(IssmDouble Delta18oSurfacePresent, IssmDouble Delta18oSurfaceLgm, IssmDouble Delta18oSurfaceTime,
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r22416 r22448  
    474474        SmbDelta18oSurfaceEnum,
    475475        SmbIsdelta18oEnum,
     476        SmbIssetpddfacEnum,
    476477        SmbIsmungsmEnum,
    477478        SmbIsd18opdEnum,
     
    481482        SmbTemperaturesLgmEnum,
    482483        SmbPrecipitationEnum,
     484        SmbPddfacSnowEnum,
     485        SmbPddfacIceEnum,
    483486        SmbDesfacEnum,
    484487        SmbS0pEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r22416 r22448  
    475475                case SmbDelta18oSurfaceEnum : return "SmbDelta18oSurface";
    476476                case SmbIsdelta18oEnum : return "SmbIsdelta18o";
     477                case SmbIssetpddfacEnum : return "SmbIssetpddfac";
    477478                case SmbIsmungsmEnum : return "SmbIsmungsm";
    478479                case SmbIsd18opdEnum : return "SmbIsd18opd";
     
    482483                case SmbTemperaturesLgmEnum : return "SmbTemperaturesLgm";
    483484                case SmbPrecipitationEnum : return "SmbPrecipitation";
     485                case SmbPddfacSnowEnum : return "SmbPddfacSnow";
     486                case SmbPddfacIceEnum : return "SmbPddfacIce";
    484487                case SmbDesfacEnum : return "SmbDesfac";
    485488                case SmbS0pEnum : return "SmbS0p";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r22416 r22448  
    484484              else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
    485485              else if (strcmp(name,"SmbIsdelta18o")==0) return SmbIsdelta18oEnum;
     486              else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum;
    486487              else if (strcmp(name,"SmbIsmungsm")==0) return SmbIsmungsmEnum;
    487488              else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
     
    491492              else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
    492493              else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
     494              else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
     495              else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
    493496              else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
    494497              else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
     
    503506              else if (strcmp(name,"SmbF")==0) return SmbFEnum;
    504507              else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
    505               else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
    506               else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
    507               else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
     511              if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
     512              else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
     513              else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
     514              else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
    512515              else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
    513516              else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
     
    626629              else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
    627630              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    628               else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    629               else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
    630               else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"J")==0) return JEnum;
     634              if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
     635              else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
     636              else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
     637              else if (strcmp(name,"J")==0) return JEnum;
    635638              else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
    636639              else if (strcmp(name,"Step")==0) return StepEnum;
     
    749752              else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
    750753              else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
    751               else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
    752               else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
    753               else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
     757              if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
     758              else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
     759              else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
     760              else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
    758761              else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
    759762              else if (strcmp(name,"None")==0) return NoneEnum;
     
    872875              else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
    873876              else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
    874               else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
    875               else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
    876               else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
     880              if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
     881              else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
     882              else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
     883              else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
    881884              else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
    882885              else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
     
    995998              else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
    996999              else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
    997               else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
    998               else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
    999               else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
     1003              if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
     1004              else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
     1005              else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
     1006              else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
    10041007              else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
    10051008              else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
     
    11181121              else if (strcmp(name,"Loads")==0) return LoadsEnum;
    11191122              else if (strcmp(name,"Materials")==0) return MaterialsEnum;
    1120               else if (strcmp(name,"Nodes")==0) return NodesEnum;
    1121               else if (strcmp(name,"Contours")==0) return ContoursEnum;
    1122               else if (strcmp(name,"Parameters")==0) return ParametersEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"Vertices")==0) return VerticesEnum;
     1126              if (strcmp(name,"Nodes")==0) return NodesEnum;
     1127              else if (strcmp(name,"Contours")==0) return ContoursEnum;
     1128              else if (strcmp(name,"Parameters")==0) return ParametersEnum;
     1129              else if (strcmp(name,"Vertices")==0) return VerticesEnum;
    11271130              else if (strcmp(name,"Results")==0) return ResultsEnum;
    11281131              else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
  • issm/trunk-jpl/src/m/classes/SMBd18opdd.m

    r21917 r22448  
    1717                ismungsm                  = 0;
    1818                isd18opd                  = 0;
     19                issetpddfac               = 0;
    1920                delta18o                  = NaN;
    2021                delta18o_surface          = NaN;
    2122                temperatures_presentday   = NaN;
    2223                precipitations_presentday = NaN;
     24                pddfac_snow               = NaN;
     25                pddfac_ice                = NaN;
    2326                requested_outputs      = {};
    2427        end
     
    3538                        if(self.isd18opd),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
    3639                        if(self.isd18opd),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
     40                        if(self.issetpddfac), self.pddfac_snow=project3d(md,'vector',self.pddfac_snow,'type','node');end
     41                        if(self.issetpddfac), self.pddfac_ice=project3d(md,'vector',self.pddfac_ice,'type','node');end
    3742                        self.s0p=project3d(md,'vector',self.s0p,'type','node');
    3843                        self.s0t=project3d(md,'vector',self.s0t,'type','node');
    3944
    4045                end % }}}
    41                         function list = defaultoutputs(self,md) % {{{
     46         function list = defaultoutputs(self,md) % {{{
    4247
    4348                        list = {''};
     
    6570                  self.dpermil    = 2.4;
    6671                  self.f          = 0.169;
     72                  self.issetpddfac = 0;
    6773                 
    6874                end % }}}
     
    8692                                   md = checkfield(md,'fieldname','smb.f','>=',0,'numel',1);
    8793                                end
     94                                if(self.issetpddfac==1)
     95                                        md = checkfield(md,'fieldname','smb.pddfac_snow','>=',0,'NaN',1,'Inf',1);
     96                                        md = checkfield(md,'fieldname','smb.pddfac_ice','>=',0,'NaN',1,'Inf',1);
     97                                end
    8898                        end
    8999                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
     
    94104                        disp(sprintf('\n   PDD and deltaO18 parameters:'));
    95105                        fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)');
     106                        fielddisplay(self,'issetpddfac','is user passing in defined pdd factors at each vertex (0 or 1, default is 0)');
    96107                        fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
    97108                        fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
     
    104115                                fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated');                           
    105116                           fielddisplay(self,'f','precip/temperature scaling factor, required if d18opd is activated');
     117                        end
     118                        if(self.issetpddfac==1)
     119                                fielddisplay(self,'pddfac_snow','Pdd factor for snow, at each vertex [mm ice equiv/day/degree C]');
     120                                fielddisplay(self,'pddfac_ice','Pdd factor for ice, at each vertex [mm ice equiv/day/degree C]');
    106121                        end
    107122                        fielddisplay(self,'requested_outputs','additional outputs requested');
     
    118133                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
    119134                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','isd18opd','format','Boolean');
     135                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
    120136                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
    121137                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
     
    133149                           WriteData(fid,prefix,'object',self,'class','smb','fieldname','f','format','Double');
    134150                        end
     151                        if self.issetpddfac==1
     152                                WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_snow','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
     153                                WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_ice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
     154                        end
    135155                       
    136156                        %process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBd18opdd.py

    r21917 r22448  
    2525                self.ismungsm                  = 0
    2626                self.isd18opd                  = 0
     27                self.setpddfac                 = 0
    2728                self.delta18o                  = float('NaN')
    2829                self.delta18o_surface          = float('NaN')
    2930                self.temperatures_presentday   = float('NaN')
    3031                self.precipitations_presentday = float('NaN')
     32                self.pddfac_snow               = float('NaN')
     33                self.pddfac_ice                = float('NaN')
    3134
    3235                #set defaults
     
    3841
    3942                string="%s\n%s"%(string,fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)'))
     43                string="%s\n%s"%(string,fielddisplay(self,'issetpddfac','is user passing in defined pdd factors at each vertex (0 or 1, default is 0)'))
    4044                string="%s\n%s"%(string,fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]'))
    4145                string="%s\n%s"%(string,fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'))
     
    4751                        string="%s\n%s"%(string,fielddisplay(self,'delta18o','delta18o [per mil], required if pdd is activated and delta18o activated'))
    4852                        string="%s\n%s"%(string,fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated'))
     53
     54                if self.issetpddfac==1:
     55                        string="%s\n%s"%(string,fielddisplay(self,'pddfac_snow','Pdd factor for snow, at each vertex [mm ice equiv/day/degree C]'))
     56                        string="%s\n%s"%(string,fielddisplay(self,'pddfac_ice','Pdd factor for ice, at each vertex [mm ice equiv/day/degree C]'))
    4957                string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
    5058
     
    5563                if self.isd18opd: self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node')
    5664                if self.isd18opd: self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node')
     65                if self.issetpddfac: self.pddfac_snow=project3d(md,'vector',self.pddfac_snow,'type','node')
     66                if self.issetpddfac: self.pddfac_ice=project3d(md,'vector',self.pddfac_ice,'type','node')
    5767                self.s0p=project3d(md,'vector',self.s0p,'type','node')
    5868                self.s0t=project3d(md,'vector',self.s0t,'type','node')
     
    8595                self.dpermil    = 2.4
    8696                self.f          = 0.169
     97                self.issetpddfac = 0
    8798                return self
    8899        #}}}
     
    107118                                md = checkfield(md,'fieldname','smb.f','>=',0,'numel',[1])
    108119
     120                        if self.issetpddfac:
     121                                md = checkfield(md,'fieldname','smb.pddfac_snow','>=',0,'NaN',1,'Inf',1)
     122                                md = checkfield(md,'fieldname','smb.pddfac_ice','>=',0,'NaN',1,'Inf',1)
     123
    109124                md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1)
    110125
     
    119134                WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
    120135                WriteData(fid,prefix,'object',self,'class','smb','fieldname','isd18opd','format','Boolean')
     136                WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
    121137                WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double')
    122138                WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
     
    133149                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','dpermil','format','Double')
    134150                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','f','format','Double')
     151
     152                if self.issetpddfac:
     153                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_snow','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
     154                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_ice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
     155
    135156                #process requested outputs
    136157                outputs = self.requested_outputs
  • issm/trunk-jpl/src/m/classes/SMBpdd.m

    r21049 r22448  
    1818                isdelta18o                = 0;
    1919                ismungsm                  = 0;
     20                issetpddfac               = 0;
    2021                delta18o                  = NaN;
    2122                delta18o_surface          = NaN;
     
    148149
    149150                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean');
     151                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
    150152                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
    151153                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
  • issm/trunk-jpl/src/m/classes/SMBpdd.py

    r21303 r22448  
    2626                self.isdelta18o                = 0
    2727                self.ismungsm                  = 0
     28                self.issetpddfac               = 0
    2829                self.delta18o                  = float('NaN')
    2930                self.delta18o_surface          = float('NaN')
     
    156157                WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean')
    157158                WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
     159                WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
    158160                WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double')
    159161                WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
Note: See TracChangeset for help on using the changeset viewer.