Changeset 26640


Ignore:
Timestamp:
11/18/21 06:34:31 (3 years ago)
Author:
vverjans
Message:

CHG: added stochasticforcing capability for basalforcings.floatingice_melting_rate, corrections in stochasticforcing checkconsistency

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

Legend:

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

    r26090 r26640  
    8888
    8989        /*Get what we need for ocean-induced basal melting*/
     90        bool isstochastic;
    9091        int basalforcing_model;
    9192        iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
     93        iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
    9294        switch(basalforcing_model){
    9395                case FloatingMeltRateEnum:
    9496                        iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
     97                        if(isstochastic){
     98            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
     99            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
     100         }
    95101                        break;
    96102                case LinearFloatingMeltRateEnum:
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r26615 r26640  
    9191         iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
    9292         if(isstochastic){
    93             iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
     93                                iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
    9494            iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",BaselineCalvingCalvingrateEnum);
    9595         }
  • issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r26468 r26640  
    161161
    162162        /*Get what we need for ocean-induced basal melting*/
     163        bool isstochastic;
    163164        int basalforcing_model;
    164165        iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
     166        iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
    165167        switch(basalforcing_model){
    166168                case FloatingMeltRateEnum:
    167169                        iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
     170                        if(isstochastic){
     171            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
     172            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
     173         }
    168174                        break;
    169175                case LinearFloatingMeltRateEnum:
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r26555 r26640  
    816816
    817817                /*Add basal forcings to compute melt rate*/
     818                bool isstochastic;
    818819                int basalforcing_model;
    819820                iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
     821                iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
    820822                switch(basalforcing_model){
    821823                        case FloatingMeltRateEnum:
    822824                                iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
     825                                if(isstochastic){
     826                                        iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
     827                                        iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
     828                                }
    823829                                break;
    824830                        case LinearFloatingMeltRateEnum:
  • issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp

    r26468 r26640  
    119119
    120120        /*Add basal forcings to compute melt rate*/
     121        bool isstochastic;
    121122        int basalforcing_model;
    122123        iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
     124        iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
    123125        switch(basalforcing_model){
    124126                case FloatingMeltRateEnum:
    125127                        iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
     128                        if(isstochastic){
     129            iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum);
     130            iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum);
     131         }
    126132                        break;
    127133                case LinearFloatingMeltRateEnum:
  • issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp

    r26615 r26640  
    99
    1010void StochasticForcingx(FemModel* femmodel){/*{{{*/
     11
     12
     13        //VV testing (12Nov)
     14        /*
     15        IssmDouble timeVV,dtVV,starttimeVV;
     16        femmodel->parameters->FindParam(&timeVV,TimeEnum);
     17   femmodel->parameters->FindParam(&dtVV,TimesteppingTimeStepEnum);
     18   femmodel->parameters->FindParam(&starttimeVV,TimesteppingStartTimeEnum);
     19        IssmDouble valMean = 0;
     20        IssmDouble valSdev = 0.5;
     21        int seed;
     22        //seed = reCast<int,IssmDouble>((timeVV-starttimeVV)/dtVV);
     23        seed = -1;
     24        IssmDouble rdmVV;
     25        univariateNormal_test0(&rdmVV,valMean,valSdev,seed);
     26        _printf_("VV rdmVV: "<<rdmVV<<'\n');
     27        */
    1128
    1229   /*Retrieve parameters*/
     
    103120                                        }
    104121                                        break;
     122                                case FloatingMeltRateEnum:
     123                                        /*Delete BasalforcingsFloatingiceMeltingRateEnum at previous time step (required if it is transient)*/
     124                                        femmodel->inputs->DeleteInput(BasalforcingsFloatingiceMeltingRateEnum);
     125                                        for(Object* &object:femmodel->elements->objects){
     126                                                Element* element = xDynamicCast<Element*>(object);
     127                                                int numvertices  = element->GetNumberOfVertices();
     128                                                IssmDouble baselinefloatingicemeltrate;
     129                                                IssmDouble floatingicemeltrate_tot[numvertices];
     130                                                Input* baselinefloatingicemeltrate_input  = NULL;
     131                                                baselinefloatingicemeltrate_input = element->GetInput(BaselineBasalforcingsFloatingiceMeltingRateEnum); _assert_(baselinefloatingicemeltrate_input);
     132                                                element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
     133                                                Gauss* gauss = element->NewGauss();
     134                                                for(int i=0;i<numvertices;i++){
     135                                                        gauss->GaussVertex(i);
     136                                                        baselinefloatingicemeltrate_input->GetInputValue(&baselinefloatingicemeltrate,gauss);
     137                                                        floatingicemeltrate_tot[i] = max(0.0,baselinefloatingicemeltrate+noisefield[dimensionid]);
     138                                                }
     139                                                element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,&floatingicemeltrate_tot[0],P1DGEnum);
     140                                                delete gauss;
     141                                        }
     142                                        break;
    105143                                default:
    106144                                        _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet.");
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r26615 r26640  
    601601syn keyword cConstant BaseSlopeXEnum
    602602syn keyword cConstant BaseSlopeYEnum
     603syn keyword cConstant BaselineBasalforcingsFloatingiceMeltingRateEnum
    603604syn keyword cConstant BaselineCalvingCalvingrateEnum
    604605syn keyword cConstant BedEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r26615 r26640  
    597597        BaseSlopeXEnum,
    598598        BaseSlopeYEnum,
     599        BaselineBasalforcingsFloatingiceMeltingRateEnum,
    599600        BaselineCalvingCalvingrateEnum,
    600601        BedEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r26615 r26640  
    603603                case BaseSlopeXEnum : return "BaseSlopeX";
    604604                case BaseSlopeYEnum : return "BaseSlopeY";
     605                case BaselineBasalforcingsFloatingiceMeltingRateEnum : return "BaselineBasalforcingsFloatingiceMeltingRate";
    605606                case BaselineCalvingCalvingrateEnum : return "BaselineCalvingCalvingrate";
    606607                case BedEnum : return "Bed";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r26615 r26640  
    594594syn keyword juliaConstC BaseSlopeXEnum
    595595syn keyword juliaConstC BaseSlopeYEnum
     596syn keyword juliaConstC BaselineBasalforcingsFloatingiceMeltingRateEnum
    596597syn keyword juliaConstC BaselineCalvingCalvingrateEnum
    597598syn keyword juliaConstC BedEnum
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r26615 r26640  
    615615              else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
    616616              else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
     617              else if (strcmp(name,"BaselineBasalforcingsFloatingiceMeltingRate")==0) return BaselineBasalforcingsFloatingiceMeltingRateEnum;
    617618              else if (strcmp(name,"BaselineCalvingCalvingrate")==0) return BaselineCalvingCalvingrateEnum;
    618619              else if (strcmp(name,"Bed")==0) return BedEnum;
     
    628629              else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
    629630              else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
    630               else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
     634              if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
     635              else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
    635636              else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
    636637              else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
     
    751752              else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
    752753              else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
    753               else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
     757              if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
     758              else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
    758759              else if (strcmp(name,"HydrologyTws")==0) return HydrologyTwsEnum;
    759760              else if (strcmp(name,"HydrologyTwsSpc")==0) return HydrologyTwsSpcEnum;
     
    874875              else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum;
    875876              else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum;
    876               else if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum;
     880              if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;
     881              else if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum;
    881882              else if (strcmp(name,"SealevelchangeGE")==0) return SealevelchangeGEEnum;
    882883              else if (strcmp(name,"SealevelchangeGN")==0) return SealevelchangeGNEnum;
     
    997998              else if (strcmp(name,"SmbSzaValue")==0) return SmbSzaValueEnum;
    998999              else if (strcmp(name,"SmbT")==0) return SmbTEnum;
    999               else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
     1003              if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
     1004              else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
    10041005              else if (strcmp(name,"SmbTemperaturesAnomaly")==0) return SmbTemperaturesAnomalyEnum;
    10051006              else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
     
    11201121              else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
    11211122              else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
    1122               else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
     1126              if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
     1127              else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
    11271128              else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
    11281129              else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
     
    12431244              else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
    12441245              else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
    1245               else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
     1249              if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
     1250              else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
    12501251              else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum;
    12511252              else if (strcmp(name,"Channel")==0) return ChannelEnum;
     
    13661367              else if (strcmp(name,"IntParam")==0) return IntParamEnum;
    13671368              else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
    1368               else if (strcmp(name,"Inputs")==0) return InputsEnum;
    13691369         else stage=12;
    13701370   }
    13711371   if(stage==12){
    1372               if (strcmp(name,"Internal")==0) return InternalEnum;
     1372              if (strcmp(name,"Inputs")==0) return InputsEnum;
     1373              else if (strcmp(name,"Internal")==0) return InternalEnum;
    13731374              else if (strcmp(name,"Intersect")==0) return IntersectEnum;
    13741375              else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
     
    14891490              else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
    14901491              else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
    1491               else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
    14921492         else stage=13;
    14931493   }
    14941494   if(stage==13){
    1495               if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
     1495              if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
     1496              else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
    14961497              else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
    14971498              else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
  • issm/trunk-jpl/src/m/classes/stochasticforcing.m

    r26620 r26640  
    4545                        %Check that all fields agree with the corresponding md class and if any field needs the default params   
    4646         checkdefaults = false; %need to check defaults only if one of the field does not have its own dimensionality
     47                        structstoch   = structstochforcing();
    4748                        for field=self.fields
    4849            %Checking agreement of classes
    4950            if(contains(field,'SMB'))
    50                if~(isequal(class(md.smb),char(field)))
     51                                        mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
     52                                        if~(isequal(class(md.smb),char(mdname)))
    5153                  error('md.smb does not agree with stochasticforcing field %s', char(field));
    5254               end
    5355            end
    54             if(contains(field,'frontalforcings'))
    55                if~(isequal(class(md.frontalforcings),char(field)))
     56            if(contains(field,'FrontalForcings'))
     57                                        mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
     58               if~(isequal(class(md.frontalforcings),char(mdname)))
    5659                  error('md.frontalforcings does not agree with stochasticforcing field %s', char(field));
     60               end
     61            end
     62                                if(contains(field,'Calving'))
     63                                        mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
     64               if~(isequal(class(md.calving),char(mdname)))
     65                  error('md.calving does not agree with stochasticforcing field %s', char(field));
     66               end
     67            end
     68                                if(contains(field,'BasalforcingsFloatingice'))
     69                                        mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field))));
     70               if~(isequal(class(md.basalforcings),char(mdname)))
     71                  error('md.basalforcings does not agree with stochasticforcing field %s', char(field));
    5772               end
    5873            end
     
    129144
    130145                                %Scaling covariance matrix (scale column-by-column and row-by-row)
    131                                 scaledfields = {'DefaultCalving','SMBautoregression'}; %list of fields that need scaling *1/yts
     146                                scaledfields = {'DefaultCalving','FloatingMeltRate','SMBautoregression'}; %list of fields that need scaling *1/yts
    132147                                tempcovariance = self.covariance; %copy of covariance to avoid writing back in member variable
    133148                                for i=1:num_fields
     
    161176   % by the class md.stochasticforcing
    162177
    163    list = {...
     178   list = structstochforcing();
     179        list = list.fields;
     180end % }}}
     181function structure = structstochforcing() % {{{
     182        % Defines structure with list of fields
     183        % supported and corresponding md names
     184        structure.fields = {...
    164185      'DefaultCalving',...
    165                 'FrontalForcingsRignotAutoregression',...
     186      'FloatingMeltRate',...
     187      'FrontalForcingsRignotAutoregression',...
    166188      'SMBautoregression'
    167189      };
     190        structure.mdnames = {...
     191                'calving',...
     192                'basalforcings',...
     193                'frontalforcingsrignotautoregression',...
     194                'SMBautoregression'
     195        };
    168196end % }}}
     197
     198
     199
     200
  • issm/trunk-jpl/src/m/classes/stochasticforcing.py

    r26635 r26640  
    6060        # Check that all fields agree with the corresponding md class
    6161        checkdefaults = False
     62        structstoch   = stochasticforcing.structstochforcing()
    6263        for field in self.fields:
    6364            if 'SMB' in field:
    64                 if type(md.smb).__name__ != field:
     65                mdname = structstoch['mdnames'][structstoch['fields']==field]
     66                if type(md.smb).__name__ != mdname:
    6567                    raise TypeError('md.smb does not agree with stochasticforcing field {}'.format(field))
    66             if 'frontalforcings' in field:
    67                 if type(md.frontalforcings).__name__ != field:
     68            if 'FrontalForcings' in field:
     69                mdname = structstoch['mdnames'][structstoch['fields']==field]
     70                if type(md.frontalforcings).__name__ != mdname:
    6871                    raise TypeError('md.frontalforcings does not agree with stochasticforcing field {}'.format(field))
    69             #Checking for specific dimensions
     72            if 'Calving' in field:
     73                mdname = structstoch['mdnames'][structstoch['fields']==field]
     74                if type(md.calving).__name__ != mdname:
     75                    raise TypeError('md.calving does not agree with stochasticforcing field {}'.format(field))
     76            if 'BasalforcingsFloatingice' in field:
     77                mdname = structstoch['mdnames'][structstoch['fields']==field]
     78                if type(md.basalforcings).__name__ != mdname:
     79                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))#Checking for specific dimensions
    7080            if not (field == 'SMBautoregression' or field == 'FrontalForcingsRignotAutoregression'):
    7181                checkdefaults = True   #field with non-specific dimensionality
     
    8090        if ('FrontalForcingsRignotAutoregression' in self.fields):
    8191            size_tot = size_tot - self.defaultdimension + md.frontalforcings.num_basins
    82             indSMBar = self.fields.index('FrontalForcingsRignotAutoregression')
     92            indTFar = self.fields.index('FrontalForcingsRignotAutoregression')
    8393        if (indSMBar != -1 and indTFar != -1):
    8494            covsum = self.covariance[np.sum(self.defaultdimensions[0:indSMBar]).astype(int):np.sum(self.defaultdimensions[0:indSMBar + 1]).astype(int), np.sum(self.defaultdimensions[0:indTFar]).astype(int):np.sum(self.defaultdimensions[0:indTFar + 1]).astype(int)]
     
    8797
    8898        md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1])
    89         md = checkfield(md, 'fieldname', 'stochasticforcing.fields', 'numel', num_fields, 'cell', 1, 'values', supportedstochforcings())
     99        md = checkfield(md, 'fieldname', 'stochasticforcing.fields', 'numel', num_fields, 'cell', 1, 'values', stochasticforcing.supportedstochforcings())
    90100        #md = checkfield(md, 'fieldname', 'stochasticforcing.dimensions', 'NaN', 1, 'Inf', 1, '>', 0, 'size', [num_fields]) # specific dimension for each field; NOTE: As opposed to MATLAB implementation, pass list
    91101        md = checkfield(md, 'fieldname', 'stochasticforcing.covariance', 'NaN', 1, 'Inf', 1, 'size', [size_tot, size_tot])  # global covariance matrix
     
    141151    # }}}
    142152
     153    def supportedstochforcings(): # {{{
     154        """Defines list of fields supported by the class md.stochasticforcing
     155        """
     156        list1 = stochasticforcing.structstochforcing()
     157        list1 = list1['fields']
     158        return(list1) #}}}
    143159
    144 def supportedstochforcings():
    145     """ Defines list of fields supported  by the class stochasticforcings
    146     """
    147     return [
    148         'DefaultCalving',
    149         'FrontalForcingsRignotAutoregression',
    150         'SMBautoregression'
    151     ]
     160    def structstochforcing(): # {{{
     161        """Defines dictionary with list of fields
     162           supported and corresponding md names
     163        """
     164        structure = dict({
     165                    'fields':
     166                        ['DefaultCalving',
     167                        'FloatingMeltRate',
     168                        'FrontalForcingsRignotAutoregression',
     169                        'SMBautoregression'],
     170
     171                    'mdnames':
     172                        ['calving',
     173                        'basalforcings',
     174                        'frontalforcingsrignotautoregression',
     175                        'SMBautoregression']})
     176    return(structure) # }}}
     177
Note: See TracChangeset for help on using the changeset viewer.