source: issm/oecreview/Archive/24684-25833/ISSM-25805-25806.diff

Last change on this file was 25834, checked in by Mathieu Morlighem, 4 years ago

CHG: added 24684-25833

File size: 18.8 KB
  • ../trunk-jpl/src/m/classes/frictionschoof.py

     
     1import numpy as np
     2
     3from checkfield import checkfield
     4from fielddisplay import fielddisplay
     5from project3d import project3d
     6from structtoobj import structtoobj
     7from WriteData import WriteData
     8
     9
     10class frictionschoof(object):
     11    """FRICTIONSCHOOF class definition
     12
     13    Usage:
     14        friction = frictionschoof()
     15    """
     16
     17    def __init__(self, *args):  # {{{
     18        self.C                          = np.nan
     19        self.Cmax                       = np.nan
     20        self.m                          = np.nan
     21        self.effective_pressure_limit   = 0
     22       
     23        nargs = len(args)
     24        if nargs == 0:
     25            self.setdefaultparameters()
     26        elif nargs == 1:
     27            self = structtoobj(self, args[0])
     28        else:
     29            raise Exception('constructor not supported')
     30    #}}}
     31
     32    def __repr__(self):  # {{{
     33        # See Brondex et al. 2019 https://www.the-cryosphere.net/13/177/2019/
     34        s = 'Schoof sliding law parameters:\n'
     35        s += '   Schoof\'s sliding law reads:\n'
     36        s += '                         C^2 |u_b|^(m-1)                \n'
     37        s += '      tau_b = - _____________________________   u_b   \n'
     38        s += '               (1+(C^2/(Cmax N))^1/m |u_b| )^m          \n'
     39        s += '\n'
     40        s += "{}\n".format(fielddisplay(self, 'C', 'friction coefficient [SI]'))
     41        s += "{}\n".format(fielddisplay(self, 'Cmax', 'Iken\'s bound (typically between 0.17 and 0.84) [SI]'))
     42        s += "{}\n".format(fielddisplay(self, 'm', 'm exponent (generally taken as m = 1/n = 1/3)'))
     43        s += "{}\n".format(fielddisplay(self, 'effective_pressure_limit', 'fNeff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)'))
     44        return s
     45    #}}}
     46
     47    def setdefaultparameters(self):  # {{{
     48        self.effective_pressure_limit = 0
     49        return self
     50    #}}}
     51
     52    def extrude(self, md):  # {{{
     53        self.C = project3d(md, 'vector', self.C, 'type', 'node')
     54        self.Cmax = project3d(md, 'vector', self.Cmax, 'type', 'node')
     55        self.m = project3d(md, 'vector', self.m, 'type', 'element')
     56        return self
     57    #}}}
     58
     59    def checkconsistency(self, md, solution, analyses):  # {{{
     60        # Early return
     61        if 'StressbalanceAnalysis' not in analyses and 'ThermalAnalysis' not in analyses:
     62            return md
     63        md = checkfield(md, 'fieldname', 'friction.C', 'timeseries', 1, 'NaN', 1, 'Inf', 1, '>',0.)
     64        md = checkfield(md, 'fieldname', 'friction.Cmax', 'timeseries', 1, 'NaN', 1, 'Inf', 1, '>', 0.)
     65        md = checkfield(md, 'fieldname', 'friction.m', 'NaN', 1, 'Inf', 1, '>', 0., 'size', [md.mesh.numberofelements, 1])
     66        md = checkfield(md, 'fieldname', 'friction.effective_pressure_limit', 'numel', [1], '>=', 0)
     67        return md
     68    # }}}
     69
     70    def marshall(self, prefix, md, fid):  # {{{
     71        yts = md.constants.yts
     72
     73        WriteData(fid, prefix, 'name', 'md.friction.law', 'data', 11, 'format', 'Integer')
     74        WriteData(fid, prefix, 'class', 'friction', 'object', self, 'fieldname', 'C', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
     75        WriteData(fid, prefix, 'class', 'friction', 'object', self, 'fieldname', 'Cmax', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
     76        WriteData(fid, prefix, 'class', 'friction', 'object', self, 'fieldname', 'm', 'format', 'DoubleMat', 'mattype', 2)
     77        WriteData(fid, prefix, 'object', self, 'class', 'friction', 'fieldname', 'effective_pressure_limit', 'format', 'Double')
     78    # }}}
     79
  • ../trunk-jpl/src/m/classes/frictionshakti.py

     
    2727    def __repr__(self):  # {{{
    2828        s = 'Basal shear stress parameters: Sigma_b = coefficient^2 * Neff * u_b\n'
    2929        s += '(effective stress Neff = rho_ice * g * thickness + rho_water * g * (head - b))\n'
    30         s += "{}\n".format(fielddisplay(self, "coefficient", "friction coefficient [SI]"))
     30        s += '{}\n'.format(fielddisplay(self, 'coefficient', 'friction coefficient [SI]'))
    3131        return s
    3232    #}}}
    3333
  • ../trunk-jpl/src/m/classes/calving.py

     
     1import numpy as np
     2
     3from checkfield import checkfield
    14from fielddisplay import fielddisplay
    25from project3d import project3d
    3 from checkfield import checkfield
    46from WriteData import WriteData
    57
    68
    79class calving(object):
    8     """
    9     CALVING class definition
     10    """CALVING class definition
    1011
    11        Usage:
    12           calving = calving()
     12    Usage:
     13        calving = calving()
    1314    """
    1415
    1516    def __init__(self):  # {{{
    16 
    17         self.calvingrate = float('NaN')
    18 
    19     #set defaults
     17        self.calvingrate = np.nan
    2018        self.setdefaultparameters()
    2119
    2220    #}}}
    2321
    2422    def __repr__(self):  # {{{
    25         string = '   Calving parameters:'
    26         string = "%s\n%s" % (string, fielddisplay(self, 'calvingrate', 'calving rate at given location [m / a]'))
    27 
    28         return string
     23        s = '   Calving parameters:'
     24        s += '{}\n'.format(fielddisplay(self, 'calvingrate', 'calving rate at given location [m / a]'))
     25        return s
    2926    #}}}
    3027
    3128    def extrude(self, md):  # {{{
     
    3936
    4037    def checkconsistency(self, md, solution, analyses):  # {{{
    4138        #Early return
    42         if (solution != 'TransientSolution') or (not md.transient.ismovingfront):
     39        if solution != 'TransientSolution' or not md.transient.ismovingfront:
    4340            return md
    4441
    4542        md = checkfield(md, 'fieldname', 'calving.calvingrate', '>=', 0, 'timeseries', 1, 'NaN', 1, 'Inf', 1)
  • ../trunk-jpl/src/m/classes/inversion.py

     
    5353        s += '{}\n'.format(fielddisplay(self, 'step_threshold', 'decrease threshold for misfit, default is 30%'))
    5454        s += '{}\n'.format(fielddisplay(self, 'min_parameters', 'absolute minimum acceptable value of the inversed parameter on each vertex'))
    5555        s += '{}\n'.format(fielddisplay(self, 'max_parameters', 'absolute maximum acceptable value of the inversed parameter on each vertex'))
    56         s += '{}\n'.format(fielddisplay(self, 'vx_obs', 'observed velocity x component [m / yr]'))
    57         s += '{}\n'.format(fielddisplay(self, 'vy_obs', 'observed velocity y component [m / yr]'))
    58         s += '{}\n'.format(fielddisplay(self, 'vel_obs', 'observed velocity magnitude [m / yr]'))
     56        s += '{}\n'.format(fielddisplay(self, 'vx_obs', 'observed velocity x component [m/yr]'))
     57        s += '{}\n'.format(fielddisplay(self, 'vy_obs', 'observed velocity y component [m/yr]'))
     58        s += '{}\n'.format(fielddisplay(self, 'vel_obs', 'observed velocity magnitude [m/yr]'))
    5959        s += '{}\n'.format(fielddisplay(self, 'thickness_obs', 'observed thickness [m]'))
    6060        s += '{}\n'.format(fielddisplay(self, 'surface_obs', 'observed surface elevation [m]'))
    6161        s += '{}\n'.format('Available cost functions:')
     
    159159        if not self.iscontrol:
    160160            return
    161161        WriteData(fid, prefix, 'object', self, 'fieldname', 'nsteps', 'format', 'Integer')
    162         WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter_per_step', 'format', 'DoubleMat', 'mattype', 3)
     162        WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter_per_step', 'format', 'IntMat', 'mattype', 3)
    163163        WriteData(fid, prefix, 'object', self, 'fieldname', 'cost_functions_coefficients', 'format', 'DoubleMat', 'mattype', 1)
    164164        WriteData(fid, prefix, 'object', self, 'fieldname', 'gradient_scaling', 'format', 'DoubleMat', 'mattype', 3)
    165165        WriteData(fid, prefix, 'object', self, 'fieldname', 'cost_function_threshold', 'format', 'Double')
  • ../trunk-jpl/src/m/classes/solidearthsettings.py

     
    2121        self.rotation               = 0
    2222        self.ocean_area_scaling     = 0
    2323        self.runfrequency           = 1 # How many time steps we skip before we run grd_core
    24         self.computesealevelchange  = 0 # Will grd_core compute sea level?
     24        self.computesealevelchange  = 1 # Will grd_core compute sea level?
    2525        self.isgrd                  = 1 # Will GRD patterns be computed?
    2626        self.degacc                 = 0 # Degree increment for resolution of Green tables
    2727        self.horiz                  = 0 # Compute horizontal displacement?
     
    6565        self.rotation = 1
    6666        self.ocean_area_scaling = 0
    6767        self.isgrd = 1
    68         self.computesealevelchange = 0
     68        self.computesealevelchange = 1
    6969
    7070        # Numerical discretization accuracy
    7171        self.degacc = .01
     
    7373        # How many time steps we skip before we run solidearthsettings solver during transient
    7474        self.runfrequency = 1
    7575
     76        # Fractional contribution
     77        self.glfraction = 1
     78
    7679        # Horizontal displacement? (not on by default)
    7780        self.horiz = 0
    78 
    79         # Fractional contribution
    80         self.glfraction = 1
    8181    #}}}
    8282
    8383    def checkconsistency(self, md, solution, analyses): # {{{
  • ../trunk-jpl/src/m/inversions/supportedcostfunctions.py

     
    11def supportedcostfunctions():
    2     return [101, 102, 103, 104, 105, 201, 501, 502, 503, 504, 505]
     2    return list(range(101, 105 + 1)) + [201] + list(range(501, 508 + 1)) + [510] + list(range(601, 604 + 1))
  • ../trunk-jpl/src/m/inversions/supportedcontrols.py

     
    11def supportedcontrols():
    2     return ['BalancethicknessThickeningRate', 'FrictionCoefficient', 'FrictionAs', 'MaterialsRheologyBbar', 'DamageDbar', 'Vx', 'Vy']
     2    return [
     3        'BalancethicknessThickeningRate',
     4        'FrictionCoefficient',
     5        'FrictionC',
     6        'FrictionAs',
     7        'MaterialsRheologyBbar',
     8        'DamageDbar',
     9        'Vx',
     10        'Vy',
     11        'Thickness',
     12        'BalancethicknessOmega',
     13        'BalancethicknessApparentMassbalance',
     14        'MaterialsRheologyB'
     15    ]
  • ../trunk-jpl/src/m/qmu/postqmu.m

     
    1515           disp(sprintf('%s',fline));
    1616           fline=fgetl(fide);
    1717       end
    18        warning(['Dakota returned error in ''' qmuerrfile ' file. qmu directory retained.'])
     18       warning(['Dakota returned error in ''' qmuerrfile ''' file. QMU directory retained.'])
    1919   end
    2020   status=fclose(fide);
    2121end
  • ../trunk-jpl/test/NightlyRun/test356.py

     
     1#Test Name: TransientFrictionSchoof
     2import numpy as np
     3
     4from frictionschoof import frictionschoof
     5from MatlabFuncs import oshostname
     6from model import *
     7from parameterize import parameterize
     8from setflowequation import setflowequation
     9from setmask import setmask
     10from solve import solve
     11from transient import transient
     12from triangle import triangle
     13
     14
     15md = triangle(model(), '../Exp/Square.exp', 200000.)
     16md = setmask(md, '', '')
     17md = parameterize(md, '../Par/SquareSheetConstrained.py')
     18md = setflowequation(md, 'SSA', 'all')
     19
     20# Use Schoof's law
     21Cmax = 0.8
     22md.friction = frictionschoof()
     23md.friction.m    = 1.0 / 3.0 * np.ones((md.mesh.numberofelements, 1))
     24md.friction.Cmax = Cmax * np.ones((md.mesh.numberofvertices, 1))
     25md.friction.C = 200 * np.ones((md.mesh.numberofvertices, 1))
     26
     27# Control parameters
     28md.inversion.iscontrol = 1
     29md.inversion.control_parameters = ['FrictionC']
     30md.inversion.min_parameters = 1. * np.ones((md.mesh.numberofvertices, 1))
     31md.inversion.max_parameters = 10000. * np.ones((md.mesh.numberofvertices, 1))
     32md.inversion.nsteps = 2
     33md.inversion.cost_functions = [102, 501]
     34md.inversion.cost_functions_coefficients = np.ones((md.mesh.numberofvertices, 2))
     35md.inversion.cost_functions_coefficients[:, 1] = 2e-7
     36md.inversion.gradient_scaling = 3. * np.ones((md.inversion.nsteps, 1))
     37md.inversion.maxiter_per_step = 2 * np.ones((md.inversion.nsteps, 1))
     38md.inversion.step_threshold = 0.3 * np.ones((md.inversion.nsteps, 1))
     39md.inversion.vx_obs = md.initialization.vx
     40md.inversion.vy_obs= md.initialization.vy
     41
     42md.cluster = generic('name', oshostname(), 'np', 3)
     43md = solve(md, 'Stressbalance')
     44
     45#Fields and tolerances to track changes
     46field_names = ['Gradient', 'Misfits', 'FrictionC', 'Pressure', 'Vel', 'Vx', 'Vy']
     47field_tolerances = [1e-12, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13]
     48field_values = [
     49    md.results.StressbalanceSolution.Gradient1,
     50    md.results.StressbalanceSolution.J,
     51    md.results.StressbalanceSolution.FrictionC,
     52    md.results.StressbalanceSolution.Pressure,
     53    md.results.StressbalanceSolution.Vel,
     54    md.results.StressbalanceSolution.Vx,
     55    md.results.StressbalanceSolution.Vy
     56]
  • ../trunk-jpl/test/NightlyRun/test481.py

     
     1#Test Name: TransientFrictionSchoof
     2import numpy as np
     3
     4from frictionschoof import frictionschoof
     5from MatlabFuncs import oshostname
     6from model import *
     7from parameterize import parameterize
     8from setflowequation import setflowequation
     9from setmask import setmask
     10from solve import solve
     11from transient import transient
     12from triangle import triangle
     13
     14md = triangle(model(), '../Exp/Square.exp', 150000.)
     15md = setmask(md, '../Exp/SquareShelf.exp', '')
     16md = parameterize(md, '../Par/SquareSheetShelf.py')
     17md.extrude(4, 1)
     18md = setflowequation(md, 'HO', 'all')
     19md.transient.isthermal = 0
     20md.friction = frictionschoof(md.friction)
     21md.friction.C    = pow(20.e4, 0.5) * np.ones((md.mesh.numberofvertices, 1))
     22md.friction.Cmax = 0.5 * np.ones((md.mesh.numberofvertices, 1))
     23md.friction.m    = 1./3.* np.ones((md.mesh.numberofelements, 1))
     24md.cluster = generic('name', oshostname(), 'np', 3)
     25md = solve(md, 'Transient')
     26
     27#Fields and tolerances to track changes
     28field_names = [
     29    'Vx1', 'Vy1', 'Vel1', 'Pressure1', 'Bed1', 'Surface1', 'Thickness1',
     30    'Vx2', 'Vy2', 'Vel2', 'Pressure2', 'Bed2', 'Surface2', 'Thickness2',
     31    'Vx3', 'Vy3', 'Vel3', 'Pressure3', 'Bed3', 'Surface3', 'Thickness3'
     32]
     33field_tolerances = [
     34    2e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09,
     35    1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09,
     36    2e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09
     37]
     38field_values = [
     39    md.results.TransientSolution[0].Vx,
     40    md.results.TransientSolution[0].Vy,
     41    md.results.TransientSolution[0].Vel,
     42    md.results.TransientSolution[0].Pressure,
     43    md.results.TransientSolution[0].Base,
     44    md.results.TransientSolution[0].Surface,
     45    md.results.TransientSolution[0].Thickness,
     46    md.results.TransientSolution[1].Vx,
     47    md.results.TransientSolution[1].Vy,
     48    md.results.TransientSolution[1].Vel,
     49    md.results.TransientSolution[1].Pressure,
     50    md.results.TransientSolution[1].Base,
     51    md.results.TransientSolution[1].Surface,
     52    md.results.TransientSolution[1].Thickness,
     53    md.results.TransientSolution[2].Vx,
     54    md.results.TransientSolution[2].Vy,
     55    md.results.TransientSolution[2].Vel,
     56    md.results.TransientSolution[2].Pressure,
     57    md.results.TransientSolution[2].Base,
     58    md.results.TransientSolution[2].Surface,
     59    md.results.TransientSolution[2].Thickness
     60]
  • ../trunk-jpl/test/NightlyRun/test350.py

     
    11#Test Name: SquareSheetHydrologyShakti
    2 from operator import itemgetter
    32import numpy as np
     3
     4from frictionshakti import frictionshakti
     5from MatlabFuncs import oshostname
    46from model import *
    5 from socket import gethostname
    6 from triangle import triangle
    7 from setmask import setmask
     7from operator import itemgetter
    88from parameterize import parameterize
    99from setflowequation import setflowequation
     10from setmask import setmask
    1011from solve import solve
    11 from frictionshakti import frictionshakti
    1212from transient import transient
     13from triangle import triangle
    1314
    1415md = triangle(model(), '../Exp/Square.exp', 50000.)
    1516md.mesh.x = md.mesh.x / 1000
  • ../trunk-jpl/test/NightlyRun/runme.m

     
    106106% }}}
    107107%Process Ids according to benchmarks{{{
    108108if strcmpi(benchmark,'nightly'),
    109         test_ids=intersect(test_ids,[1:999]);
     109        test_ids=intersect(test_ids,union([1:999]));
    110110elseif strcmpi(benchmark,'validation'),
    111111        test_ids=intersect(test_ids,[1001:1999]);
    112112elseif strcmpi(benchmark,'ismip'),
  • ../trunk-jpl/test/NightlyRun/test444.py

     
    66#
    77
    88import numpy as np
     9
     10from ContourToMesh import *
     11from dmeth_params_set import *
     12from MatlabFuncs import oshostname
    913from model import *
    10 from triangle import *
    11 from setmask import *
    1214from parameterize import *
     15from partitioner import *
     16from regionaloutput import *
    1317from setflowequation import *
     18from setmask import *
    1419from solve import *
    15 from partitioner import *
    16 from dmeth_params_set import *
    17 from ContourToMesh import *
    18 from regionaloutput import *
     20from triangle import *
    1921
    2022#model not consistent:  equality thickness = surface-base violated
    2123
Note: See TracBrowser for help on using the repository browser.