Changeset 12677


Ignore:
Timestamp:
Jul 20, 2012, 4:14:40 PM (14 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.