Changeset 12677


Ignore:
Timestamp:
07/20/12 16:14:40 (13 years ago)
Author:
helsen
Message:

smb gradient method added

Location:
issm/trunk-jpl/src
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r12365 r12677  
    1111
    1212enum definitions{
    13         /*Model fields {{{*/
     13        /*Model fields {{{1*/
    1414        AutodiffForwardEnum,
    1515        AutodiffIsautodiffEnum,
     
    162162        SurfaceforcingsMassBalanceEnum,
    163163        SurfaceforcingsIspddEnum,
     164        SurfaceforcingsIssmbgradientsEnum,
    164165        SurfaceforcingsMonthlytemperaturesEnum,
     166        SurfaceforcingsHcEnum,
     167        SurfaceforcingsSmbPosMaxEnum,
     168        SurfaceforcingsSmbPosMinEnum,
     169        SurfaceforcingsAPosEnum,
     170        SurfaceforcingsBPosEnum,
     171        SurfaceforcingsANegEnum,
     172        SurfaceforcingsBNegEnum,
    165173        ThermalMaxiterEnum,
    166174        ThermalPenaltyFactorEnum,
     
    183191        TransientRequestedOutputsEnum,
    184192        /*}}}*/
    185         /*Solutions and Analyses{{{ */
     193        /*Solutions and Analyses{{{1 */
    186194        SolutionTypeEnum,
    187195        AnalysisTypeEnum,
     
    220228        TransientSolutionEnum,
    221229        /*}}}*/
    222         /*Approximations {{{*/
     230        /*Approximations {{{1*/
    223231        ApproximationEnum,
    224232        HutterApproximationEnum,
     
    231239        StokesApproximationEnum,
    232240        /*}}}*/
    233         /*Datasets {{{*/
     241        /*Datasets {{{1*/
    234242        ConstraintsEnum,
    235243        LoadsEnum,
     
    240248        ResultsEnum,
    241249        /*}}}*/
    242         /*Objects {{{*/
     250        /*Objects {{{1*/
    243251        BoolInputEnum,
    244252        BoolParamEnum,
     
    289297        VertexEnum,
    290298        /*}}}*/
    291         /*Fill {{{*/
     299        /*Fill {{{1*/
    292300        AirEnum,
    293301        IceEnum,
     
    295303        WaterEnum,
    296304        /*}}}*/
    297         /*Rift state {{{*/
     305        /*Rift state {{{1*/
    298306        ClosedEnum,
    299307        FreeEnum,
    300308        OpenEnum,
    301309        /*}}}*/
    302         /*Inputs {{{*/
     310        /*Inputs {{{1*/
    303311        AdjointpEnum,
    304312        AdjointxEnum,
     
    388396        IceVolumeEnum,
    389397        /*}}}*/
    390         /*Element Interpolations{{{*/
     398        /*Element Interpolations{{{1*/
    391399        P0Enum,
    392400        P1Enum,
    393401        P1DGEnum,
    394402        /*}}}*/
    395         /*Results{{{*/
     403        /*Results{{{1*/
    396404        SaveResultsEnum,
    397405        BoolElementResultEnum,
     
    414422        WaterColumnOldEnum,
    415423        /*}}}*/
    416         /*Responses{{{*/
     424        /*Responses{{{1*/
    417425        MinVelEnum,
    418426        MaxVelEnum,
     
    427435        MaxAbsVzEnum,
    428436        /*}}}*/
    429         /*Convergence{{{*/
     437        /*Convergence{{{1*/
    430438        RelativeEnum,
    431439        AbsoluteEnum,
    432440        IncrementalEnum,
    433441        /*}}}*/
    434         /*Grounding Line{{{*/
     442        /*Grounding Line{{{1*/
    435443        AgressiveMigrationEnum,
    436444        NoneEnum,
    437445        SoftMigrationEnum,
    438446        /*}}}*/
    439         /*Solver{{{*/
     447        /*Solver{{{1*/
    440448        StokesSolverEnum,
    441449        /*}}}*/
    442         /*Parameters{{{*/
     450        /*Parameters{{{1*/
    443451        AdjointEnum,
    444452        ColinearEnum,
     
    468476        VerboseEnum,
    469477        /*}}}*/
    470         /*Interpolation {{{*/
     478        /*Interpolation {{{1*/
    471479        TriangleInterpEnum,
    472480        BilinearInterpEnum,
    473481        NearestInterpEnum,
    474482        /*}}}*/
    475         /*Coordinate Systems{{{*/
     483        /*Coordinate Systems{{{1*/
    476484        XYEnum,
    477485        XYZPEnum,
    478486        /*}}}*/
    479         /*Options{{{*/
     487        /*Options{{{1*/
    480488        OptionEnum,
    481489        OptionCellEnum,
     
    485493        OptionLogicalEnum,
    486494        /*}}}*/
    487         /*Rheology law (move too Material) {{{*/
     495        /*Rheology law (move too Material) {{{1*/
    488496        PatersonEnum,
    489497        ArrheniusEnum,
  • issm/trunk-jpl/src/c/Makefile.am

    r12610 r12677  
    284284                                        ./modules/PositiveDegreeDayx/PositiveDegreeDayx.h\
    285285                                        ./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp\
     286                                        ./modules/SmbGradientsx/SmbGradientsx.h\
     287                                        ./modules/SmbGradientsx/SmbGradientsx.cpp\
    286288                                        ./modules/UpdateConstraintsx/UpdateConstraintsx.h\
    287289                                        ./modules/UpdateConstraintsx/UpdateConstraintsx.cpp\
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r12470 r12677  
    167167                case SurfaceforcingsMassBalanceEnum : return "SurfaceforcingsMassBalance";
    168168                case SurfaceforcingsIspddEnum : return "SurfaceforcingsIspdd";
     169                case SurfaceforcingsIssmbgradientsEnum : return "SurfaceforcingsIssmbgradients";
    169170                case SurfaceforcingsMonthlytemperaturesEnum : return "SurfaceforcingsMonthlytemperatures";
     171                case SurfaceforcingsHcEnum : return "SurfaceforcingsHc";
     172                case SurfaceforcingsSmbPosMaxEnum : return "SurfaceforcingsSmbPosMax";
     173                case SurfaceforcingsSmbPosMinEnum : return "SurfaceforcingsSmbPosMin";
     174                case SurfaceforcingsAPosEnum : return "SurfaceforcingsAPos";
     175                case SurfaceforcingsBPosEnum : return "SurfaceforcingsBPos";
     176                case SurfaceforcingsANegEnum : return "SurfaceforcingsANeg";
     177                case SurfaceforcingsBNegEnum : return "SurfaceforcingsBNeg";
    170178                case ThermalMaxiterEnum : return "ThermalMaxiter";
    171179                case ThermalPenaltyFactorEnum : return "ThermalPenaltyFactor";
     
    467475        len=strlen(EnumToStringx(enum_in));
    468476        string=xNew<char>(len+1);
    469         xMemCpy<char>(string,EnumToStringx(enum_in),(len+1));
     477        memcpy(string,EnumToStringx(enum_in),(len+1)*sizeof(char));
    470478
    471479        /*Assign output pointer*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r12470 r12677  
    9090        parameters->AddObject(iomodel->CopyConstantObject(InversionTaoEnum));
    9191        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIspddEnum));
     92        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
    9293
    9394        /*some parameters that did not come with the iomodel: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp

    r12326 r12677  
    2121        bool   dakota_analysis;
    2222        bool   ispdd;
     23        bool   issmbgradients;
    2324
    2425        /*Fetch data needed: */
     
    2930        iomodel->FetchData(1,MeshElementsEnum);
    3031        iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
     32        iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
    3133
    3234        /*Update elements: */
     
    7375          iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
    7476        }
     77        if(issmbgradients){
     78          iomodel->FetchDataToInput(elements,SurfaceforcingsHcEnum);
     79          iomodel->FetchDataToInput(elements,SurfaceforcingsSmbPosMaxEnum);
     80          iomodel->FetchDataToInput(elements,SurfaceforcingsSmbPosMinEnum);
     81          iomodel->FetchDataToInput(elements,SurfaceforcingsAPosEnum);
     82          iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
     83          iomodel->FetchDataToInput(elements,SurfaceforcingsANegEnum);
     84          iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
     85        }
    7586        else{
    7687                iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r12493 r12677  
    171171              else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
    172172              else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
     173              else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
    173174              else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
     175              else if (strcmp(name,"SurfaceforcingsHc")==0) return SurfaceforcingsHcEnum;
     176              else if (strcmp(name,"SurfaceforcingsSmbPosMax")==0) return SurfaceforcingsSmbPosMaxEnum;
     177              else if (strcmp(name,"SurfaceforcingsSmbPosMin")==0) return SurfaceforcingsSmbPosMinEnum;
     178              else if (strcmp(name,"SurfaceforcingsAPos")==0) return SurfaceforcingsAPosEnum;
     179              else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
     180              else if (strcmp(name,"SurfaceforcingsANeg")==0) return SurfaceforcingsANegEnum;
     181              else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
    174182              else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
    175183              else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
     
    253261              else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
    254262              else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
    255               else if (strcmp(name,"Element")==0) return ElementEnum;
     263         else stage=3;
     264   }
     265   if(stage==3){
     266              if (strcmp(name,"Element")==0) return ElementEnum;
    256267              else if (strcmp(name,"ElementResult")==0) return ElementResultEnum;
    257268              else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
     
    261272              else if (strcmp(name,"Input")==0) return InputEnum;
    262273              else if (strcmp(name,"IntInput")==0) return IntInputEnum;
    263          else stage=3;
    264    }
    265    if(stage==3){
    266               if (strcmp(name,"IntParam")==0) return IntParamEnum;
     274              else if (strcmp(name,"IntParam")==0) return IntParamEnum;
    267275              else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
    268276              else if (strcmp(name,"MacAyeal2dIceFront")==0) return MacAyeal2dIceFrontEnum;
     
    376384              else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
    377385              else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
    378               else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
     386         else stage=4;
     387   }
     388   if(stage==4){
     389              if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
    379390              else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
    380391              else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
     
    384395              else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
    385396              else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
    386          else stage=4;
    387    }
    388    if(stage==4){
    389               if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
     397              else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
    390398              else if (strcmp(name,"P0")==0) return P0Enum;
    391399              else if (strcmp(name,"P1")==0) return P1Enum;
  • issm/trunk-jpl/src/c/modules/modules.h

    r12326 r12677  
    106106#include "./RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
    107107#include "./Scotchx/Scotchx.h"
     108#include "./SmbGradientsx/SmbGradientsx.h"
    108109#include "./Solverx/Solverx.h"
    109110#include "./SpcNodesx/SpcNodesx.h"
  • issm/trunk-jpl/src/c/objects/Elements/Element.h

    r12471 r12677  
    7272                virtual void   PotentialSheetUngrounding(Vector* potential_sheet_ungrounding)=0;
    7373                virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
     74                virtual void   SmbGradients()=0;
    7475                virtual int    UpdatePotentialSheetUngrounding(IssmDouble* potential_sheet_ungrounding,Vector* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf)=0;
    7576                virtual void   ResetCoordinateSystem()=0;
  • issm/trunk-jpl/src/c/objects/Elements/Penta.cpp

    r12529 r12677  
    27382738}
    27392739/*}}}*/
     2740/*FUNCTION Penta::SmbGradients{{{*/
     2741void Penta::SmbGradients(void){
     2742
     2743        int i;
     2744
     2745        // input
     2746   IssmDouble h[NUMVERTICES];                                   // ice thickness (m)           
     2747        IssmDouble s[NUMVERTICES];                                      // surface elevation (m)
     2748        IssmDouble a_pos[NUMVERTICES];                          // Hs-SMB relation parameter
     2749        IssmDouble b_pos[NUMVERTICES];                          // Hs-SMB relation parameter
     2750        IssmDouble a_neg[NUMVERTICES];                          // Hs-SMB relation parameter
     2751        IssmDouble b_neg[NUMVERTICES];                          // Hs-SMB relation paremeter
     2752        IssmDouble Hc[NUMVERTICES];                                     // elevation of transition between accumulation regime and ablation regime
     2753        IssmDouble smb_pos_max[NUMVERTICES];            // maximum SMB value in the accumulation regime
     2754        IssmDouble smb_pos_min[NUMVERTICES];            // minimum SMB value in the accumulation regime
     2755   IssmDouble rho_water;                   // density of fresh water
     2756        IssmDouble rho_ice;                     // density of ice
     2757
     2758        // output
     2759        IssmDouble smb[NUMVERTICES];                                    // surface mass balance (m/yr ice)
     2760
     2761        /*Recover SmbGradients*/
     2762        GetInputListOnVertices(&Hc[0],SurfaceforcingsHcEnum);
     2763        GetInputListOnVertices(&smb_pos_max[0],SurfaceforcingsSmbPosMaxEnum);
     2764        GetInputListOnVertices(&smb_pos_min[0],SurfaceforcingsSmbPosMinEnum);
     2765        GetInputListOnVertices(&a_pos[0],SurfaceforcingsAPosEnum);
     2766        GetInputListOnVertices(&b_pos[0],SurfaceforcingsBPosEnum);
     2767        GetInputListOnVertices(&a_neg[0],SurfaceforcingsANegEnum);
     2768        GetInputListOnVertices(&b_neg[0],SurfaceforcingsBNegEnum);
     2769       
     2770   /*Recover surface elevatio at vertices: */
     2771        GetInputListOnVertices(&h[0],ThicknessEnum);
     2772        GetInputListOnVertices(&s[0],SurfaceEnum);
     2773
     2774   /*Get material parameters :*/
     2775   rho_ice=matpar->GetRhoIce();
     2776   rho_water=matpar->GetRhoFreshwater();
     2777                       
     2778   // loop over all vertices
     2779   for(i=0;i<NUMVERTICES;i++){
     2780     if(s[i]>Hc[i]){
     2781            smb[i]=a_pos[i]+b_pos[i]*s[i];
     2782                 if(smb[i]>smb_pos_max[i]){smb[i]=smb_pos_max[i];}
     2783                 if(smb[i]<smb_pos_min[i]){smb[i]=smb_pos_min[i];}
     2784          }
     2785          else{
     2786            smb[i]=a_neg[i]+b_neg[i]*s[i];
     2787          }
     2788          smb[i]=smb[i]/rho_ice;      // SMB in m/y ice         
     2789         
     2790        }  //end of the loop over the vertices
     2791          /*Update inputs*/
     2792          this->inputs->AddInput(new PentaP1Input(SurfaceforcingsMassBalanceEnum,&smb[0]));
     2793}
     2794/*}}}*/
    27402795/*FUNCTION Penta::SurfaceArea {{{*/
    27412796IssmDouble Penta::SurfaceArea(void){
  • issm/trunk-jpl/src/c/objects/Elements/Penta.h

    r12471 r12677  
    110110                void   ProcessResultsUnits(void);
    111111                void   ResetCoordinateSystem(void);
     112                void   SmbGradients();
    112113                IssmDouble SurfaceArea(void);
    113114                void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
  • issm/trunk-jpl/src/c/objects/Elements/Tria.cpp

    r12654 r12677  
    23692369}
    23702370/*}}}*/
     2371/*FUNCTION Tria::SmbGradients{{{*/
     2372void Tria::SmbGradients(void){
     2373
     2374        int i;
     2375
     2376        // input
     2377   IssmDouble h[NUMVERTICES];                                   // ice thickness (m)           
     2378        IssmDouble s[NUMVERTICES];                                      // surface elevation (m)
     2379        IssmDouble a_pos[NUMVERTICES];                          // Hs-SMB relation parameter
     2380        IssmDouble b_pos[NUMVERTICES];                          // Hs-SMB relation parameter
     2381        IssmDouble a_neg[NUMVERTICES];                          // Hs-SMB relation parameter
     2382        IssmDouble b_neg[NUMVERTICES];                          // Hs-SMB relation paremeter
     2383        IssmDouble Hc[NUMVERTICES];                                     // elevation of transition between accumulation regime and ablation regime
     2384        IssmDouble smb_pos_max[NUMVERTICES];            // maximum SMB value in the accumulation regime
     2385        IssmDouble smb_pos_min[NUMVERTICES];            // minimum SMB value in the accumulation regime
     2386   IssmDouble rho_water;                   // density of fresh water
     2387        IssmDouble rho_ice;                     // density of ice
     2388
     2389        // output
     2390        IssmDouble smb[NUMVERTICES];                                    // surface mass balance (m/yr ice)
     2391
     2392        /*Recover SmbGradients*/
     2393        GetInputListOnVertices(&Hc[0],SurfaceforcingsHcEnum);
     2394        GetInputListOnVertices(&smb_pos_max[0],SurfaceforcingsSmbPosMaxEnum);
     2395        GetInputListOnVertices(&smb_pos_min[0],SurfaceforcingsSmbPosMinEnum);
     2396        GetInputListOnVertices(&a_pos[0],SurfaceforcingsAPosEnum);
     2397        GetInputListOnVertices(&b_pos[0],SurfaceforcingsBPosEnum);
     2398        GetInputListOnVertices(&a_neg[0],SurfaceforcingsANegEnum);
     2399        GetInputListOnVertices(&b_neg[0],SurfaceforcingsBNegEnum);
     2400       
     2401   /*Recover surface elevatio at vertices: */
     2402        GetInputListOnVertices(&h[0],ThicknessEnum);
     2403        GetInputListOnVertices(&s[0],SurfaceEnum);
     2404
     2405   /*Get material parameters :*/
     2406   rho_ice=matpar->GetRhoIce();
     2407   rho_water=matpar->GetRhoFreshwater();
     2408                       
     2409   // loop over all vertices
     2410   for(i=0;i<NUMVERTICES;i++){
     2411     if(s[i]>Hc[i]){
     2412            smb[i]=a_pos[i]+b_pos[i]*s[i];
     2413                 if(smb[i]>smb_pos_max[i]){smb[i]=smb_pos_max[i];}
     2414                 if(smb[i]<smb_pos_min[i]){smb[i]=smb_pos_min[i];}
     2415          }
     2416          else{
     2417            smb[i]=a_neg[i]+b_neg[i]*s[i];
     2418          }
     2419          smb[i]=smb[i]/rho_ice;      // SMB in m/y ice         
     2420        }  //end of the loop over the vertices
     2421          /*Update inputs*/
     2422          this->inputs->AddInput(new TriaP1Input(SurfaceforcingsMassBalanceEnum,&smb[0]));
     2423}
     2424/*}}}*/
    23712425/*FUNCTION Tria::SetCurrentConfiguration {{{*/
    23722426void  Tria::SetCurrentConfiguration(Elements* elementsin, Loads* loadsin, DataSet* nodesin, Materials* materialsin, Parameters* parametersin){
  • issm/trunk-jpl/src/c/objects/Elements/Tria.h

    r12494 r12677  
    110110                void   ProcessResultsUnits(void);
    111111                void   ResetCoordinateSystem(void){_error2_("not implemented yet");};
     112                void     SmbGradients();
    112113                IssmDouble SurfaceArea(void);
    113114                void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
  • issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp

    r12495 r12677  
    6666                case SurfaceforcingsPrecipitationEnum:       scale=yts;break; //m/yr
    6767                case SurfaceforcingsMassBalanceEnum:         scale=yts;break; //m/yr
     68                case SurfaceforcingsSmbPosMaxEnum:                              scale=yts;break; //m/yr
     69                case SurfaceforcingsSmbPosMinEnum:                              scale=yts;break; //m/yr
     70                case SurfaceforcingsAPosEnum:                                           scale=yts;break; //m/yr
     71                case SurfaceforcingsBPosEnum:                                           scale=yts;break; //m/yr
     72                case SurfaceforcingsANegEnum:                                           scale=yts;break; //m/yr
     73                case SurfaceforcingsBNegEnum:                                           scale=yts;break; //m/yr
    6874                case MisfitEnum:                             scale=pow(yts,2);break; //(m/yr)^2
    6975                case MassFluxEnum:                           scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year)
  • issm/trunk-jpl/src/c/solutions/prognostic_core.cpp

    r12515 r12677  
    1717        bool save_results;
    1818        bool ispdd;
     19        bool issmbgradients;
    1920
    2021        /*activate formulation: */
     
    2425        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    2526        femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
     27        femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
    2628
    2729        if(ispdd){
    2830          if(VerboseSolution()) _pprintLine_("   call positive degree day module");
    2931          PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    30         }       
     32        }
     33
     34        if(issmbgradients){
     35          _printf_(VerboseSolution(),"  call smb gradients module\n");
     36          SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
     37        }
    3138
    3239        if(VerboseSolution()) _pprintLine_("   call computational core");
  • issm/trunk-jpl/src/m/classes/surfaceforcings.m

    r12663 r12677  
    99                mass_balance  = NaN;
    1010                ispdd = 0;
     11                issmbgradients = 0;
     12           hc = NaN;
     13                smb_pos_max = NaN;
     14                smb_pos_min = NaN;
     15                a_pos = NaN;
     16                b_pos = NaN;
     17                a_neg = NaN;
     18                b_neg = NaN;
    1119                monthlytemperatures = NaN;
    1220        end
     
    2432                  %pdd method not used in default mode
    2533                  obj.ispdd=0;
     34                  obj.issmbgradients=0;
    2635
    2736                end % }}}
     
    3039                        if ismember(PrognosticAnalysisEnum,analyses),
    3140                                md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0 1]);
     41                                checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0 1]);
    3242                                if(obj.ispdd)
    3343                                        md = checkfield(md,'surfaceforcings.monthlytemperatures','forcing',1,'NaN',1);
     44                                elseif(obj.issmbgradients)
     45                                        checkfield(md,'surfaceforcings.hc','forcing',1,'NaN',1);
     46                                        checkfield(md,'surfaceforcings.smb_pos_max','forcing',1,'NaN',1);
     47                                        checkfield(md,'surfaceforcings.smb_pos_min','forcing',1,'NaN',1);
     48                                        checkfield(md,'surfaceforcings.a_pos','forcing',1,'NaN',1);
     49                                        checkfield(md,'surfaceforcings.b_pos','forcing',1,'NaN',1);
     50                                        checkfield(md,'surfaceforcings.a_neg','forcing',1,'NaN',1);
     51                                        checkfield(md,'surfaceforcings.b_neg','forcing',1,'NaN',1);
    3452                                else
    3553                                        md = checkfield(md,'surfaceforcings.mass_balance','forcing',1,'NaN',1);
     
    4765                        fielddisplay(obj,'ispdd','is pdd activated (0 or 1, default is 0)');
    4866                        fielddisplay(obj,'monthlytemperatures','monthly surface temperatures required if pdd is activated');
     67                        fielddisplay(obj,'issmbgradients','is smb gradients method activated (0 or 1, default is 0)');
     68                        fielddisplay(obj,'hc',' elevation of intersection between accumulation and ablation regime required if smb gradients is activated');
     69                        fielddisplay(obj,'smb_pos_max',' maximum value of positive smb required if smb gradients is activated');
     70                        fielddisplay(obj,'smb_pos_min',' minimum value of positive smb required if smb gradients is activated');
     71                        fielddisplay(obj,'a_pos',' intercept of hs - smb regression line for accumulation regime required if smb gradients is activated');
     72                        fielddisplay(obj,'b_pos',' slope of hs - smb regression line for accumulation regime required if smb gradients is activated');
     73                        fielddisplay(obj,'a_neg',' intercept of hs - smb regression line for ablation regime required if smb gradients is activated');
     74                        fielddisplay(obj,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated');
    4975
    5076                end % }}}
     
    5682                                WriteData(fid,'object',obj,'fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
    5783                        end
     84                        WriteData(fid,'object',obj,'fieldname','issmbgradients','format','Boolean');
     85                        if obj.issmbgradients,
     86                                WriteData(fid,'object',obj,'fieldname','hc','format','DoubleMat','mattype',1);
     87                                WriteData(fid,'object',obj,'fieldname','smb_pos_max','format','DoubleMat','mattype',1);
     88                                WriteData(fid,'object',obj,'fieldname','smb_pos_min','format','DoubleMat','mattype',1);
     89                                WriteData(fid,'object',obj,'fieldname','a_pos','format','DoubleMat','mattype',1);
     90                                WriteData(fid,'object',obj,'fieldname','b_pos','format','DoubleMat','mattype',1);
     91                                WriteData(fid,'object',obj,'fieldname','a_neg','format','DoubleMat','mattype',1);
     92                                WriteData(fid,'object',obj,'fieldname','b_neg','format','DoubleMat','mattype',1);
     93                        end
    5894
    5995                end % }}}
  • issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m

    r12328 r12677  
    99%      macro=MaximumNumberOfEnums()
    1010
    11 macro=440;
     11macro=448;
Note: See TracChangeset for help on using the changeset viewer.