Changeset 24544


Ignore:
Timestamp:
02/04/20 16:38:15 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added perturbation

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

Legend:

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

    r24202 r24544  
    1111                upperwater_elevation      = 0.;
    1212                groundedice_melting_rate  = NaN;
     13                perturbation_melting_rate = NaN;
    1314                geothermalflux            = NaN;
    1415        end
     
    2526                end % }}}
    2627                function self = extrude(self,md) % {{{
     28                        self.perturbation_melting_rate=project3d(md,'vector',self.perturbation_melting_rate,'type','node','layer',1);
    2729                        self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1);
    2830                        self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
     
    4648                end % }}}
    4749                function md = checkconsistency(self,md,solution,analyses) % {{{
     50
     51                        if numel(md.basalforcings.perturbation_melting_rate)>1
     52                                md = checkfield(md,'fieldname','basalforcings.perturbation_melting_rate','NaN',1,'Inf',1,'timeseries',1);
     53                        end
    4854
    4955                        if ismember('MasstransportAnalysis',analyses) & ~(strcmp(solution,'TransientSolution') & md.transient.ismasstransport==0),
     
    7884                        fielddisplay(self,'upperwater_elevation','elevation of ocean upperwater [m]');
    7985                        fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]');
     86                        fielddisplay(self,'perturbation_melting_rate','basal melting rate perturbation added to computed melting rate (positive if melting) [m/yr]');
    8087                        fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]');
    8188
     
    8693
    8794                        WriteData(fid,prefix,'name','md.basalforcings.model','data',2,'format','Integer');
     95                        WriteData(fid,prefix,'object',self,'fieldname','perturbation_melting_rate','format','DoubleMat','name','md.basalforcings.perturbation_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
    8896                        WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
    8997                        WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
  • issm/trunk-jpl/src/m/classes/linearbasalforcings.py

    r24261 r24544  
    1818            print('empty init')
    1919            self.groundedice_melting_rate = float('NaN')
     20            self.perturbation_melting_rate = float('NaN')
    2021            self.deepwater_melting_rate = 0.
    2122            self.deepwater_elevation = 0.
     
    3031            inv = args[0]
    3132            self.groundedice_melting_rate = inv.groundedice_melting_rate
     33            self.perturbation_melting_rate = inv.perturbation_melting_rate
    3234            self.geothermalflux = inv.geothermalflux
    3335            self.deepwater_melting_rate = 0.
     
    4143            raise Exception('constructor not supported')
    4244    #}}}
    43 
    4445    def __repr__(self):  # {{{
    4546        string = "   linear basal forcings parameters:"
     
    4950        string = "%s\n%s" % (string, fielddisplay(self, "upperwater_elevation", "elevation of ocean upper water [m]"))
    5051        string = "%s\n%s" % (string, fielddisplay(self, "groundedice_melting_rate", "basal melting rate (positive if melting) [m/yr]"))
     52        string = "%s\n%s" % (string, fielddisplay(self, "perturbation_melting_rate", "perturbation applied to computed melting rate (positive if melting) [m/yr]"))
    5153        string = "%s\n%s" % (string, fielddisplay(self, "geothermalflux", "geothermal heat flux [W/m^2]"))
    5254        return string
    5355    #}}}
    54 
    5556    def initialize(self, md):  # {{{
    5657        if np.all(np.isnan(self.groundedice_melting_rate)):
     
    5960        return self
    6061    #}}}
    61 
    6262    def setdefaultparameters(self):  # {{{
    6363        self.deepwater_melting_rate = 50.0
     
    6868        return self
    6969    #}}}
     70    def checkconsistency(self, md, solution, analyses):  # {{{
    7071
    71     def checkconsistency(self, md, solution, analyses):  # {{{
     72        if not np.all(np.isnan(self.perturbation_melting_rate)):
     73            md = checkfield(md, 'fieldname', 'basalforcings.perturbation_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1)
     74
    7275        if 'MasstransportAnalysis' in analyses and not (solution == 'TransientSolution' and not md.transient.ismasstransport):
    7376            md = checkfield(md, 'fieldname', 'basalforcings.groundedice_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1)
     
    9497        return md
    9598    # }}}
    96 
    9799    def marshall(self, prefix, md, fid):  # {{{
    98100        yts = md.constants.yts
    99101
    100102        WriteData(fid, prefix, 'name', 'md.basalforcings.model', 'data', 2, 'format', 'Integer')
     103        WriteData(fid, prefix, 'object', self, 'fieldname', 'perturbation_melting_rate', 'name', 'md.basalforcings.perturbation_melting_rate', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    101104        WriteData(fid, prefix, 'object', self, 'fieldname', 'groundedice_melting_rate', 'name', 'md.basalforcings.groundedice_melting_rate', 'format', 'DoubleMat', 'mattype', 1, 'scale', 1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
    102105        WriteData(fid, prefix, 'object', self, 'fieldname', 'geothermalflux', 'name', 'md.basalforcings.geothermalflux', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)
Note: See TracChangeset for help on using the changeset viewer.