Changeset 19172


Ignore:
Timestamp:
03/04/15 11:09:39 (10 years ago)
Author:
lemorzad
Message:

new method to interpolate present day temp and prec from delta O18

Location:
issm/trunk-jpl
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/m4/analyses.m4

    r18950 r19172  
    1919if test "x$ADJOINTBALANCETHICKNESS" = "xyes"; then
    2020        HAVE_ADJOINTBALANCETHICKNESS=yes
    21         AC_DEFINE([_HAVE_ADJOINTBALANCETHICKNESS_],[1],[with AdjointBalancethicknesscapability])
     21        AC_DEFINE([_HAVE_ADJOINTBALANCETHICKNESS_],[1],[with AdjointBalancethickness capability])
    2222fi
    2323AM_CONDITIONAL([ADJOINTBALANCETHICKNESS], [test x$HAVE_ADJOINTBALANCETHICKNESS = xyes])
     
    3333if test "x$ADJOINTBALANCETHICKNESS2" = "xyes"; then
    3434        HAVE_ADJOINTBALANCETHICKNESS2=yes
    35         AC_DEFINE([_HAVE_ADJOINTBALANCETHICKNESS2_],[1],[with AdjointBalancethickness2capability])
     35        AC_DEFINE([_HAVE_ADJOINTBALANCETHICKNESS2_],[1],[with AdjointBalancethickness2 capability])
    3636fi
    3737AM_CONDITIONAL([ADJOINTBALANCETHICKNESS2], [test x$HAVE_ADJOINTBALANCETHICKNESS2 = xyes])
     
    4747if test "x$ADJOINTHORIZ" = "xyes"; then
    4848        HAVE_ADJOINTHORIZ=yes
    49         AC_DEFINE([_HAVE_ADJOINTHORIZ_],[1],[with AdjointHorizcapability])
     49        AC_DEFINE([_HAVE_ADJOINTHORIZ_],[1],[with AdjointHoriz capability])
    5050fi
    5151AM_CONDITIONAL([ADJOINTHORIZ], [test x$HAVE_ADJOINTHORIZ = xyes])
     
    6161if test "x$BALANCETHICKNESS" = "xyes"; then
    6262        HAVE_BALANCETHICKNESS=yes
    63         AC_DEFINE([_HAVE_BALANCETHICKNESS_],[1],[with Balancethicknesscapability])
     63        AC_DEFINE([_HAVE_BALANCETHICKNESS_],[1],[with Balancethickness capability])
    6464fi
    6565AM_CONDITIONAL([BALANCETHICKNESS], [test x$HAVE_BALANCETHICKNESS = xyes])
     
    7575if test "x$BALANCETHICKNESS2" = "xyes"; then
    7676        HAVE_BALANCETHICKNESS2=yes
    77         AC_DEFINE([_HAVE_BALANCETHICKNESS2_],[1],[with Balancethickness2capability])
     77        AC_DEFINE([_HAVE_BALANCETHICKNESS2_],[1],[with Balancethickness2 capability])
    7878fi
    7979AM_CONDITIONAL([BALANCETHICKNESS2], [test x$HAVE_BALANCETHICKNESS2 = xyes])
     
    8989if test "x$BALANCETHICKNESSSOFT" = "xyes"; then
    9090        HAVE_BALANCETHICKNESSSOFT=yes
    91         AC_DEFINE([_HAVE_BALANCETHICKNESSSOFT_],[1],[with BalancethicknessSoftcapability])
     91        AC_DEFINE([_HAVE_BALANCETHICKNESSSOFT_],[1],[with BalancethicknessSoft capability])
    9292fi
    9393AM_CONDITIONAL([BALANCETHICKNESSSOFT], [test x$HAVE_BALANCETHICKNESSSOFT = xyes])
     
    103103if test "x$BALANCEVELOCITY" = "xyes"; then
    104104        HAVE_BALANCEVELOCITY=yes
    105         AC_DEFINE([_HAVE_BALANCEVELOCITY_],[1],[with Balancevelocitycapability])
     105        AC_DEFINE([_HAVE_BALANCEVELOCITY_],[1],[with Balancevelocity capability])
    106106fi
    107107AM_CONDITIONAL([BALANCEVELOCITY], [test x$HAVE_BALANCEVELOCITY = xyes])
     
    117117if test "x$L2PROJECTIONEPL" = "xyes"; then
    118118        HAVE_L2PROJECTIONEPL=yes
    119         AC_DEFINE([_HAVE_L2PROJECTIONEPL_],[1],[with L2ProjectionEPLcapability])
     119        AC_DEFINE([_HAVE_L2PROJECTIONEPL_],[1],[with L2ProjectionEPL capability])
    120120fi
    121121AM_CONDITIONAL([L2PROJECTIONEPL], [test x$HAVE_L2PROJECTIONEPL = xyes])
     
    131131if test "x$L2PROJECTIONBASE" = "xyes"; then
    132132        HAVE_L2PROJECTIONBASE=yes
    133         AC_DEFINE([_HAVE_L2PROJECTIONBASE_],[1],[with L2ProjectionBasecapability])
     133        AC_DEFINE([_HAVE_L2PROJECTIONBASE_],[1],[with L2ProjectionBase capability])
    134134fi
    135135AM_CONDITIONAL([L2PROJECTIONBASE], [test x$HAVE_L2PROJECTIONBASE = xyes])
     
    145145if test "x$DAMAGEEVOLUTION" = "xyes"; then
    146146        HAVE_DAMAGEEVOLUTION=yes
    147         AC_DEFINE([_HAVE_DAMAGEEVOLUTION_],[1],[with DamageEvolutioncapability])
     147        AC_DEFINE([_HAVE_DAMAGEEVOLUTION_],[1],[with DamageEvolution capability])
    148148fi
    149149AM_CONDITIONAL([DAMAGEEVOLUTION], [test x$HAVE_DAMAGEEVOLUTION = xyes])
     
    159159if test "x$STRESSBALANCE" = "xyes"; then
    160160        HAVE_STRESSBALANCE=yes
    161         AC_DEFINE([_HAVE_STRESSBALANCE_],[1],[with Stressbalancecapability])
     161        AC_DEFINE([_HAVE_STRESSBALANCE_],[1],[with Stressbalance capability])
    162162fi
    163163AM_CONDITIONAL([STRESSBALANCE], [test x$HAVE_STRESSBALANCE = xyes])
     
    173173if test "x$STRESSBALANCESIA" = "xyes"; then
    174174        HAVE_STRESSBALANCESIA=yes
    175         AC_DEFINE([_HAVE_STRESSBALANCESIA_],[1],[with StressbalanceSIAcapability])
     175        AC_DEFINE([_HAVE_STRESSBALANCESIA_],[1],[with StressbalanceSIA capability])
    176176fi
    177177AM_CONDITIONAL([STRESSBALANCESIA], [test x$HAVE_STRESSBALANCESIA = xyes])
     
    187187if test "x$STRESSBALANCEVERTICAL" = "xyes"; then
    188188        HAVE_STRESSBALANCEVERTICAL=yes
    189         AC_DEFINE([_HAVE_STRESSBALANCEVERTICAL_],[1],[with StressbalanceVerticalcapability])
     189        AC_DEFINE([_HAVE_STRESSBALANCEVERTICAL_],[1],[with StressbalanceVertical capability])
    190190fi
    191191AM_CONDITIONAL([STRESSBALANCEVERTICAL], [test x$HAVE_STRESSBALANCEVERTICAL = xyes])
     
    201201if test "x$ENTHALPY" = "xyes"; then
    202202        HAVE_ENTHALPY=yes
    203         AC_DEFINE([_HAVE_ENTHALPY_],[1],[with Enthalpycapability])
     203        AC_DEFINE([_HAVE_ENTHALPY_],[1],[with Enthalpy capability])
    204204fi
    205205AM_CONDITIONAL([ENTHALPY], [test x$HAVE_ENTHALPY = xyes])
     
    215215if test "x$HYDROLOGYSHREVE" = "xyes"; then
    216216        HAVE_HYDROLOGYSHREVE=yes
    217         AC_DEFINE([_HAVE_HYDROLOGYSHREVE_],[1],[with HydrologyShrevecapability])
     217        AC_DEFINE([_HAVE_HYDROLOGYSHREVE_],[1],[with HydrologyShreve capability])
    218218fi
    219219AM_CONDITIONAL([HYDROLOGYSHREVE], [test x$HAVE_HYDROLOGYSHREVE = xyes])
     
    229229if test "x$HYDROLOGYDCINEFFICIENT" = "xyes"; then
    230230        HAVE_HYDROLOGYDCINEFFICIENT=yes
    231         AC_DEFINE([_HAVE_HYDROLOGYDCINEFFICIENT_],[1],[with HydrologyDCInefficientcapability])
     231        AC_DEFINE([_HAVE_HYDROLOGYDCINEFFICIENT_],[1],[with HydrologyDCInefficient capability])
    232232fi
    233233AM_CONDITIONAL([HYDROLOGYDCINEFFICIENT], [test x$HAVE_HYDROLOGYDCINEFFICIENT = xyes])
     
    243243if test "x$HYDROLOGYDCEFFICIENT" = "xyes"; then
    244244        HAVE_HYDROLOGYDCEFFICIENT=yes
    245         AC_DEFINE([_HAVE_HYDROLOGYDCEFFICIENT_],[1],[with HydrologyDCEfficientcapability])
     245        AC_DEFINE([_HAVE_HYDROLOGYDCEFFICIENT_],[1],[with HydrologyDCEfficient capability])
    246246fi
    247247AM_CONDITIONAL([HYDROLOGYDCEFFICIENT], [test x$HAVE_HYDROLOGYDCEFFICIENT = xyes])
     
    257257if test "x$MELTING" = "xyes"; then
    258258        HAVE_MELTING=yes
    259         AC_DEFINE([_HAVE_MELTING_],[1],[with Meltingcapability])
     259        AC_DEFINE([_HAVE_MELTING_],[1],[with Melting capability])
    260260fi
    261261AM_CONDITIONAL([MELTING], [test x$HAVE_MELTING = xyes])
     
    271271if test "x$MASSTRANSPORT" = "xyes"; then
    272272        HAVE_MASSTRANSPORT=yes
    273         AC_DEFINE([_HAVE_MASSTRANSPORT_],[1],[with Masstransportcapability])
     273        AC_DEFINE([_HAVE_MASSTRANSPORT_],[1],[with Masstransport capability])
    274274fi
    275275AM_CONDITIONAL([MASSTRANSPORT], [test x$HAVE_MASSTRANSPORT = xyes])
     
    285285if test "x$FREESURFACEBASE" = "xyes"; then
    286286        HAVE_FREESURFACEBASE=yes
    287         AC_DEFINE([_HAVE_FREESURFACEBASE_],[1],[with FreeSurfaceBasecapability])
     287        AC_DEFINE([_HAVE_FREESURFACEBASE_],[1],[with FreeSurfaceBase capability])
    288288fi
    289289AM_CONDITIONAL([FREESURFACEBASE], [test x$HAVE_FREESURFACEBASE = xyes])
     
    299299if test "x$FREESURFACETOP" = "xyes"; then
    300300        HAVE_FREESURFACETOP=yes
    301         AC_DEFINE([_HAVE_FREESURFACETOP_],[1],[with FreeSurfaceTopcapability])
     301        AC_DEFINE([_HAVE_FREESURFACETOP_],[1],[with FreeSurfaceTop capability])
    302302fi
    303303AM_CONDITIONAL([FREESURFACETOP], [test x$HAVE_FREESURFACETOP = xyes])
     
    313313if test "x$EXTRUDEFROMBASE" = "xyes"; then
    314314        HAVE_EXTRUDEFROMBASE=yes
    315         AC_DEFINE([_HAVE_EXTRUDEFROMBASE_],[1],[with ExtrudeFromBasecapability])
     315        AC_DEFINE([_HAVE_EXTRUDEFROMBASE_],[1],[with ExtrudeFromBase capability])
    316316fi
    317317AM_CONDITIONAL([EXTRUDEFROMBASE], [test x$HAVE_EXTRUDEFROMBASE = xyes])
     
    327327if test "x$EXTRUDEFROMTOP" = "xyes"; then
    328328        HAVE_EXTRUDEFROMTOP=yes
    329         AC_DEFINE([_HAVE_EXTRUDEFROMTOP_],[1],[with ExtrudeFromTopcapability])
     329        AC_DEFINE([_HAVE_EXTRUDEFROMTOP_],[1],[with ExtrudeFromTop capability])
    330330fi
    331331AM_CONDITIONAL([EXTRUDEFROMTOP], [test x$HAVE_EXTRUDEFROMTOP = xyes])
     
    341341if test "x$DEPTHAVERAGE" = "xyes"; then
    342342        HAVE_DEPTHAVERAGE=yes
    343         AC_DEFINE([_HAVE_DEPTHAVERAGE_],[1],[with DepthAveragecapability])
     343        AC_DEFINE([_HAVE_DEPTHAVERAGE_],[1],[with DepthAverage capability])
    344344fi
    345345AM_CONDITIONAL([DEPTHAVERAGE], [test x$HAVE_DEPTHAVERAGE = xyes])
     
    355355if test "x$SMOOTH" = "xyes"; then
    356356        HAVE_SMOOTH=yes
    357         AC_DEFINE([_HAVE_SMOOTH_],[1],[with Smoothcapability])
     357        AC_DEFINE([_HAVE_SMOOTH_],[1],[with Smooth capability])
    358358fi
    359359AM_CONDITIONAL([SMOOTH], [test x$HAVE_SMOOTH = xyes])
     
    369369if test "x$THERMAL" = "xyes"; then
    370370        HAVE_THERMAL=yes
    371         AC_DEFINE([_HAVE_THERMAL_],[1],[with Thermalcapability])
     371        AC_DEFINE([_HAVE_THERMAL_],[1],[with Thermal capability])
    372372fi
    373373AM_CONDITIONAL([THERMAL], [test x$HAVE_THERMAL = xyes])
     
    383383if test "x$UZAWAPRESSURE" = "xyes"; then
    384384        HAVE_UZAWAPRESSURE=yes
    385         AC_DEFINE([_HAVE_UZAWAPRESSURE_],[1],[with UzawaPressurecapability])
     385        AC_DEFINE([_HAVE_UZAWAPRESSURE_],[1],[with UzawaPressure capability])
    386386fi
    387387AM_CONDITIONAL([UZAWAPRESSURE], [test x$HAVE_UZAWAPRESSURE = xyes])
     
    397397if test "x$GIA" = "xyes"; then
    398398        HAVE_GIA=yes
    399         AC_DEFINE([_HAVE_GIA_],[1],[with Giacapability])
     399        AC_DEFINE([_HAVE_GIA_],[1],[with Gia capability])
    400400fi
    401401AM_CONDITIONAL([GIA], [test x$HAVE_GIA = xyes])
    402402AC_MSG_RESULT($HAVE_GIA)
    403 dnl }}}
    404 dnl with-Seaice{{{
    405 AC_ARG_WITH([Seaice],
    406         AS_HELP_STRING([--with-Seaice = YES], [compile with Seaice capabilities (default is yes)]),
    407         [SEAICE=$withval],[SEAICE=yes])
    408 AC_MSG_CHECKING(for Seaice capability compilation)
    409 
    410 HAVE_SEAICE=no
    411 if test "x$SEAICE" = "xyes"; then
    412         HAVE_SEAICE=yes
    413         AC_DEFINE([_HAVE_SEAICE_],[1],[with Seaicecapability])
    414 fi
    415 AM_CONDITIONAL([SEAICE], [test x$HAVE_SEAICE = xyes])
    416 AC_MSG_RESULT($HAVE_SEAICE)
    417403dnl }}}
    418404dnl with-Meshdeformation{{{
     
    425411if test "x$MESHDEFORMATION" = "xyes"; then
    426412        HAVE_MESHDEFORMATION=yes
    427         AC_DEFINE([_HAVE_MESHDEFORMATION_],[1],[with Meshdeformationcapability])
     413        AC_DEFINE([_HAVE_MESHDEFORMATION_],[1],[with Meshdeformation capability])
    428414fi
    429415AM_CONDITIONAL([MESHDEFORMATION], [test x$HAVE_MESHDEFORMATION = xyes])
     
    439425if test "x$LEVELSET" = "xyes"; then
    440426        HAVE_LEVELSET=yes
    441         AC_DEFINE([_HAVE_LEVELSET_],[1],[with Levelsetcapability])
     427        AC_DEFINE([_HAVE_LEVELSET_],[1],[with Levelset capability])
    442428fi
    443429AM_CONDITIONAL([LEVELSET], [test x$HAVE_LEVELSET = xyes])
     
    453439if test "x$EXTRAPOLATION" = "xyes"; then
    454440        HAVE_EXTRAPOLATION=yes
    455         AC_DEFINE([_HAVE_EXTRAPOLATION_],[1],[with Extrapolationcapability])
     441        AC_DEFINE([_HAVE_EXTRAPOLATION_],[1],[with Extrapolation capability])
    456442fi
    457443AM_CONDITIONAL([EXTRAPOLATION], [test x$HAVE_EXTRAPOLATION = xyes])
     
    467453if test "x$LSFREINITIALIZATION" = "xyes"; then
    468454        HAVE_LSFREINITIALIZATION=yes
    469         AC_DEFINE([_HAVE_LSFREINITIALIZATION_],[1],[with LsfReinitializationcapability])
     455        AC_DEFINE([_HAVE_LSFREINITIALIZATION_],[1],[with LsfReinitialization capability])
    470456fi
    471457AM_CONDITIONAL([LSFREINITIALIZATION], [test x$HAVE_LSFREINITIALIZATION = xyes])
  • issm/trunk-jpl/src/c/Makefile.am

    r19087 r19172  
    114114                                        ./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
    115115                                        ./shared/Elements/ComputeMungsmTemperaturePrecipitation.cpp\
     116                                        ./shared/Elements/ComputeD18OTemperaturePrecipitationFromPD.cpp\
    116117                                        ./shared/Elements/DrainageFunctionWaterfraction.cpp\
    117118                                        ./shared/String/DescriptorIndex.cpp\
  • issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r18968 r19172  
    120120        int    stabilization,finiteelement,smb_model;
    121121        bool   dakota_analysis;
    122         bool   isdelta18o,ismungsm;
     122        bool   isdelta18o,ismungsm,isd18opd;
    123123        bool   isgroundingline;
    124124        bool   islevelset;
     
    180180                        iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
    181181                        iomodel->Constant(&ismungsm,SurfaceforcingsIsmungsmEnum);
     182                        iomodel->Constant(&isd18opd,SurfaceforcingsIsd18opdEnum);
    182183                        iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
    183184                        if(isdelta18o || ismungsm){
     
    187188                                iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsLgmEnum);
    188189                        }
     190                        else if (isd18opd){
     191                                iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
     192                                iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
     193                        }
    189194                        else{
    190195                                iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
    191196                                iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
    192197                        }
    193 
    194198                        break;
    195199                case SMBgradientsEnum:
  • issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

    r19162 r19172  
    3535        }
    3636        else{
    37                 IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,finiteelement);
     37                IoModelToDynamicConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,finiteelement);
    3838        }
    3939
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r19154 r19172  
    183183                virtual void       Delta18oParameterization(void)=0;
    184184                virtual void       MungsmtpParameterization(void)=0;
     185                virtual void       Delta18opdParameterization(void)=0;
    185186                virtual void       ElementResponse(IssmDouble* presponse,int response_enum)=0;
    186187                virtual void       ElementSizes(IssmDouble* phx,IssmDouble* phy,IssmDouble* phz)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r19137 r19172  
    713713        this->inputs->AddInput(NewPrecipitationInput);
    714714       
     715        this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum,-1);
     716        this->InputExtrude(SurfaceforcingsPrecipitationEnum,-1);
     717
     718        /*clean-up*/
     719        delete gauss;
     720}
     721/*}}}*/
     722void       Penta::Delta18opdParameterization(void){/*{{{*/
     723        /*Are we on the base? If not, return*/
     724        if(!IsOnBase()) return;
     725
     726        int        i;
     727        IssmDouble monthlytemperatures[NUMVERTICES][12],monthlyprec[NUMVERTICES][12];
     728        IssmDouble TemperaturesPresentday[NUMVERTICES][12];
     729        IssmDouble PrecipitationsPresentday[NUMVERTICES][12];
     730        IssmDouble tmp[NUMVERTICES];
     731        IssmDouble Delta18oTime;
     732        IssmDouble dpermil;
     733        IssmDouble time,yts;
     734        this->parameters->FindParam(&time,TimeEnum);
     735        this->parameters->FindParam(&yts,ConstantsYtsEnum);
     736
     737        /*Get some pdd parameters*/
     738        dpermil=matpar-> GetMaterialParameter(SurfaceforcingsDpermilEnum);
     739
     740        /*Recover present day temperature and precipitation*/
     741        Input*     input=inputs->GetInput(SurfaceforcingsTemperaturesPresentdayEnum);    _assert_(input);
     742        Input*     input2=inputs->GetInput(SurfaceforcingsPrecipitationsPresentdayEnum); _assert_(input2);
     743        GaussPenta* gauss=new GaussPenta();
     744        for(int month=0;month<12;month++) {
     745                for(int iv=0;iv<NUMVERTICES;iv++) {
     746                        gauss->GaussVertex(iv);
     747                        input->GetInputValue(&TemperaturesPresentday[iv][month],gauss,month/12.*yts);
     748                        input2->GetInputValue(&PrecipitationsPresentday[iv][month],gauss,month/12.*yts);
     749                }
     750        }
     751
     752        /*Recover interpolation parameters at time t*/
     753        this->parameters->FindParam(&Delta18oTime,SurfaceforcingsDelta18oEnum,time);
     754
     755        /*Compute the temperature and precipitation*/
     756        for(int iv=0;iv<NUMVERTICES;iv++){
     757          ComputeD18OTemperaturePrecipitationFromPD(Delta18oTime,dpermil,
     758                                        &PrecipitationsPresentday[iv][0], &TemperaturesPresentday[iv][0],
     759                                        &monthlytemperatures[iv][0], &monthlyprec[iv][0]);
     760        }
     761
     762        /*Update inputs*/
     763        TransientInput* NewTemperatureInput = new TransientInput(SurfaceforcingsMonthlytemperaturesEnum);
     764        TransientInput* NewPrecipitationInput = new TransientInput(SurfaceforcingsPrecipitationEnum);
     765        for (int imonth=0;imonth<12;imonth++) {
     766                for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlytemperatures[i][imonth];
     767                PentaInput* newmonthinput1 = new PentaInput(SurfaceforcingsMonthlytemperaturesEnum,&tmp[0],P1Enum);
     768                NewTemperatureInput->AddTimeInput(newmonthinput1,time+imonth/12.*yts);
     769
     770                for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlyprec[i][imonth];
     771                PentaInput* newmonthinput2 = new PentaInput(SurfaceforcingsPrecipitationEnum,&tmp[0],P1Enum);
     772                NewPrecipitationInput->AddTimeInput(newmonthinput2,time+imonth/12.*yts);
     773        }
     774        NewTemperatureInput->Configure(this->parameters);
     775        NewPrecipitationInput->Configure(this->parameters);
     776
     777        this->inputs->AddInput(NewTemperatureInput);
     778        this->inputs->AddInput(NewPrecipitationInput);
     779
    715780        this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum,-1);
    716781        this->InputExtrude(SurfaceforcingsPrecipitationEnum,-1);
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r19061 r19172  
    6060                void           Delta18oParameterization(void);
    6161                void           MungsmtpParameterization(void);
     62                void           Delta18opdParameterization(void);
    6263                void           ElementResponse(IssmDouble* presponse,int response_enum);
    6364                void           ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r19061 r19172  
    5555                void        Delta18oParameterization(void){_error_("not implemented yet");};
    5656                void        MungsmtpParameterization(void){_error_("not implemented yet");};
     57                void        Delta18opdParameterization(void){_error_("not implemented yet");};
    5758                void        ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
    5859                void        ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r19061 r19172  
    5555                void        Delta18oParameterization(void){_error_("not implemented yet");};
    5656                void        MungsmtpParameterization(void){_error_("not implemented yet");};
     57                void        Delta18opdParameterization(void){_error_("not implemented yet");};
    5758                IssmDouble  DragCoefficientAbsGradient(void){_error_("not implemented yet");};
    5859                void        ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r19154 r19172  
    750750                                        &PrecipitationsLgm[iv][0],&PrecipitationsPresentday[iv][0],
    751751                                        &TemperaturesLgm[iv][0], &TemperaturesPresentday[iv][0],
     752                                        &monthlytemperatures[iv][0], &monthlyprec[iv][0]);
     753        }
     754
     755        /*Update inputs*/
     756        TransientInput* NewTemperatureInput = new TransientInput(SurfaceforcingsMonthlytemperaturesEnum);
     757        TransientInput* NewPrecipitationInput = new TransientInput(SurfaceforcingsPrecipitationEnum);
     758        for (int imonth=0;imonth<12;imonth++) {
     759                for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlytemperatures[i][imonth];
     760                TriaInput* newmonthinput1 = new TriaInput(SurfaceforcingsMonthlytemperaturesEnum,&tmp[0],P1Enum);
     761                NewTemperatureInput->AddTimeInput(newmonthinput1,time+imonth/12.*yts);
     762
     763                for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlyprec[i][imonth];
     764                TriaInput* newmonthinput2 = new TriaInput(SurfaceforcingsPrecipitationEnum,&tmp[0],P1Enum);
     765                NewPrecipitationInput->AddTimeInput(newmonthinput2,time+imonth/12.*yts);
     766        }
     767        NewTemperatureInput->Configure(this->parameters);
     768        NewPrecipitationInput->Configure(this->parameters);
     769
     770        this->inputs->AddInput(NewTemperatureInput);
     771        this->inputs->AddInput(NewPrecipitationInput);
     772
     773        /*clean-up*/
     774        delete gauss;
     775}
     776/*}}}*/
     777void       Tria::Delta18opdParameterization(void){/*{{{*/
     778        /*Are we on the base? If not, return*/
     779        if(!IsOnBase()) return;
     780
     781        int        i;
     782        IssmDouble monthlytemperatures[NUMVERTICES][12],monthlyprec[NUMVERTICES][12];
     783        IssmDouble TemperaturesPresentday[NUMVERTICES][12];
     784        IssmDouble PrecipitationsPresentday[NUMVERTICES][12];
     785        IssmDouble tmp[NUMVERTICES];
     786        IssmDouble Delta18oTime;
     787        IssmDouble dpermil;
     788        IssmDouble time,yts;
     789        this->parameters->FindParam(&time,TimeEnum);
     790        this->parameters->FindParam(&yts,ConstantsYtsEnum);
     791
     792        /*Get some pdd parameters*/
     793        dpermil=matpar-> GetMaterialParameter(SurfaceforcingsDpermilEnum);
     794                       
     795        /*Recover present day temperature and precipitation*/
     796        Input*     input=inputs->GetInput(SurfaceforcingsTemperaturesPresentdayEnum);    _assert_(input);
     797        Input*     input2=inputs->GetInput(SurfaceforcingsPrecipitationsPresentdayEnum); _assert_(input2);
     798        GaussTria* gauss=new GaussTria();
     799        for(int month=0;month<12;month++) {
     800                for(int iv=0;iv<NUMVERTICES;iv++) {
     801                        gauss->GaussVertex(iv);
     802                        input->GetInputValue(&TemperaturesPresentday[iv][month],gauss,month/12.*yts);
     803                        input2->GetInputValue(&PrecipitationsPresentday[iv][month],gauss,month/12.*yts);
     804                }
     805        }
     806
     807        /*Recover interpolation parameters at time t*/
     808        this->parameters->FindParam(&Delta18oTime,SurfaceforcingsDelta18oEnum,time);
     809
     810        /*Compute the temperature and precipitation*/
     811        for(int iv=0;iv<NUMVERTICES;iv++){
     812          ComputeD18OTemperaturePrecipitationFromPD(Delta18oTime,dpermil,
     813                                        &PrecipitationsPresentday[iv][0], &TemperaturesPresentday[iv][0],
    752814                                        &monthlytemperatures[iv][0], &monthlyprec[iv][0]);
    753815        }
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r19061 r19172  
    6565                void        Delta18oParameterization(void);
    6666                void        MungsmtpParameterization(void);
     67                void        Delta18opdParameterization(void);
    6768                int         EdgeOnBaseIndex();
    6869                void        EdgeOnBaseIndices(int* pindex1,int* pindex);
  • issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp

    r19087 r19172  
    5555                                        iomodel->Constant(&this->rlaps,SurfaceforcingsRlapsEnum);
    5656                                        iomodel->Constant(&this->rlapslgm,SurfaceforcingsRlapslgmEnum);
     57                                        iomodel->Constant(&this->dpermil,SurfaceforcingsDpermilEnum);
    5758                                        break;
    5859                                case SMBgradientsEnum:
     
    134135        _printf_("   rlaps: " << rlaps << "\n");
    135136        _printf_("   rlapslgm: " << rlapslgm << "\n");
     137        _printf_("   dpermil: " << dpermil << "\n");
    136138        return;
    137139}
     
    179181        matpar->rlaps=this->rlaps;
    180182        matpar->rlapslgm=this->rlapslgm;
     183        matpar->dpermil=this->dpermil;
    181184
    182185        matpar->sediment_compressibility=this->sediment_compressibility;
     
    273276                case SurfaceforcingsRlapslgmEnum:
    274277                        this->rlapslgm=constant;
     278                        break;
     279                case SurfaceforcingsDpermilEnum:
     280                        this->dpermil=constant;
    275281                        break;
    276282                default:
     
    400406                case SurfaceforcingsRlapsEnum:               return this->rlaps;
    401407                case SurfaceforcingsRlapslgmEnum:            return this->rlapslgm;
     408                case SurfaceforcingsDpermilEnum:             return this->dpermil;
    402409                case MaterialsLithosphereShearModulusEnum:   return this->lithosphere_shear_modulus;
    403410                case MaterialsLithosphereDensityEnum:        return this->lithosphere_density;
  • issm/trunk-jpl/src/c/classes/Materials/Matpar.h

    r18946 r19172  
    3636                IssmDouble  rlaps;
    3737                IssmDouble  rlapslgm;
     38                IssmDouble  dpermil;
    3839
    3940                /*hydrology Dual Porous Continuum: */   
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r19087 r19172  
    2222        char**      requestedoutputs = NULL;
    2323        IssmDouble  time;
    24         bool        isdelta18o,ismungsm;
     24        bool        isdelta18o,ismungsm,isd18opd;
    2525
    2626        /*parameters for mass flux:*/
     
    107107                        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
    108108                        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsmungsmEnum));
     109                        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsd18opdEnum));
    109110                        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsDesfacEnum));
    110111                        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsS0pEnum));
     
    114115                        iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
    115116                        iomodel->Constant(&ismungsm,SurfaceforcingsIsmungsmEnum);
     117                        iomodel->Constant(&isd18opd,SurfaceforcingsIsd18opdEnum);
    116118
    117119                        if(ismungsm){
     
    131133                          iomodel->DeleteData(temp,SurfaceforcingsSealevEnum);
    132134                        }
    133 
    134135                        if(isdelta18o){
    135136                                iomodel->Constant(&yts,ConstantsYtsEnum);
     
    144145                                parameters->AddObject(new TransientParam(SurfaceforcingsDelta18oSurfaceEnum,&temp[0],&temp[M],M));
    145146                                iomodel->DeleteData(temp,SurfaceforcingsDelta18oSurfaceEnum);
     147                        }
     148                        if(isd18opd){
     149                                iomodel->Constant(&yts,ConstantsYtsEnum);
     150
     151                                iomodel->FetchData(&temp,&N,&M,SurfaceforcingsDelta18oEnum); _assert_(N==2);
     152                                for(i=0;i<M;i++) temp[M+i]=yts*temp[M+i];
     153                                parameters->AddObject(new TransientParam(SurfaceforcingsDelta18oEnum,&temp[0],&temp[M],M));
     154                                iomodel->DeleteData(temp,SurfaceforcingsDelta18oEnum);
     155                               
     156                                parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsDpermilEnum));
    146157                        }
    147158                        break;
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp

    r18968 r19172  
    1111        /*Intermediaties*/
    1212        int  smb_model;
    13         bool isdelta18o,ismungsm;
     13        bool isdelta18o,ismungsm,isd18opd;
    1414
    1515        /*First, get SMB model from parameters*/
     
    2424                        femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
    2525                        femmodel->parameters->FindParam(&ismungsm,SurfaceforcingsIsmungsmEnum);
     26                        femmodel->parameters->FindParam(&isd18opd,SurfaceforcingsIsd18opdEnum);
    2627                        if(isdelta18o){
    2728                                if(VerboseSolution()) _printf0_("   call Delta18oParameterization module\n");
     
    3132                                if(VerboseSolution()) _printf0_("   call MungsmtpParameterization module\n");
    3233                                MungsmtpParameterizationx(femmodel);
     34                        }
     35                        if(isd18opd){
     36                                if(VerboseSolution()) _printf0_("   call Delta18opdParameterization module\n");
     37                                Delta18opdParameterizationx(femmodel);
    3338                        }
    3439                        if(VerboseSolution()) _printf0_("   call positive degree day module\n");
     
    128133                Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    129134                element->MungsmtpParameterization();
     135        }
     136
     137}/*}}}*/
     138void Delta18opdParameterizationx(FemModel* femmodel){/*{{{*/
     139
     140        for(int i=0;i<femmodel->elements->Size();i++){
     141                Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
     142                element->Delta18opdParameterization();
    130143        }
    131144
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h

    r18968 r19172  
    1313void Delta18oParameterizationx(FemModel* femmodel);
    1414void MungsmtpParameterizationx(FemModel* femmodel);
     15void Delta18opdParameterizationx(FemModel* femmodel);
    1516void PositiveDegreeDayx(FemModel* femmodel);
    1617void SmbHenningx(FemModel* femmodel);
  • issm/trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp

    r18968 r19172  
    9090    Tsurf = tstar*deltm+Tsurf;       
    9191
    92       /*********compute PD ****************/
    93       if (tstar < PDup){
    94         pd = 1.;
    95         if (tstar >= -siglimc){ pd = pds[reCast<int,IssmDouble>(tstar/DT + siglim0c)];}}
    96       else {
    97         pd = 0.;}
    98 
    99       /******exp des/elev precip reduction*******/
    100       sp=(s-s0p)/1000.-deselcut; // deselev effect is wrt chng in topo
    101       if (sp>0.0){q = exp(-desfac*sp);}
    102       else {q = 1.0;}
    103 
    104       qmt= qmt + monthlyprec[imonth]*sconv;  //*sconv to convert in m of ice equivalent per month 
    105       qmpt= q*monthlyprec[imonth]*sconv;           
    106       qmp= qmp + qmpt;
    107       qm= qm + qmpt*pd;
    108 
    109       /*********compute PDD************/
    110       // ndd(month)=-(tstar-pdd(month)) since ndd+pdd gives expectation of
    111       // gaussian=T_m, so ndd=-(Tsurf-pdd)
    112       if (iqj>5 && iqj<9){ Tsum=Tsum+tstar;}
    113 
    114       if (tstar >= siglim) {pdd = pdd + tstar*deltm;}
    115       else if (tstar> -siglim){
    116         pddsig=pdds[reCast<int,IssmDouble>(tstar/DT + siglim0)];
    117         pdd = pdd + pddsig*deltm;
    118         frzndd = frzndd - (tstar-pddsig)*deltm;}
    119       else{frzndd = frzndd - tstar*deltm; }
    120 
    121       /*Assign output pointer*/
    122       *(monthlytemperatures+imonth) = monthlytemperatures[imonth];
    123       *(monthlyprec+imonth) = monthlyprec[imonth];     
     92    /*********compute PD ****************/
     93    if (tstar < PDup){
     94      pd = 1.;
     95      if (tstar >= -siglimc){ pd = pds[reCast<int,IssmDouble>(tstar/DT + siglim0c)];}}
     96    else {
     97      pd = 0.;}
     98   
     99    /******exp des/elev precip reduction*******/
     100    sp=(s-s0p)/1000.-deselcut; // deselev effect is wrt chng in topo
     101    if (sp>0.0){q = exp(-desfac*sp);}
     102    else {q = 1.0;}
     103   
     104    qmt= qmt + monthlyprec[imonth]*sconv;  //*sconv to convert in m of ice equivalent per month 
     105    qmpt= q*monthlyprec[imonth]*sconv;
     106    qmp= qmp + qmpt;
     107    qm= qm + qmpt*pd;
     108
     109    /*********compute PDD************/
     110    // ndd(month)=-(tstar-pdd(month)) since ndd+pdd gives expectation of
     111    // gaussian=T_m, so ndd=-(Tsurf-pdd)
     112    if (iqj>5 && iqj<9){ Tsum=Tsum+tstar;}
     113   
     114    if (tstar >= siglim) {pdd = pdd + tstar*deltm;}
     115    else if (tstar> -siglim){
     116      pddsig=pdds[reCast<int,IssmDouble>(tstar/DT + siglim0)];
     117      pdd = pdd + pddsig*deltm;
     118      frzndd = frzndd - (tstar-pddsig)*deltm;}
     119    else{frzndd = frzndd - tstar*deltm; }
     120   
     121    /*Assign output pointer*/
     122    *(monthlytemperatures+imonth) = monthlytemperatures[imonth];
     123    *(monthlyprec+imonth) = monthlyprec[imonth];     
    124124  } // end of seasonal loop
    125125  //******************************************************************
    126126
    127     saccu = qm;
    128     prect = qmp;     // total precipitation during 1 year taking into account des. ef.
    129     Tsum=Tsum/3;
    130 
    131     /***** determine PDD factors *****/
    132     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
    134       smf=17.22*0.001;    //  ablation factor for ice per pdd (Braithwaite 1995 from tarasov 2002)
    135     }
    136     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;
    139     }
    140     else{
    141       snwmf=4.3*0.001;
    142       smf=8.3*0.001;
    143     }
    144     snwmf=0.95*snwmf;
    145     smf=0.95*smf;
    146 
    147     /*****  compute PDD ablation and refreezing *****/
    148     pddt = pdd *365;
    149     snwm = snwmf*pddt;       // snow that could have been melted in a year
    150     hmx2 = min(h,dfrz);   // refreeze active layer max depth: dfrz
    151 
    152     if(snwm < saccu) {
    153       water=prect-saccu + snwm; //water=rain + snowmelt
    154       //     l 2.2= capillary factor
    155       //     Should refreezing be controlled by frzndd or by mean annual Tsurf?
    156       //     dCovrLm concept is of warming of active layer (thickness =d@=1-
    157       //     >2m)
    158       //     problem with water seepage into ice: should be sealed after
    159       //     refreezing
    160       //     so everything needs to be predicated on 1 year scale, except for
    161       //     thermal
    162       //     conductivity through ice
    163       //     also, need to account that melt season has low accum, so what's
    164       //     going to
    165       //     hold the meltwater around for refreezing? And melt-time will have
    166       //     low seasonal frzndd
    167 
    168       //      Superimposed ice :  Pfeffer et al. 1991, Tarasov 2002
    169 
    170       supice= min(hmx2*CovrLm*frzndd+2.2*(saccu-snwm), water); // superimposed ice
    171       supcap=min(2.2*(saccu-snwm),water);
    172       runoff=snwm - supice;  //meltwater only, does not include rain
    173     }
    174     else {  //all snow melted
    175       supice= min(hmx2*CovrLm*frzndd, prect );
    176       runoff= saccu + smf*(pddt-saccu/snwmf) - supice;
    177       supcap=0;
    178     }
    179     //     pdd melting doesn't cool Tsurf, so ndd refreeze shouldn't warm it
    180     //     except pdd melt heat source is atmosphere, while refreeze is
    181     //     ground/ice stored interim
    182     //     assume pdd=ndd, then melt should equal refreeze and Tsurf should=0
    183     //     assume ndd=2*pdd, then all supice is refrozen, but Tsurf should be
    184     //     <0
    185     //     assume ndd>pdd, little melt => little supice
    186     //     bottom line: compare for Tsurf<0 : supice and no supice case,
    187     //     expect Tsurf difference
    188     //     except some of cooling flux comes from atmosphere//
    189     //     1 dm supice should not raise Tsurf by 1/dCovrLm = 16.675C
    190     //     does supice make sense when H< 0.1m? then d=thermoactive ice layer ////
    191     //     < 0.1
    192 
    193     //     make more sense to just use residual pdd-ndd except that pdd
    194     //     residual not clear yet
    195     //     frzndd should not be used up by refreezing in snow, so stick in
    196     //     supcap.
    197     diffndd=0;
    198     if (frzndd>0) {
    199       diffndd=fsupndd*min((supice-supcap)/dCovrLm ,frzndd);
    200       frzndd=frzndd-diffndd;
    201     }
    202     if(runoff<0){
    203       saccu= saccu -runoff;
    204       smelt = 0;
    205       precrunoff=prect-saccu;
    206       //here assume pdd residual is 0, =>
    207       Tsurf= max(Tsurf,-frzndd);
    208     }
    209     else {
    210       smelt = runoff;
    211       precrunoff=prect-max(0.,supice)-saccu;}
    212     //here really need pdd balance, try 0.5 fudge factor?
    213     //at least runoff>0 => it's fairly warm, so Tsurf is !<<0,
    214     //yet from site plots, can be ice free with Tsurf=-5.5C
    215     if(Tsurf<0) {
    216       Tsurf= min(Tsurf+fsupT*diffndd , 0.);}
    217 
    218     B = -smelt+saccu;
    219     B = B/yts;
    220     pddtj=pddt;
     127  saccu = qm;
     128  prect = qmp;     // total precipitation during 1 year taking into account des. ef.
     129  Tsum=Tsum/3;
     130 
     131  /***** determine PDD factors *****/
     132  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
     134    smf=17.22*0.001;    //  ablation factor for ice per pdd (Braithwaite 1995 from tarasov 2002)
     135  }
     136  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;
     139  }
     140  else{
     141    snwmf=4.3*0.001;
     142    smf=8.3*0.001;
     143  }
     144  snwmf=0.95*snwmf;
     145  smf=0.95*smf;
     146 
     147  /*****  compute PDD ablation and refreezing *****/
     148  pddt = pdd *365;
     149  snwm = snwmf*pddt;       // snow that could have been melted in a year
     150  hmx2 = min(h,dfrz);   // refreeze active layer max depth: dfrz
     151 
     152  if(snwm < saccu) {
     153    water=prect-saccu + snwm; //water=rain + snowmelt
     154    //     l 2.2= capillary factor
     155    //     Should refreezing be controlled by frzndd or by mean annual Tsurf?
     156    //     dCovrLm concept is of warming of active layer (thickness =d@=1-
     157    //     >2m)
     158    //     problem with water seepage into ice: should be sealed after
     159    //     refreezing
     160    //     so everything needs to be predicated on 1 year scale, except for
     161    //     thermal
     162    //     conductivity through ice
     163    //     also, need to account that melt season has low accum, so what's
     164    //     going to
     165    //     hold the meltwater around for refreezing? And melt-time will have
     166    //     low seasonal frzndd
     167
     168    //      Superimposed ice :  Pfeffer et al. 1991, Tarasov 2002
     169
     170    supice= min(hmx2*CovrLm*frzndd+2.2*(saccu-snwm), water); // superimposed ice
     171    supcap=min(2.2*(saccu-snwm),water);
     172    runoff=snwm - supice;  //meltwater only, does not include rain
     173  }
     174  else {  //all snow melted
     175    supice= min(hmx2*CovrLm*frzndd, prect );
     176    runoff= saccu + smf*(pddt-saccu/snwmf) - supice;
     177    supcap=0;
     178  }
     179  //     pdd melting doesn't cool Tsurf, so ndd refreeze shouldn't warm it
     180  //     except pdd melt heat source is atmosphere, while refreeze is
     181  //     ground/ice stored interim
     182  //     assume pdd=ndd, then melt should equal refreeze and Tsurf should=0
     183  //     assume ndd=2*pdd, then all supice is refrozen, but Tsurf should be
     184  //     <0
     185  //     assume ndd>pdd, little melt => little supice
     186  //     bottom line: compare for Tsurf<0 : supice and no supice case,
     187  //     expect Tsurf difference
     188  //     except some of cooling flux comes from atmosphere//
     189  //     1 dm supice should not raise Tsurf by 1/dCovrLm = 16.675C
     190  //     does supice make sense when H< 0.1m? then d=thermoactive ice layer ////
     191  //     < 0.1
     192
     193  //     make more sense to just use residual pdd-ndd except that pdd
     194  //     residual not clear yet
     195  //     frzndd should not be used up by refreezing in snow, so stick in
     196  //     supcap.
     197  diffndd=0;
     198  if (frzndd>0) {
     199    diffndd=fsupndd*min((supice-supcap)/dCovrLm ,frzndd);
     200    frzndd=frzndd-diffndd;
     201  }
     202  if(runoff<0){
     203    saccu= saccu -runoff;
     204    smelt = 0;
     205    precrunoff=prect-saccu;
     206    //here assume pdd residual is 0, =>
     207    Tsurf= max(Tsurf,-frzndd);
     208  }
     209  else {
     210    smelt = runoff;
     211    precrunoff=prect-max(0.,supice)-saccu;}
     212  //here really need pdd balance, try 0.5 fudge factor?
     213  //at least runoff>0 => it's fairly warm, so Tsurf is !<<0,
     214  //yet from site plots, can be ice free with Tsurf=-5.5C
     215  if(Tsurf<0) {
     216    Tsurf= min(Tsurf+fsupT*diffndd , 0.);}
     217
     218  B = -smelt+saccu;
     219  B = B/yts;
     220  pddtj=pddt;
    221221
    222222  return B;
  • issm/trunk-jpl/src/c/shared/Elements/elements.h

    r18968 r19172  
    2828                                           IssmDouble* TemperaturesLgm, IssmDouble* TemperaturesPresentday,
    2929                                           IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout);
     30void ComputeD18OTemperaturePrecipitationFromPD(IssmDouble d018,IssmDouble dpermil,
     31                                               IssmDouble* PrecipitationPresentday,IssmDouble* TemperaturePresentday,
     32                                               IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout); 
    3033IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction, IssmDouble dt=0.);
    3134IssmDouble StressIntensityIntegralWeight(IssmDouble depth, IssmDouble water_depth, IssmDouble thickness);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r19158 r19172  
    348348        SurfaceforcingsIsdelta18oEnum,
    349349        SurfaceforcingsIsmungsmEnum,
     350        SurfaceforcingsIsd18opdEnum,
    350351        SurfaceforcingsPrecipitationsPresentdayEnum,
    351352        SurfaceforcingsPrecipitationsLgmEnum,
     
    361362        SurfaceforcingsTdiffEnum,
    362363        SurfaceforcingsSealevEnum,
     364        SurfaceforcingsDpermilEnum,
    363365        SMBgradientsEnum,
    364366        SurfaceforcingsMonthlytemperaturesEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r19158 r19172  
    354354                case SurfaceforcingsIsdelta18oEnum : return "SurfaceforcingsIsdelta18o";
    355355                case SurfaceforcingsIsmungsmEnum : return "SurfaceforcingsIsmungsm";
     356                case SurfaceforcingsIsd18opdEnum : return "SurfaceforcingsIsd18opd";
    356357                case SurfaceforcingsPrecipitationsPresentdayEnum : return "SurfaceforcingsPrecipitationsPresentday";
    357358                case SurfaceforcingsPrecipitationsLgmEnum : return "SurfaceforcingsPrecipitationsLgm";
     
    367368                case SurfaceforcingsTdiffEnum : return "SurfaceforcingsTdiff";
    368369                case SurfaceforcingsSealevEnum : return "SurfaceforcingsSealev";
     370                case SurfaceforcingsDpermilEnum : return "SurfaceforcingsDpermil";
    369371                case SMBgradientsEnum : return "SMBgradients";
    370372                case SurfaceforcingsMonthlytemperaturesEnum : return "SurfaceforcingsMonthlytemperatures";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r19158 r19172  
    360360              else if (strcmp(name,"SurfaceforcingsIsdelta18o")==0) return SurfaceforcingsIsdelta18oEnum;
    361361              else if (strcmp(name,"SurfaceforcingsIsmungsm")==0) return SurfaceforcingsIsmungsmEnum;
     362              else if (strcmp(name,"SurfaceforcingsIsd18opd")==0) return SurfaceforcingsIsd18opdEnum;
    362363              else if (strcmp(name,"SurfaceforcingsPrecipitationsPresentday")==0) return SurfaceforcingsPrecipitationsPresentdayEnum;
    363364              else if (strcmp(name,"SurfaceforcingsPrecipitationsLgm")==0) return SurfaceforcingsPrecipitationsLgmEnum;
     
    373374              else if (strcmp(name,"SurfaceforcingsTdiff")==0) return SurfaceforcingsTdiffEnum;
    374375              else if (strcmp(name,"SurfaceforcingsSealev")==0) return SurfaceforcingsSealevEnum;
     376              else if (strcmp(name,"SurfaceforcingsDpermil")==0) return SurfaceforcingsDpermilEnum;
    375377              else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
    376378              else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
     
    381383              else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
    382384              else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
    383               else if (strcmp(name,"SurfaceforcingsAccumulation")==0) return SurfaceforcingsAccumulationEnum;
    384               else if (strcmp(name,"SurfaceforcingsEvaporation")==0) return SurfaceforcingsEvaporationEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"SurfaceforcingsRunoff")==0) return SurfaceforcingsRunoffEnum;
     388              if (strcmp(name,"SurfaceforcingsAccumulation")==0) return SurfaceforcingsAccumulationEnum;
     389              else if (strcmp(name,"SurfaceforcingsEvaporation")==0) return SurfaceforcingsEvaporationEnum;
     390              else if (strcmp(name,"SurfaceforcingsRunoff")==0) return SurfaceforcingsRunoffEnum;
    389391              else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
    390392              else if (strcmp(name,"SurfaceforcingsMelt")==0) return SurfaceforcingsMeltEnum;
     
    504506              else if (strcmp(name,"Penpair")==0) return PenpairEnum;
    505507              else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
    506               else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
    507               else if (strcmp(name,"Masscon")==0) return MassconEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"MassconName")==0) return MassconNameEnum;
     511              if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
     512              else if (strcmp(name,"Masscon")==0) return MassconEnum;
     513              else if (strcmp(name,"MassconName")==0) return MassconNameEnum;
    512514              else if (strcmp(name,"MassconDefinitionenum")==0) return MassconDefinitionenumEnum;
    513515              else if (strcmp(name,"MassconLevelset")==0) return MassconLevelsetEnum;
     
    627629              else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
    628630              else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
    629               else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
    630               else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
     634              if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
     635              else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
     636              else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
    635637              else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
    636638              else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
     
    750752              else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum;
    751753              else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum;
    752               else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum;
    753               else if (strcmp(name,"Outputdefinition73")==0) return Outputdefinition73Enum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum;
     757              if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum;
     758              else if (strcmp(name,"Outputdefinition73")==0) return Outputdefinition73Enum;
     759              else if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum;
    758760              else if (strcmp(name,"Outputdefinition75")==0) return Outputdefinition75Enum;
    759761              else if (strcmp(name,"Outputdefinition76")==0) return Outputdefinition76Enum;
     
    873875              else if (strcmp(name,"XY")==0) return XYEnum;
    874876              else if (strcmp(name,"XYZ")==0) return XYZEnum;
    875               else if (strcmp(name,"Dense")==0) return DenseEnum;
    876               else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
     880              if (strcmp(name,"Dense")==0) return DenseEnum;
     881              else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
     882              else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
    881883              else if (strcmp(name,"Seq")==0) return SeqEnum;
    882884              else if (strcmp(name,"Mpi")==0) return MpiEnum;
  • issm/trunk-jpl/src/m/classes/SMBpdd.m

    r19040 r19172  
    1212                s0t                       = 0;
    1313                rlaps                     = 0;
    14                 rlapslgm                  = 0;               
     14                rlapslgm                  = 0;
     15                dpermil                   = 0;
    1516                Pfac                      = NaN;
    1617                Tdiff                     = NaN;
     
    1819                isdelta18o                = 0;
    1920                ismungsm                  = 0;
     21                isd18opd                  = 0;
    2022                delta18o                  = NaN;
    2123                delta18o_surface          = NaN;
     
    3537                end % }}}
    3638                function self = extrude(self,md) % {{{
    37                         if(self.isdelta18o==0 & self.ismungsm==0),self.precipitation=project3d(md,'vector',self.precipitation,'type','node');end
    38                         if(self.isdelta18o==0 & self.ismungsm==0),self.monthlytemperatures=project3d(md,'vector',self.monthlytemperatures,'type','node');end
     39                        if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0),self.precipitation=project3d(md,'vector',self.precipitation,'type','node');end
     40                        if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0),self.monthlytemperatures=project3d(md,'vector',self.monthlytemperatures,'type','node');end
    3941                        if(self.isdelta18o),self.temperatures_lgm=project3d(md,'vector',self.temperatures_lgm,'type','node');end
    4042                        if(self.isdelta18o),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
     
    4547                        if(self.ismungsm),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
    4648                        if(self.ismungsm),self.precipitations_lgm=project3d(md,'vector',self.precipitations_lgm,'type','node');end
     49                        if(self.isd18opd),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
     50                        if(self.isd18opd),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
    4751
    4852                end % }}}
     
    5963                  self.isdelta18o = 0;
    6064                  self.ismungsm   = 0;
     65                  self.isd18opd   = 0;
    6166                  self.desfac     = 0.5;
    6267                  self.s0p        = 0;
     
    6469                  self.rlaps      = 6.5;
    6570                  self.rlapslgm   = 6.5;
     71                  self.dpermil    = 2.4;
    6672                 
    6773                end % }}}
     
    7480                                md = checkfield(md,'fieldname','surfaceforcings.rlaps','>=',0,'numel',1);
    7581                                md = checkfield(md,'fieldname','surfaceforcings.rlapslgm','>=',0,'numel',1);
    76                                 if(self.isdelta18o==0 & self.ismungsm==0)
     82                                if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0)
    7783                                        md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','timeseries',1,'NaN',1);
    7884                                        md = checkfield(md,'fieldname','surfaceforcings.precipitation','timeseries',1,'NaN',1);
     
    94100                                        md = checkfield(md,'fieldname','surfaceforcings.Tdiff','NaN',1);
    95101                                        md = checkfield(md,'fieldname','surfaceforcings.sealev','NaN',1);
     102                                elseif(self.isd18opd==1)
     103                                        md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
     104                                        md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
     105                                        md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1);
     106                                        md = checkfield(md,'fieldname','surfaceforcings.dpermil','>=',0,'numel',1);
    96107                                end
    97108                        end
     
    103114                        fielddisplay(self,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)');
    104115                        fielddisplay(self,'ismungsm','is temperature and precipitation mungsm parametrisation activated (0 or 1, default is 0)');
     116                        fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)');
    105117                        fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
    106118                        fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
     
    108120                        fielddisplay(self,'rlaps','present day lapse rate [degree/km]');
    109121                        fielddisplay(self,'rlapslgm','LGM lapse rate [degree/km]');
    110                         if(self.isdelta18o==0 & self.ismungsm==0)
     122                        if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0)
    111123                            fielddisplay(self,'monthlytemperatures',['monthly surface temperatures [K], required if pdd is activated and delta18o not activated']);
    112124                            fielddisplay(self,'precipitation',['monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o or mungsm not activated']);
     
    116128                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');
    117129                            fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');
    118                             fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
    119                             fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
     130                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
     131                            fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm is activated');
    120132                            fielddisplay(self,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');
    121133                            fielddisplay(self,'sealev','sea level [m], 1D(year), required if mungsm is activated');
    122134                        elseif(self.ismungsm==1)
    123                             fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');
     135                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm/d18opd is activated');
    124136                            fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');
    125                             fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
    126                             fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
     137                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
     138                            fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm is activated');
    127139                            fielddisplay(self,'Pfac','time interpolation parameter for precipitation, 1D(year), required if mungsm is activated');
    128140                            fielddisplay(self,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');
    129141                            fielddisplay(self,'sealev','sea level [m], 1D(year), required if mungsm is activated');
     142                        elseif(self.isd18opd==1)
     143                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm/d18opd is activated');
     144                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
     145                            fielddisplay(self,'delta18o','delta18o, required if pdd is activated and d18opd activated'); 
     146                            fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated');                           
    130147                        end
    131148                end % }}}
     
    138155                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean');
    139156                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','ismungsm','format','Boolean');
     157                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isd18opd','format','Boolean');
    140158                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','desfac','format','Double');
    141159                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0p','format','Double');
     
    144162                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rlapslgm','format','Double');
    145163
    146                         if(self.isdelta18o==0 & self.ismungsm==0)
     164                        if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0)
    147165                                %WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
    148166                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
     
    165183                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);
    166184                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);
     185                        elseif self.isd18opd
     186                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
     187                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
     188                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1);
     189                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','dpermil','format','Double');
    167190                        end
    168191                end % }}}
  • issm/trunk-jpl/src/m/classes/clusters/acenet.m

    r18717 r19172  
    6868                         fprintf(fid,'#$ -cwd\n');
    6969          fprintf(fid,'#$ -N issm\n');
    70           %fprintf(fid,'#$ -l h_rt=25:00:0\n');
    71           %fprintf(fid,'#$ -l h_rt=47:59:00\n');
    72           %fprintf(fid,'#$ -l h_rt=72:00:0\n');
    73           fprintf(fid,'#$ -l h_rt=96:00:0\n');
    74           fprintf(fid,'#$ -l h_vmem=4G\n');
    75           fprintf(fid,'#$ -pe ompi* %i\n',cluster.np);
    76           fprintf(fid,'#$ -j y\n');
    77           fprintf(fid,'#$ -l h=cl27*|cl28*|cl29*|cl30*|cl31*|cl320|cl267|cl268|cl269|cl338 \n');
     70          % fprintf(fid,'#$ -l h_rt=25:00:0\n');
     71          fprintf(fid,'#$ -l h_rt=47:59:00\n');
     72          % fprintf(fid,'#$ -l h_rt=72:00:0\n');
     73          % fprintf(fid,'#$ -l h_rt=96:00:0\n');
     74          % fprintf(fid,'#$ -l h_rt=336:00:0\n');
     75
     76          fprintf(fid,'#$ -l h_vmem=3G\n');
     77          % if cluster.np>10
     78          %     fprintf(fid,'#$ -l h_vmem=3G\n');
     79          % else
     80          %     fprintf(fid,'#$ -l h_vmem=3G\n');
     81          % end
     82
     83          % ---- Which queue to use ----
     84          %fprintf(fid,'#$ -q !tarasov.q\n'); %
     85          %fprintf(fid,'#$ -q medium.q@*,short.q@*\n');
     86          fprintf(fid,'#$ -q short.q@*\n');
     87
     88          % ---- Which node are selected ----
     89          % fprintf(fid,'#$ -l h=cl27*|cl28*|cl29*|cl30*|cl31*|cl320|cl267|cl268|cl269|cl338 \n');
     90          %fprintf(fid,'#$ -l h=cl0* \n');
    7891          %fprintf(fid,'#$ -l h=cl338 \n');
    79           %fprintf(fid,'#$ -pe openmp 20 \n');
    80           %fprintf(fid,'#$ -q !tarasov.q\n'); %
    81           fprintf(fid,'#$ -pe openmp 8\n');
     92          % Acenet nodes with 16cpus and more than 60G mem
     93          % fprintf(fid,'#$ -l h=cl001|cl002|cl003|cl004|cl005|cl006|cl007|cl008|cl009|cl010|cl011|cl012|cl021|cl022|cl023|cl024 \n');
     94 
     95          % ---- cpus on different nodes ----
     96          fprintf(fid,'#$ -pe ompi %i\n',cluster.np); % To avoid green acenet that does not have InfiniBand
     97          % fprintf(fid,'#$ -pe ompi* %i\n',cluster.np);
     98          % -------- All cpus in the same node --------         
     99          % fprintf(fid,'#$ -pe openmp %i\n',cluster.np);
     100         
     101          % ---- misc ----
     102          fprintf(fid,'#$ -j y\n');       
     103                 
    82104          fprintf(fid,'module purge\n');
    83105          %fprintf(fid,'module load gcc openmpi/gcc\n');
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r19158 r19172  
    346346def SurfaceforcingsIsdelta18oEnum(): return StringToEnum("SurfaceforcingsIsdelta18o")[0]
    347347def SurfaceforcingsIsmungsmEnum(): return StringToEnum("SurfaceforcingsIsmungsm")[0]
     348def SurfaceforcingsIsd18opdEnum(): return StringToEnum("SurfaceforcingsIsd18opd")[0]
    348349def SurfaceforcingsPrecipitationsPresentdayEnum(): return StringToEnum("SurfaceforcingsPrecipitationsPresentday")[0]
    349350def SurfaceforcingsPrecipitationsLgmEnum(): return StringToEnum("SurfaceforcingsPrecipitationsLgm")[0]
     
    359360def SurfaceforcingsTdiffEnum(): return StringToEnum("SurfaceforcingsTdiff")[0]
    360361def SurfaceforcingsSealevEnum(): return StringToEnum("SurfaceforcingsSealev")[0]
     362def SurfaceforcingsDpermilEnum(): return StringToEnum("SurfaceforcingsDpermil")[0]
    361363def SMBgradientsEnum(): return StringToEnum("SMBgradients")[0]
    362364def SurfaceforcingsMonthlytemperaturesEnum(): return StringToEnum("SurfaceforcingsMonthlytemperatures")[0]
Note: See TracChangeset for help on using the changeset viewer.