Changeset 27178


Ignore:
Timestamp:
08/02/22 02:54:59 (3 years ago)
Author:
bdef
Message:

NEW: adding possibility to average forcing between two model times

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

Legend:

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

    r26304 r27178  
    55
    66classdef timestepping
    7         properties (SetAccess=public) 
     7        properties (SetAccess=public)
    88                start_time      = 0.;
    99                final_time      = 0.;
    1010                time_step       = 0.;
    1111                interp_forcing  = 1;
     12                average_forcing  = 0;
    1213                cycle_forcing   = 0;
    1314                coupling_time   = 0.;
     
    3233                        fielddisplay(self,'time_step',['length of time steps [' unit ']']);
    3334                        fielddisplay(self,'interp_forcing','interpolate in time between requested forcing values? (0 or 1)');
     35                        fielddisplay(self,'average_forcing','average in time if there are several forcing values between steps? (0 or 1, default is 0)');
    3436                        fielddisplay(self,'cycle_forcing','cycle through forcing? (0 or 1)');
    3537                        fielddisplay(self,'coupling_time',['length of coupling time step with ocean model [' unit ']']);
     
    4648                        %should we interpolate forcing between timesteps?
    4749                        self.interp_forcing=1;
     50                        self.average_forcing=0;
    4851                        self.cycle_forcing=0;
    4952                end % }}}
     
    5457                        md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
    5558                        md = checkfield(md,'fieldname','timestepping.interp_forcing','numel',[1],'values',[0 1]);
     59                        md = checkfield(md,'fieldname','timestepping.average_forcing','numel',[1],'values',[0 1]);
    5660                        md = checkfield(md,'fieldname','timestepping.cycle_forcing','numel',[1],'values',[0 1]);
    5761                        if self.final_time-self.start_time<0,
    5862                                md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
    59                         end 
     63                        end
    6064                        if strcmp(solution,'TransientSolution'),
    6165                                md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>',0,'NaN',1,'Inf',1);
     
    7074                        WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
    7175                        WriteData(fid,prefix,'object',self,'fieldname','interp_forcing','format','Boolean');
     76                        WriteData(fid,prefix,'object',self,'fieldname','average_forcing','format','Boolean');
    7277                        WriteData(fid,prefix,'object',self,'fieldname','cycle_forcing','format','Boolean');
    7378                        WriteData(fid,prefix,'object',self,'fieldname','coupling_time','format','Double','scale',scale);
    7479                end % }}}
    7580                function savemodeljs(self,fid,modelname) % {{{
    76                
     81
    7782                        writejsdouble(fid,[modelname '.timestepping.start_time'],self.start_time);
    7883                        writejsdouble(fid,[modelname '.timestepping.final_time'],self.final_time);
    7984                        writejsdouble(fid,[modelname '.timestepping.time_step'],self.time_step);
    8085                        writejsdouble(fid,[modelname '.timestepping.interp_forcing'],self.interp_forcing);
     86                        writejsdouble(fid,[modelname '.timestepping.average_forcing'],self.interp_forcing);
    8187                        writejsdouble(fid,[modelname '.timestepping.cycle_forcing'],self.cycle_forcing);
    8288
  • issm/trunk-jpl/src/m/classes/timestepping.py

    r26304 r27178  
    1111    """
    1212
    13     def __init__(self, *args): #{{{
     13    def __init__(self, *args):  #{{{
    1414        self.start_time = 0
    1515        self.final_time = 0
    1616        self.time_step = 0
    1717        self.interp_forcing = 1
     18        self.average_forcing = 0
    1819        self.cycle_forcing = 0
    1920        self.coupling_time = 0
     
    2425            raise RuntimeError('constructor not supported')
    2526    #}}}
    26     def __repr__(self): #{{{
     27
     28    def __repr__(self):  #{{{
    2729        s = '   timestepping parameters:\n'
    2830        unit = 'yr'
     
    3133        s += '{}\n'.format(fielddisplay(self, 'time_step', 'length of time steps [' + unit + ']'))
    3234        s += '{}\n'.format(fielddisplay(self, 'interp_forcing', 'interpolate in time between requested forcing values? (0 or 1)'))
     35        s += '{}\n'.format(fielddisplay(self, 'average_forcing', 'average in time if there are several forcing values between steps? (0 or 1, default is 0)'))
    3336        s += '{}\n'.format(fielddisplay(self, 'cycle_forcing', 'cycle through forcing? (0 or 1)'))
    3437        s += '{}\n'.format(fielddisplay(self, 'coupling_time', 'length of coupling time steps with ocean model [' + unit + ']'))
    3538        return s
    3639    #}}}
    37     def setdefaultparameters(self): #{{{
     40
     41    def setdefaultparameters(self):  #{{{
    3842        # Time between 2 time steps
    3943        self.time_step = 1 / 2
     
    4448        # Should we interpolate forcing between timesteps?
    4549        self.interp_forcing = 1
     50        self.average_forcing = 0
    4651        self.cycle_forcing = 0
    4752
    4853        return self
    4954    #}}}
    50     def checkconsistency(self, md, solution, analyses): #{{{
     55
     56    def checkconsistency(self, md, solution, analyses):  #{{{
    5157        md = checkfield(md, 'fieldname', 'timestepping.start_time', 'numel', [1], 'NaN', 1, 'Inf', 1)
    5258        md = checkfield(md, 'fieldname', 'timestepping.final_time', 'numel', [1], 'NaN', 1, 'Inf', 1)
    5359        md = checkfield(md, 'fieldname', 'timestepping.time_step', 'numel', [1], '>=', 0, 'NaN', 1, 'Inf', 1)
     60        md = checkfield(md, 'fieldname', 'timestepping.interp_forcing', 'numel', [1], 'values', [0, 1])
     61        md = checkfield(md, 'fieldname', 'timestepping.average_forcing', 'numel', [1], 'values', [0, 1])
    5462        md = checkfield(md, 'fieldname', 'timestepping.cycle_forcing', 'numel', [1], 'values', [0, 1])
    5563        if (self.final_time - self.start_time) < 0:
     
    6068        return md
    6169    #}}}
    62     def marshall(self, prefix, md, fid): #{{{
     70
     71    def marshall(self, prefix, md, fid):  #{{{
    6372        scale = md.constants.yts
    6473        WriteData(fid, prefix, 'name', 'md.timestepping.type', 'data', 1, 'format', 'Integer')
     
    6776        WriteData(fid, prefix, 'object', self, 'fieldname', 'time_step', 'format', 'Double', 'scale', scale)
    6877        WriteData(fid, prefix, 'object', self, 'fieldname', 'interp_forcing', 'format', 'Boolean')
     78        WriteData(fid, prefix, 'object', self, 'fieldname', 'average_forcing', 'format', 'Boolean')
    6979        WriteData(fid, prefix, 'object', self, 'fieldname', 'cycle_forcing', 'format', 'Boolean')
    7080        WriteData(fid, prefix, 'object', self, 'fieldname', 'coupling_time', 'format', 'Double', 'scale', scale)
  • issm/trunk-jpl/src/m/classes/timesteppingadaptive.m

    r26208 r27178  
    55
    66classdef timesteppingadaptive
    7         properties (SetAccess=public) 
     7        properties (SetAccess=public)
    88                start_time      = 0.;
    99                final_time      = 0.;
     
    1111                time_step_max   = 0.;
    1212                cfl_coefficient = 0.;
    13                 interp_forcing = 1;
    14                 cycle_forcing = 1;
     13                interp_forcing  = 1;
     14                average_forcing = 0;
     15                cycle_forcing   = 1;
    1516                coupling_time   = 0.;
    1617        end
     
    4041                        %should we interpolate forcing between timesteps?
    4142                        self.interp_forcing=1;
     43                        self.average_forcing=0;
    4244                        self.cycle_forcing=0;
    4345                end % }}}
     
    5052                        md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
    5153                        md = checkfield(md,'fieldname','timestepping.interp_forcing','numel',[1],'values',[0 1]);
     54                        md = checkfield(md,'fieldname','timestepping.average_forcing','numel',[1],'values',[0 1]);
    5255                        md = checkfield(md,'fieldname','timestepping.cycle_forcing','numel',[1],'values',[0 1]);
    5356                        md = checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',md.timestepping.coupling_time,'NaN',1,'Inf',1);
    5457                        if self.final_time-self.start_time<0,
    5558                                md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
    56                         end 
     59                        end
    5760                end % }}}
    5861                function disp(self) % {{{
     
    6669                        fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
    6770                        fielddisplay(self,'interp_forcing','interpolate in time between requested forcing values ? (0 or 1)');
     71                        fielddisplay(self,'average_forcing','average in time if there are several forcing values between steps? (0 or 1, default is 0)');
    6872                        fielddisplay(self,'cycle_forcing','cycle through forcing ? (0 or 1)');
    6973                        fielddisplay(self,'coupling_time',['coupling time step with ocean model [' unit ']']);
     
    8084                        WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
    8185                        WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcing','format','Boolean');
     86                        WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','average_forcing','format','Boolean');
    8287                        WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cycle_forcing','format','Boolean');
    8388                        WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','coupling_time','format','Double','scale',scale);
    8489                end % }}}
    8590                function savemodeljs(self,fid,modelname) % {{{
    86                
     91
    8792                        writejsdouble(fid,[modelname '.timesteppingadaptive.start_time'],self.start_time);
    8893                        writejsdouble(fid,[modelname '.timesteppingadaptive.final_time'],self.final_time);
     
    9196                        writejsdouble(fid,[modelname '.timesteppingadaptive.cfl_coefficient'],self.cfl_coefficient);
    9297                        writejsdouble(fid,[modelname '.timesteppingadaptive.interp_forcing'],self.interp_forcing);
     98                        writejsdouble(fid,[modelname '.timesteppingadaptive.average_forcing'],self.interp_forcing);
    9399                        writejsdouble(fid,[modelname '.timesteppingadaptive.cycle_forcing'],self.cycle_forcing);
    94100                        writejsdouble(fid,[modelname '.timesteppingadaptive.coupling_time'],self.time_step_max);
  • issm/trunk-jpl/src/m/classes/timesteppingadaptive.py

    r26208 r27178  
    2020            self.cfl_coefficient = 0.
    2121            self.interp_forcing = 1
     22            self.average_forcing = 0
    2223            self.cycle_forcing = 0
    2324            self.coupling_time = 0.
     
    3334            self.final_time = old.final_time
    3435            self.interp_forcing = old.interp_forcing
     36            self.average_forcing = old.average_forcing
    3537            self.cycle_forcing = old.cycle_forcing
    3638            self.coupling_time = old.coupling_time
     
    4244    def __repr__(self):  # {{{
    4345        string = "   timesteppingadaptive parameters:"
    44         string = "%s\n%s" % (string, fielddisplay(self, "start_time", "simulation starting time [yr]"))
    45         string = "%s\n%s" % (string, fielddisplay(self, "final_time", "final time to stop the simulation [yr]"))
    46         string = "%s\n%s" % (string, fielddisplay(self, "time_step_min", "minimum length of time steps [yr]"))
    47         string = "%s\n%s" % (string, fielddisplay(self, "time_step_max", "maximum length of time steps [yr]"))
    48         string = "%s\n%s" % (string, fielddisplay(self, "cfl_coefficient", "coefficient applied to cfl condition"))
    49         string = "%s\n%s" % (string, fielddisplay(self, "interp_forcing", "interpolate in time between requested forcing values ? (0 or 1)"))
    50         string = "%s\n%s" % (string, fielddisplay(self, "cycle_forcing", "cycle through forcing ? (0 or 1)"))
    51         string = "%s\n%s" % (string, fielddisplay(self, "coupling_time", "coupling time steps with ocean model [yr]"))
     46        string = '{}\n{}'.format (string, fielddisplay(self, "start_time", "simulation starting time [yr]"))
     47        string = '{}\n{}'.format(string, fielddisplay(self, "final_time", "final time to stop the simulation [yr]"))
     48        string = '{}\n{}'.format (string, fielddisplay(self, "time_step_min", "minimum length of time steps [yr]"))
     49        string = '{}\n{}'.format (string, fielddisplay(self, "time_step_max", "maximum length of time steps [yr]"))
     50        string = '{}\n{}'.format (string, fielddisplay(self, "cfl_coefficient", "coefficient applied to cfl condition"))
     51        string = '{}\n{}'.format (string, fielddisplay(self, "interp_forcing", "interpolate in time between requested forcing values ? (0 or 1)"))
     52        string = '{}\n{}'.format(string, fielddisplay(self, 'average_forcing', 'average in time if there are several forcing values between steps? (0 or 1, default is 0)'))
     53        string = '{}\n{}'.format(string, fielddisplay(self, "cycle_forcing", "cycle through forcing ? (0 or 1)"))
     54        string = '{}\n{}'.format(string, fielddisplay(self, "coupling_time", "coupling time steps with ocean model [yr]"))
    5255        return string
    5356    # }}}
     
    6366        #should we interpolate forcing between timesteps?
    6467        self.interp_forcing = 1
     68        self.average_forcing = 0
    6569        self.cycle_forcing   = 0
    6670        return self
     
    7680            md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
    7781        md = checkfield(md, 'fieldname', 'timestepping.interp_forcing', 'numel', [1], 'values', [0, 1])
     82        md = checkfield(md, 'fieldname', 'timestepping.average_forcing', 'numel', [1], 'values', [0, 1])
    7883        md = checkfield(md, 'fieldname', 'timestepping.cycle_forcing', 'numel', [1], 'values', [0, 1])
    7984        md = checkfield(md, 'fieldname', 'timestepping.coupling_time', 'numel', [1], '>=', 0, 'NaN', 1, 'Inf', 1)
     
    9196        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'cfl_coefficient', 'format', 'Double')
    9297        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'interp_forcing', 'format', 'Boolean')
     98        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'average_forcing', 'format', 'Boolean')
    9399        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'cycle_forcing', 'format', 'Boolean')
    94100        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'coupling_time', 'format', 'Double', 'scale', yts)
Note: See TracChangeset for help on using the changeset viewer.