Changeset 24793


Ignore:
Timestamp:
05/05/20 06:26:00 (5 years ago)
Author:
bdef
Message:

NEW: adding several averaging methods to pass from substep to main step

Location:
issm/trunk-jpl/src/m/classes
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/SMBcomponents.m

    r24240 r24793  
    1111                evaporation = NaN;
    1212                steps_per_step = 1;
     13                averaging = 0;
    1314                requested_outputs     = {};
    1415        end
     
    6263                        end
    6364                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     65                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    6466                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    6567                        md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
     
    8082                        fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
    8183                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     84                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     85                        disp(sprintf('%55s  0: Arithmetic (default)');
     86                        disp(sprintf('%55s  0: Geometric');
     87                        disp(sprintf('%55s  0: Harmonic');
    8288                        fielddisplay(self,'requested_outputs','additional outputs requested');
    8389                end % }}}
     
    9197                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    9298                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     99                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    93100                        %process requested outputs
    94101                        outputs = self.requested_outputs;
  • issm/trunk-jpl/src/m/classes/SMBcomponents.py

    r24240 r24793  
    1919        self.isclimatology = 0
    2020        self.steps_per_step = 1
     21        self.averaging = 0
    2122        self.requested_outputs = []
    22         #}}}
     23    # }}}
    2324
    2425    def __repr__(self):  # {{{
     
    2930        string = "%s\n%s" % (string, fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
    3031        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     32        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     33        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     34        string = "%s\n\t\t%s" % (string, '1: Geometric')
     35        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    3136        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    3237        return string
    33         #}}}
     38    # }}}
    3439
    3540    def extrude(self, md):  # {{{
     
    3843        self.mass_balance = project3d(md, 'vector', self.evaporation, 'type', 'node')
    3944        return self
    40     #}}}
     45    # }}}
    4146
    4247    def defaultoutputs(self, md):  # {{{
    4348        return []
    44     #}}}
     49    # }}}
    4550
    4651    def initialize(self, md):  # {{{
     
    5863
    5964        return self
    60     #}}}
     65    # }}}
    6166
    6267    def checkconsistency(self, md, solution, analyses):  # {{{
     
    7176
    7277        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     78        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    7379        md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
    7480        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
     
    8591        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'evaporation', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    8692        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     93        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    8794    #process requested outputs
    8895        outputs = self.requested_outputs
  • issm/trunk-jpl/src/m/classes/SMBd18opdd.m

    r24583 r24793  
    3030                pddfac_ice                = NaN;
    3131                steps_per_step            = 1;
     32                averaging                 = 0;
    3233                requested_outputs         = {};
    3334        end
     
    115116                        end
    116117                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     118                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    117119                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    118120                end % }}}
     
    147149                        end
    148150                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     151                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     152                        disp(sprintf('%55s  0: Arithmetic (default)');
     153                        disp(sprintf('%55s  0: Geometric');
     154                        disp(sprintf('%55s  0: Harmonic');
    149155                        fielddisplay(self,'requested_outputs','additional outputs requested');
    150156                        % No need to display rlapslgm, Tdiff, ismungsm
     
    169175                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2,'yts',md.constants.yts);
    170176                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     177                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    171178
    172179                        if self.isd18opd
  • issm/trunk-jpl/src/m/classes/SMBd18opdd.py

    r24588 r24793  
    3737        self.pddfac_ice = float('NaN')
    3838        self.steps_per_step = 1
     39        self.averaging = 0
    3940
    4041    #set defaults
     
    7273            string = "%s\n%s" % (string, fielddisplay(self, 'pddfac_ice', 'Pdd factor for ice, at each vertex [mm ice equiv/day/degree C]'))
    7374        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     75        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     76        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     77        string = "%s\n\t\t%s" % (string, '1: Geometric')
     78        string = "%s\n\t\t%s" % (string, '2: Harmonic')
     79
    7480        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    7581
     
    135141            md = checkfield(md, 'fieldname', 'smb.rlapslgm', '>=', 0, 'numel', [1])
    136142            md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     143            md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    137144
    138145            if self.isd18opd:
     
    181188        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'sealev', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', 2, 'yts', md.constants.yts)
    182189        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     190        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    183191
    184192        if self.isd18opd:
  • issm/trunk-jpl/src/m/classes/SMBforcing.py

    r24240 r24793  
    1919        self.isclimatology = 0
    2020        self.steps_per_step = 1
     21        self.averaging = 0
    2122    #}}}
    2223
     
    2627        string = "%s\n%s" % (string, fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
    2728        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     29        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     30        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     31        string = "%s\n\t\t%s" % (string, '1: Geometric')
     32        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    2833        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    2934        return string
     
    5661
    5762        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     63        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    5864        md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
    5965        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
     
    6975        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'mass_balance', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    7076        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     77        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    7178
    7279        #process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBgemb.m

    r24772 r24793  
    112112
    113113                steps_per_step = 1;
     114                averaging = 0;
    114115                requested_outputs      = {};
    115116
     
    286287                        end
    287288                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     289                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    288290                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    289291
     
    379381
    380382                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     383                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     384                        disp(sprintf('%55s  0: Arithmetic (default)');
     385                        disp(sprintf('%55s  0: Geometric');
     386                        disp(sprintf('%55s  0: Harmonic');
    381387                        fielddisplay(self,'requested_outputs','additional outputs requested');
    382388
     
    450456                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','Sizeini','format','IntMat','mattype',2);
    451457                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     458                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    452459                        %figure out dt from forcings:
    453460                        if (any(md.smb.P(end,:) - md.smb.Ta(end,:) ~= 0) | ...
  • issm/trunk-jpl/src/m/classes/SMBgemb.py

    r24772 r24793  
    2121        #solution choices
    2222        #check these:
    23         #isgraingrowth
     23        #self.isgraingrowth = 0
     24        #self.issmbgradients = 0
    2425        #isalbedo
    2526        #isshortwave
     
    9495
    9596        self.steps_per_step = 1
     97        self.averaging = 0
    9698        self.requested_outputs = []
    9799
     
    191193                                                                     '4 = Greenland model of Kuipers Munneke et al. (2015)']))
    192194        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     195        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     196        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     197        string = "%s\n\t\t%s" % (string, '1: Geometric')
     198        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    193199        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    194200        return string
     
    218224    def setdefaultparameters(self, mesh, geometry):  # {{{
    219225        self.isgraingrowth = 1
     226        self.issmbgradients = 0
    220227        self.isalbedo = 1
    221228        self.isshortwave = 1
     
    226233        self.isturbulentflux = 1
    227234        self.isclimatology = 0
    228         self.isconstrainsurfaceT = 0;
     235        self.isconstrainsurfaceT = 0
    229236
    230237        self.aIdx = 1
     
    274281
    275282        md = checkfield(md, 'fieldname', 'smb.isgraingrowth', 'values', [0, 1])
     283        #md = checkfield(md, 'fieldname', 'smb.issmbgradients', 'values', [0, 1])
    276284        md = checkfield(md, 'fieldname', 'smb.isalbedo', 'values', [0, 1])
    277285        md = checkfield(md, 'fieldname', 'smb.isshortwave', 'values', [0, 1])
     
    338346            raise IOError('SMBgemb consistency check error: zTop should be smaller than local ice thickness')
    339347        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     348        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    340349        md = checkfield(md, 'fieldname', 'smb.requested_outputs', 'stringrow', 1)
    341350        return md
     
    349358
    350359        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isgraingrowth', 'format', 'Boolean')
     360        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'issmbgradients', 'format', 'Boolean')
    351361        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isalbedo', 'format', 'Boolean')
    352362        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isshortwave', 'format', 'Boolean')
     
    409419        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'Sizeini', 'format', 'IntMat', 'mattype', 2)
    410420        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     421        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    411422        #figure out dt from forcings:
    412         if (np.any(self.P[-1] - self.Ta[-1] != 0) | np.any(self.V[-1] - self.Ta[-1] != 0) | np.any(self.dswrf[-1] - self.Ta[-1] !=0) | np.any(self.dlwrf[-1] - self.Ta[-1] != 0) | np.any(self.eAir[-1] - self.Ta[-1] != 0) | np.any(self.pAir[-1] - self.Ta[-1] != 0)):
     423        if (np.any(self.P[-1] - self.Ta[-1] != 0) | np.any(self.V[-1] - self.Ta[-1] != 0) | np.any(self.dswrf[-1] - self.Ta[-1] != 0) | np.any(self.dlwrf[-1] - self.Ta[-1] != 0) | np.any(self.eAir[-1] - self.Ta[-1] != 0) | np.any(self.pAir[-1] - self.Ta[-1] != 0)):
    413424            raise IOError('All GEMB forcings (Ta, P, V, dswrf, dlwrf, eAir, pAir) must have the same time steps in the final row!')
    414425
  • issm/trunk-jpl/src/m/classes/SMBgradients.m

    r24240 r24793  
    1111                b_neg             = NaN;
    1212                steps_per_step    = 1;
     13                averaging         = 0;
    1314                requested_outputs = {};
    1415        end
     
    4950                        end
    5051                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     52                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    5153                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    5254                end % }}}
     
    6062                        fielddisplay(self,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated');
    6163                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     64                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     65                        disp(sprintf('%55s  0: Arithmetic (default)');
     66                        disp(sprintf('%55s  0: Geometric');
     67                        disp(sprintf('%55s  0: Harmonic');
    6268                        fielddisplay(self,'requested_outputs','additional outputs requested');
    6369
     
    7480                                  'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    7581                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     82                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    7683
    7784                        %process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBgradients.py

    r24240 r24793  
    1818        self.b_neg = float('NaN')
    1919        self.steps_per_step = 1
     20        self.averaging = 0
    2021        self.requested_outputs = []
    2122    #}}}
     
    3031        string = "%s\n%s" % (string, fielddisplay(self, 'b_neg', ' slope of hs - smb regression line for ablation regime required if smb gradients is activated'))
    3132        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     33        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     34        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     35        string = "%s\n\t\t%s" % (string, '1: Geometric')
     36        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    3237        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    3338
     
    5762
    5863        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     64        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    5965        md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
    6066        return md
     
    7076        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'b_neg', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    7177        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     78        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    7279
    7380        #process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBgradientscomponents.m

    r24530 r24793  
    1414                runoffgrad        = NaN;
    1515                steps_per_step    = 1;
     16                averaging         = 0;
    1617                requested_outputs = {};
    1718        end
     
    5455                        end
    5556                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     57                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    5658                        md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1);
    5759                end % }}}
     
    6769                        fielddisplay(self,'runoffgrad',' Gradient of the variation of the runoff (0 for uniform runoff) m w.e. m-1 y-1 (lpase rate times ddf)');
    6870                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     71                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     72                        disp(sprintf('%55s  0: Arithmetic (default)');
     73                        disp(sprintf('%55s  0: Geometric');
     74                        disp(sprintf('%55s  0: Harmonic');
    6975                        fielddisplay(self,'requested_outputs','additional outputs requested');
    7076
     
    8187                                  'format','Double','scale',1./md.constants.yts);
    8288                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     89                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    8390
    8491
  • issm/trunk-jpl/src/m/classes/SMBgradientscomponents.py

    r24240 r24793  
    2121        self.runoffgrad = float('NaN')
    2222        self.steps_per_step = 1
     23        self.averaging = 0
    2324        self.requested_outputs = ['default']
    2425    #}}}
     
    3334        string = "%s\n%s" % (string, fielddisplay(self, 'runoffgrad', ' Gradient of the variation of the runoff (0 for uniform runoff) m w.e. m-1 y-1 (lapse rate times ddf)'))
    3435        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     36        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     37        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     38        string = "%s\n\t\t%s" % (string, '1: Geometric')
     39        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    3540        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    3641
     
    6570
    6671        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     72        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    6773        md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
    6874        return md
     
    7985        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'runoffgrad', 'format', 'Double', 'scale', 1. / md.constants.yts)
    8086        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     87        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    8188
    8289        #process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBgradientsela.m

    r24240 r24793  
    1212                b_min             = NaN;
    1313                steps_per_step    = 1;
     14                averaging         = 0;
    1415                requested_outputs = {};
    1516        end
     
    5253                        end
    5354                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     55                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    5456                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    5557                end % }}}
     
    6466                        fielddisplay(self,'b_min',' lower cap on smb rate, default: -9999 (no cap) [m ice eq./yr]');
    6567                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     68                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     69                        disp(sprintf('%55s  0: Arithmetic (default)');
     70                        disp(sprintf('%55s  0: Geometric');
     71                        disp(sprintf('%55s  0: Harmonic');
    6672                        fielddisplay(self,'requested_outputs','additional outputs requested');
    6773
     
    7985                                  'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    8086                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     87                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    8188
    8289                        %process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBgradientsela.py

    r24240 r24793  
    1919        self.b_min = float('NaN')
    2020        self.steps_per_step = 1
     21        self.averaging = 0
    2122        self.requested_outputs = []
    2223        self.setdefaultparameters()
     
    3334        string = "%s\n%s" % (string, fielddisplay(self, 'b_min', ' lower cap on smb rate, default: -9999 (no cap) [m ice eq./yr]'))
    3435        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     36        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     37        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     38        string = "%s\n\t\t%s" % (string, '1: Geometric')
     39        string = "%s\n\t\t%s" % (string, '2: Harmonic')
     40
    3541        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    3642        return string
     
    6672
    6773        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     74        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    6875        md = checkfield(md, 'fieldname', 'smb.requested_outputs', 'stringrow', 1)
    6976        return md
     
    8087        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'b_min', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    8188        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     89        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    8290
    8391        #process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBhenning.m

    r24240 r24793  
    88                smbref = NaN;
    99                steps_per_step=1;
     10                averaging=0;
    1011                requested_outputs      = {};
    1112        end
     
    5354                        end
    5455                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     56                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    5557                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    5658                end % }}}
     
    5961                        fielddisplay(self,'smbref','reference smb from which deviation is calculated [m/yr ice eq]');
    6062                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     63                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     64                        disp(sprintf('%55s  0: Arithmetic (default)');
     65                        disp(sprintf('%55s  0: Geometric');
     66                        disp(sprintf('%55s  0: Harmonic');
    6167                        fielddisplay(self,'requested_outputs','additional outputs requested');
    6268                end % }}}
     
    6874                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    6975                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     76                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    7077
    7178                        %process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m

    r24240 r24793  
    1212                refreeze = NaN;
    1313                steps_per_step=1;
     14                averaging = 0;
    1415                requested_outputs      = {};
    1516        end
     
    6869                        end
    6970                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     71                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    7072                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    7173                        md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
     
    8991                        fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
    9092                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     93                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     94                        disp(sprintf('%55s  0: Arithmetic (default)');
     95                        disp(sprintf('%55s  0: Geometric');
     96                        disp(sprintf('%55s  0: Harmonic');
    9197                        fielddisplay(self,'requested_outputs','additional outputs requested');
    9298                end % }}}
     
    101107                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    102108                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     109                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    103110
    104111                        %process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py

    r24240 r24793  
    1919        self.isclimatology = 0
    2020        self.steps_per_step = 1
     21        self.averaging = 0
    2122        self.requested_outputs = []
    2223    #}}}
     
    3031        string = "%s\n%s" % (string, fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
    3132        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     33        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     34        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     35        string = "%s\n\t\t%s" % (string, '1: Geometric')
     36        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    3237        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    3338        return string
     
    8085
    8186        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     87        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    8288        md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
    8389        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
     
    94100        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'refreeze', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    95101        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     102        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    96103
    97104        #process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBpdd.m

    r24586 r24793  
    2626                precipitations_lgm        = NaN;
    2727                steps_per_step            = 1;
     28                averaging                 = 0;
    2829                requested_outputs         = {};
    2930        end
     
    107108                        end
    108109                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     110                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    109111                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    110112
     
    143145                        end
    144146                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     147                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     148                        disp(sprintf('%55s  0: Arithmetic (default)');
     149                        disp(sprintf('%55s  0: Geometric');
     150                        disp(sprintf('%55s  0: Harmonic');
    145151                        fielddisplay(self,'requested_outputs','additional outputs requested');
    146152                end % }}}
     
    160166                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlapslgm','format','Double');
    161167                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     168                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    162169                        if(self.isdelta18o==0 & self.ismungsm==0)
    163170                                %WriteData(fid,prefix,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
  • issm/trunk-jpl/src/m/classes/SMBpdd.py

    r24586 r24793  
    3535        self.precipitations_lgm = float('NaN')
    3636        self.steps_per_step = 1
     37        self.averaging = 0
    3738
    3839    #set defaults
     
    7475
    7576        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     77        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     78        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     79        string = "%s\n\t\t%s" % (string, '1: Geometric')
     80        string = "%s\n\t\t%s" % (string, '2: Harmonic')
     81
    7682        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
    7783
     
    155161                md = checkfield(md, 'fieldname', 'smb.precipitations_lgm', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1)
    156162                md = checkfield(md, 'fieldname', 'smb.Pfac', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1)
    157                 md = checkfield(md, 'fieldname', 'smb.Tdiff','NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1)
    158                 md = checkfield(md, 'fieldname', 'smb.sealev','NaN',1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1)
     163                md = checkfield(md, 'fieldname', 'smb.Tdiff', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1)
     164                md = checkfield(md, 'fieldname', 'smb.sealev', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1)
    159165
    160166        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     167        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    161168        md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
    162169        return md
     
    177184        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'rlapslgm', 'format', 'Double')
    178185        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     186        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    179187
    180188        if (self.isdelta18o == 0 and self.ismungsm == 0):
  • issm/trunk-jpl/src/m/classes/SMBpddSicopolis.py

    r24591 r24793  
    2828        self.isfirnwarming = 0
    2929        self.steps_per_step = 1
     30        self.averaging = 0
    3031        self.requested_outputs = []
    3132
    3233        self.setdefaultparameters()
     34    # }}}
     35
     36    def __repr__(self):  # {{{
     37        string = '   surface forcings parameters:'
     38        string += '\n   SICOPOLIS PDD scheme (Calov & Greve, 2005) :'
     39
     40        string = "%s\n%s" % (string, fielddisplay(self, 'monthlytemperatures', 'monthly surface temperatures [K]'))
     41        string = "%s\n%s" % (string, fielddisplay(self, 'precipitation', 'monthly surface precipitation [m/yr water eq]'))
     42        string = "%s\n%s" % (string, fielddisplay(self, 'temperature_anomaly', 'anomaly to monthly reference temperature (additive [K])'))
     43        string = "%s\n%s" % (string, fielddisplay(self, 'precipitation_anomaly', 'anomaly to monthly precipitation (multiplicative, e.g. q = q0*exp(0.070458*DeltaT) after Huybrechts (2002)) [no unit])'))
     44        string = "%s\n%s" % (string, fielddisplay(self, 'smb_corr', 'correction of smb after PDD call [m/a]'))
     45        string = "%s\n%s" % (string, fielddisplay(self, 's0p', 'should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'))
     46        string = "%s\n%s" % (string, fielddisplay(self, 's0t', 'should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]'))
     47        string = "%s\n%s" % (string, fielddisplay(self, 'rlaps', 'present day lapse rate (default is 7.4 degree/km)'))
     48        string = "%s\n%s" % (string, fielddisplay(self, 'desfac', 'desertification elevation factor (default is -log(2.0)/1000)'))
     49        string = "%s\n%s" % (string, fielddisplay(self, 'isfirnwarming', 'is firnwarming (Reeh 1991) activated (0 or 1, default is 1)'))
     50        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     51        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     52        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     53        string = "%s\n\t\t%s" % (string, '1: Geometric')
     54        string = "%s\n\t\t%s" % (string, '2: Harmonic')
     55
     56        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested (TemperaturePDD, SmbAccumulation, SmbMelt)'))
    3357    # }}}
    3458
     
    98122            md = checkfield(md, 'fieldname', 'smb.rlaps', '>=', 0, 'numel', 1)
    99123            md = checkfield(md, 'fieldname', 'smb.monthlytemperatures', 'NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices, 12])
    100             md = checkfield(md, 'fieldname', 'smb.precipitation','NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices, 12])
     124            md = checkfield(md, 'fieldname', 'smb.precipitation', 'NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices, 12])
    101125
    102126        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     127        md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
    103128        md = checkfield(md, 'fieldname', 'smb.requested_outputs', 'stringrow', 1)
    104129
    105130        return md
    106     # }}}
    107 
    108     def __repr__(self):  # {{{
    109         string = '   surface forcings parameters:'
    110         string += '\n   SICOPOLIS PDD scheme (Calov & Greve, 2005) :'
    111 
    112         string = "%s\n%s" % (string, fielddisplay(self, 'monthlytemperatures', 'monthly surface temperatures [K]'))
    113         string = "%s\n%s" % (string, fielddisplay(self, 'precipitation', 'monthly surface precipitation [m/yr water eq]'))
    114         string = "%s\n%s" % (string, fielddisplay(self, 'temperature_anomaly', 'anomaly to monthly reference temperature (additive [K])'))
    115         string = "%s\n%s" % (string, fielddisplay(self, 'precipitation_anomaly', 'anomaly to monthly precipitation (multiplicative, e.g. q = q0*exp(0.070458*DeltaT) after Huybrechts (2002)) [no unit])'))
    116         string = "%s\n%s" % (string, fielddisplay(self, 'smb_corr', 'correction of smb after PDD call [m/a]'))
    117         string = "%s\n%s" % (string, fielddisplay(self, 's0p', 'should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'))
    118         string = "%s\n%s" % (string, fielddisplay(self, 's0t', 'should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]'))
    119         string = "%s\n%s" % (string, fielddisplay(self, 'rlaps', 'present day lapse rate (default is 7.4 degree/km)'))
    120         string = "%s\n%s" % (string, fielddisplay(self, 'desfac', 'desertification elevation factor (default is -log(2.0)/1000)'))
    121         string = "%s\n%s" % (string, fielddisplay(self, 'isfirnwarming', 'is firnwarming (Reeh 1991) activated (0 or 1, default is 1)'))
    122         string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
    123         string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested (TemperaturePDD, SmbAccumulation, SmbMelt)'))
    124131    # }}}
    125132
     
    142149        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'smb_corr', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    143150        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     151        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    144152
    145153        #process requested outputs
  • issm/trunk-jpl/src/m/classes/SMBsemic.m

    r24240 r24793  
    2020                s0gcm                                   = NaN;
    2121                steps_per_step = 1;
     22                averaging = 0;
    2223                requested_outputs = {};
    2324        end
     
    8081                        end
    8182                        md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
     83                        md = checkfield(md,'fieldname','smb.averaging',,'numel',[1],'values',[0 1 2]);
    8284                        md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
    8385
     
    104106                        fielddisplay(self,'s0gcm','GCM reference elevation; (default is 0) [m]');
    105107                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     108                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     109                        disp(sprintf('%55s  0: Arithmetic (default)');
     110                        disp(sprintf('%55s  0: Geometric');
     111                        disp(sprintf('%55s  0: Harmonic');
    106112                        fielddisplay(self,'requested_outputs','additional outputs requested');
    107113                end % }}}
     
    124130                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailytemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    125131                        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
     132                        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
    126133                        %process requested outputs
    127134                        outputs = self.requested_outputs;
  • issm/trunk-jpl/src/m/classes/hydrologydc.m

    r24240 r24793  
    1212                rel_tol                  = 0;
    1313                max_iter                 = 0;
    14     steps_per_step           = 0;
     14                steps_per_step           = 0;
     15                averaging                = 0;
    1516                sedimentlimit_flag       = 0;
    1617                sedimentlimit            = 0;
     
    1920                leakage_factor           = 0;
    2021                basal_moulin_input       = NaN;
    21     requested_outputs        = {};
     22                requested_outputs        = {};
    2223
    2324                spcsediment_head         = NaN;
    24     mask_thawed_node         = NaN;
     25                mask_thawed_node         = NaN;
    2526                sediment_transmitivity   = NaN;
    2627                sediment_compressibility = 0;
     
    3940                epl_conductivity         = 0;
    4041                eplflip_lock             = 0;
    41   end
     42        end
    4243        methods
    43     % {{{ function self = extrude(self,md)
    44                 function self = extrude(self,md)
     44                function self = extrude(self,md)    % {{{
    4545                        self.spcsediment_head=project3d(md,'vector',self.spcsediment_head,'type','node','layer',1);
    4646                        self.sediment_transmitivity=project3d(md,'vector',self.sediment_transmitivity,'type','node','layer',1);
    4747                        self.basal_moulin_input=project3d(md,'vector',self.basal_moulin_input,'type','node','layer',1);
    48       self.mask_thawed_node=project3d(md,'vector',self.mask_thawed_node,'type','node','layer',1);
     48                        self.mask_thawed_node=project3d(md,'vector',self.mask_thawed_node,'type','node','layer',1);
    4949                        if(self.isefficientlayer==1);
    5050                                self.spcepl_head=project3d(md,'vector',self.spcepl_head,'type','node','layer',1);
    51         self.mask_eplactive_node=project3d(md,'vector',self.mask_eplactive_node,'type','node','layer',1);
    52                         end
    53                 end
    54     % }}}
    55                 % {{{ function self = hydrologydc(varargin)
    56                 function self = hydrologydc(varargin)
     51                                self.mask_eplactive_node=project3d(md,'vector',self.mask_eplactive_node,'type','node','layer',1);
     52                        end
     53                end    % }}}
     54                function self = hydrologydc(varargin) % {{{
    5755                        switch nargin
    5856                                case 0
     
    6159                                        error('constructor not supported');
    6260                        end
    63                 end
    64                 % }}}
    65     function list = defaultoutputs(self,md) % {{{
    66         list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'};
    67         if self.isefficientlayer,
    68             list=[list,{'EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
    69         end
    70         if self.steps_per_step>1,
    71             list = [list,'EffectivePressureSubstep','SedimentHeadSubstep'];
    72             if self.isefficientlayer,
    73                 list = [list,'EplHeadSubstep','HydrologydcEplThicknessSubstep'];
    74             end
    75         end
    76     end % }}}
    77 
     61                end% }}}
     62                function list = defaultoutputs(self,md) % {{{
     63                        list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'};
     64                        if self.isefficientlayer,
     65                                list=[list,{'EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
     66                        end
     67                        if self.steps_per_step>1,
     68                                list = [list,'EffectivePressureSubstep','SedimentHeadSubstep'];
     69                                if self.isefficientlayer,
     70                                        list = [list,'EplHeadSubstep','HydrologydcEplThicknessSubstep'];
     71                                end
     72                        end
     73                end % }}}
    7874                function self = initialize(self,md) % {{{
    7975                        self.epl_colapse_thickness = self.sediment_transmitivity/self.epl_conductivity;
     
    8480
    8581                end % }}}
    86                 % {{{ function self = setdefaultparameters(self)
    87 
    88                 function self = setdefaultparameters(self)
    89 
     82                function self = setdefaultparameters(self)% {{{
    9083                        %Parameters from de Fleurian 2014
    9184                        self.water_compressibility    = 5.04e-10;
     
    9689                        self.max_iter                 = 100;
    9790                        self.steps_per_step           = 1;
     91                        self.averaging                = 0;
    9892                        self.sedimentlimit_flag       = 0;
    9993                        self.sedimentlimit            = 0;
     
    10195                        self.unconfined_flag          = 0;
    10296                        self.leakage_factor           = 1.0e-10;
    103       self.requested_outputs        = {'default'};
     97                        self.requested_outputs        = {'default'};
    10498
    10599
     
    117111                        self.epl_max_thickness        = 5.0;
    118112                        self.eplflip_lock             = 0;
    119                 end
    120 
    121                 % }}}
    122                 % {{{ function md = checkconsistency(self,md,solution,analyses)
    123 
    124                 function md = checkconsistency(self,md,solution,analyses)
    125                         %Early return
     113                end  % }}}
     114                function md = checkconsistency(self,md,solution,analyses)% {{{
     115                %Early return
    126116                        if ~ismember('HydrologyDCInefficientAnalysis',analyses) & ~ismember('HydrologyDCEfficientAnalysis',analyses),
    127117                                return;
     
    135125                        md = checkfield(md,'fieldname','hydrology.max_iter','>',0,'numel',1);
    136126                        md = checkfield(md,'fieldname','hydrology.steps_per_step','>',0,'numel',1);
     127                        md = checkfield(md,'fieldname','hydrology.averaging',,'numel',[1],'values',[0 1 2]);
    137128                        md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0 1 2 3]);
    138129                        md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0 1]);
    139130                        md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0 1]);
    140       md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
     131                        md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
    141132                        if self.sedimentlimit_flag==1,
    142133                                md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1);
     
    152143                        md = checkfield(md,'fieldname','hydrology.sediment_thickness','>',0,'numel',1);
    153144                        md = checkfield(md,'fieldname','hydrology.sediment_transmitivity','>=',0,'size',[md.mesh.numberofvertices 1]);
    154       md = checkfield(md,'fieldname','hydrology.mask_thawed_node','size',[md.mesh.numberofvertices 1],'values',[0 1]);
     145                        md = checkfield(md,'fieldname','hydrology.mask_thawed_node','size',[md.mesh.numberofvertices 1],'values',[0 1]);
    155146
    156147                        if self.isefficientlayer==1,
     
    169160                                end
    170161                        end
    171                 end
    172 
    173                 % }}}
    174                 % {{{ function disp(self)
    175 
    176                 function disp(self)
     162                end% }}}
     163                function disp(self)% {{{
    177164                        disp(sprintf('   hydrology Dual Porous Continuum Equivalent parameters:'));
    178165                        disp(sprintf('   - general parameters'));
     
    184171                        fielddisplay(self,'max_iter','maximum number of nonlinear iteration');
    185172                        fielddisplay(self,'steps_per_step','number of hydrology steps per timestep');
     173                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     174                        disp(sprintf('%55s  0: Arithmetic (default)');
     175                        disp(sprintf('%55s  0: Geometric');
     176                        disp(sprintf('%55s  0: Harmonic');
    186177                        fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer');
    187178                        disp(sprintf('%55s  0: no limit',' '));
     
    224215                                fielddisplay(self,'eplflip_lock','lock the epl activation to avoid fli-floping (default is 0, no stabilization)');
    225216                        end
    226 
    227                 end
    228 
    229                 % }}}
    230                 % {{{ function marshall(self,prefix,md,fid)
    231 
    232                 function marshall(self,prefix,md,fid)
     217                end % }}}
     218                function marshall(self,prefix,md,fid)% {{{
    233219                        WriteData(fid,prefix,'name','md.hydrology.model','data',1,'format','Integer');
    234220                        WriteData(fid,prefix,'object',self,'fieldname','water_compressibility','format','Double');
     
    239225                        WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer');
    240226                        WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer');
     227                        WriteData(fid,prefix,'object',self,'fieldname','averaging','format','Integer');
    241228                        WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer');
    242229                        WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer');
     
    255242                        WriteData(fid,prefix,'object',self,'fieldname','sediment_thickness','format','Double');
    256243                        WriteData(fid,prefix,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1');
    257       WriteData(fid,prefix,'object',self,'fieldname','mask_thawed_node','format','DoubleMat','mattype',1);
    258 
     244                        WriteData(fid,prefix,'object',self,'fieldname','mask_thawed_node','format','DoubleMat','mattype',1);
    259245                        if self.isefficientlayer==1,
    260246                                WriteData(fid,prefix,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
     
    269255                                WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer');
    270256                        end
    271       outputs = self.requested_outputs;
    272       pos  = find(ismember(outputs,'default'));
    273       if ~isempty(pos),
    274         outputs(pos) = [];  %remove 'default' from outputs
    275         outputs      = [outputs defaultoutputs(self,md)]; %add defaults
    276       end
    277       WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
    278                 end
    279 
    280                 % }}}
     257                        outputs = self.requested_outputs;
     258                        pos  = find(ismember(outputs,'default'));
     259                        if ~isempty(pos),
     260                                outputs(pos) = [];  %remove 'default' from outputs
     261                                outputs      = [outputs defaultoutputs(self,md)]; %add defaults
     262                        end
     263                        WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
     264                end% }}}
    281265        end
    282266end
  • issm/trunk-jpl/src/m/classes/hydrologydc.py

    r24240 r24793  
    2222        self.max_iter = 0
    2323        self.steps_per_step = 0
     24        self.averaging = 0
    2425        self.sedimentlimit_flag = 0
    2526        self.sedimentlimit = 0
     
    5051    #set defaults
    5152        self.setdefaultparameters()
    52     #}}}
     53    # }}}
    5354
    5455    def __repr__(self):  # {{{
     
    6263        string = "%s\n%s" % (string, fielddisplay(self, 'max_iter', 'maximum number of nonlinear iteration'))
    6364        string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of hydrology steps per time step'))
     65        string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
     66        string = "%s\n\t\t%s" % (string, '0: Arithmetic (default)')
     67        string = "%s\n\t\t%s" % (string, '1: Geometric')
     68        string = "%s\n\t\t%s" % (string, '2: Harmonic')
    6469        string = "%s\n%s" % (string, fielddisplay(self, 'basal_moulin_input', 'water flux at a given point [m3 s - 1]'))
    6570        string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional outputs requested'))
     
    105110            string = "%s\n%s" % (string, fielddisplay(self, 'eplflip_lock', 'lock epl activity to avoid flip - floping (default is 0, no stabilization)'))
    106111        return string
     112    # }}}
    107113
    108114    def extrude(self, md):  # {{{
     
    115121            self.mask_eplactive_node = project3d(md, 'vector', self.mask_eplactive_node, 'type', 'node', 'layer', 1)
    116122        return self
    117     #}}}
    118 
    119     def setdefaultparameters(self):  #{{{
     123    # }}}
     124
     125    def setdefaultparameters(self):  # {{{
    120126        #Parameters from de Fleurian 2014
    121127        self.water_compressibility = 5.04e-10
     
    126132        self.max_iter = 100
    127133        self.steps_per_step = 1
     134        self.averaging = 0
    128135        self.sedimentlimit_flag = 0
    129136        self.sedimentlimit = 0
     
    158165                list.extend(['EplHeadSubstep', 'HydrologydcEplThicknessSubstep'])
    159166        return list
    160     #}}}
     167    # }}}
    161168
    162169    def initialize(self, md):  # {{{
     
    169176    # }}}
    170177
    171     def checkconsistency(self, md, solution, analyses):  #{{{
     178    def checkconsistency(self, md, solution, analyses):  # {{{
    172179        #Early return
    173180        if 'HydrologyDCInefficientAnalysis' not in analyses and 'HydrologyDCEfficientAnalysis' not in analyses:
     
    181188        md = checkfield(md, 'fieldname', 'hydrology.max_iter', '>', 0., 'numel', [1])
    182189        md = checkfield(md, 'fieldname', 'hydrology.steps_per_step', '>=', 1, 'numel', [1])
     190        md = checkfield(md, 'fieldname', 'hydrology.averaging', 'numel', [1], 'values', [0, 1, 2])
    183191        md = checkfield(md, 'fieldname', 'hydrology.sedimentlimit_flag', 'numel', [1], 'values', [0, 1, 2, 3])
    184192        md = checkfield(md, 'fieldname', 'hydrology.transfer_flag', 'numel', [1], 'values', [0, 1])
     
    214222    # }}}
    215223
    216     def marshall(self, prefix, md, fid):  #{{{
     224    def marshall(self, prefix, md, fid):  # {{{
    217225        WriteData(fid, prefix, 'name', 'md.hydrology.model', 'data', 1, 'format', 'Integer')
    218226        WriteData(fid, prefix, 'object', self, 'fieldname', 'water_compressibility', 'format', 'Double')
     
    223231        WriteData(fid, prefix, 'object', self, 'fieldname', 'max_iter', 'format', 'Integer')
    224232        WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer')
     233        WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer')
    225234        WriteData(fid, prefix, 'object', self, 'fieldname', 'sedimentlimit_flag', 'format', 'Integer')
    226235        WriteData(fid, prefix, 'object', self, 'fieldname', 'transfer_flag', 'format', 'Integer')
Note: See TracChangeset for help on using the changeset viewer.