Ignore:
Timestamp:
12/08/20 08:45:53 (4 years ago)
Author:
Mathieu Morlighem
Message:

merged trunk-jpl and trunk for revision 25834

Location:
issm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk

  • issm/trunk/src

  • issm/trunk/src/m/classes/matice.py

    r24313 r25836  
     1import numpy as np
     2
    13from fielddisplay import fielddisplay
    24from project3d import project3d
     
    68
    79class matice(object):
    8     """
     10    '''
    911    MATICE class definition
    1012
    11        Usage:
    12           matice = matice()
    13     """
     13    Usage:
     14            matice = matice()
     15    '''
    1416
    15     def __init__(self):  # {{{
     17    def __init__(self): #{{{
    1618        self.rho_ice = 0.
    1719        self.rho_water = 0.
     
    2729        self.mixed_layer_capacity = 0.
    2830        self.thermal_exchange_velocity = 0.
    29         self.rheology_B = float('NaN')
    30         self.rheology_n = float('NaN')
     31        self.rheology_B = np.nan
     32        self.rheology_n = np.nan
    3133        self.rheology_law = ''
    3234
    33         #giaivins:
     35        #giaivins
    3436        self.lithosphere_shear_modulus = 0.
    3537        self.lithosphere_density = 0.
     
    3739        self.mantle_density = 0.
    3840
    39         #SLR
    40         self.earth_density = 5512
     41        #slr
     42        self.earth_density = 0
    4143        self.setdefaultparameters()
    4244    #}}}
    4345
    44     def __repr__(self):  # {{{
    45         string = "   Materials:"
     46    def __repr__(self): #{{{
     47        s = "   Materials:"
     48        s = "%s\n%s" % (s, fielddisplay(self, "rho_ice", "ice density [kg/m^3]"))
     49        s = "%s\n%s" % (s, fielddisplay(self, "rho_water", "water density [kg/m^3]"))
     50        s = "%s\n%s" % (s, fielddisplay(self, "rho_freshwater", "fresh water density [kg/m^3]"))
     51        s = "%s\n%s" % (s, fielddisplay(self, "mu_water", "water viscosity [Ns/m^2]"))
     52        s = "%s\n%s" % (s, fielddisplay(self, "heatcapacity", "heat capacity [J/kg/K]"))
     53        s = "%s\n%s" % (s, fielddisplay(self, "thermalconductivity", "ice thermal conductivity [W/m/K]"))
     54        s = "%s\n%s" % (s, fielddisplay(self, "temperateiceconductivity", "temperate ice thermal conductivity [W/m/K]"))
     55        s = "%s\n%s" % (s, fielddisplay(self, "effectiveconductivity_averaging", "computation of effectiveconductivity: (0) arithmetic mean, (1) harmonic mean, (2) geometric mean (default)"))
     56        s = "%s\n%s" % (s, fielddisplay(self, "meltingpoint", "melting point of ice at 1atm in K"))
     57        s = "%s\n%s" % (s, fielddisplay(self, "latentheat", "latent heat of fusion [J/m^3]"))
     58        s = "%s\n%s" % (s, fielddisplay(self, "beta", "rate of change of melting point with pressure [K/Pa]"))
     59        s = "%s\n%s" % (s, fielddisplay(self, "mixed_layer_capacity", "mixed layer capacity [W/kg/K]"))
     60        s = "%s\n%s" % (s, fielddisplay(self, "thermal_exchange_velocity", "thermal exchange velocity [m/s]"))
     61        s = "%s\n%s" % (s, fielddisplay(self, "rheology_B", "flow law parameter [Pa s^(1/n)]"))
     62        s = "%s\n%s" % (s, fielddisplay(self, "rheology_n", "Glen's flow law exponent"))
     63        s = "%s\n%s" % (s, fielddisplay(self, "rheology_law", "law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius', 'LliboutryDuval', 'NyeCO2', or 'NyeH2O'"))
     64        s = "%s\n%s" % (s, fielddisplay(self, "lithosphere_shear_modulus", "Lithosphere shear modulus [Pa]"))
     65        s = "%s\n%s" % (s, fielddisplay(self, "lithosphere_density", "Lithosphere density [g/cm^-3]"))
     66        s = "%s\n%s" % (s, fielddisplay(self, "mantle_shear_modulus", "Mantle shear modulus [Pa]"))
     67        s = "%s\n%s" % (s, fielddisplay(self, "mantle_density", "Mantle density [g/cm^-3]"))
     68        s = "%s\n%s" % (s, fielddisplay(self, "earth_density", "Mantle density [kg/m^-3]"))
    4669
    47         string = "%s\n%s" % (string, fielddisplay(self, "rho_ice", "ice density [kg / m^3]"))
    48         string = "%s\n%s" % (string, fielddisplay(self, "rho_water", "water density [kg / m^3]"))
    49         string = "%s\n%s" % (string, fielddisplay(self, "rho_freshwater", "fresh water density [kg / m^3]"))
    50         string = "%s\n%s" % (string, fielddisplay(self, "mu_water", "water viscosity [N s / m^2]"))
    51         string = "%s\n%s" % (string, fielddisplay(self, "heatcapacity", "heat capacity [J / kg / K]"))
    52         string = "%s\n%s" % (string, fielddisplay(self, "thermalconductivity", "ice thermal conductivity [W / m / K]"))
    53         string = "%s\n%s" % (string, fielddisplay(self, "temperateiceconductivity", "temperate ice thermal conductivity [W / m / K]"))
    54         string = "%s\n%s" % (string, fielddisplay(self, "effectiveconductivity_averaging", "computation of effectiveconductivity: (0) arithmetic mean, (1) harmonic mean, (2) geometric mean (default)"))
    55         string = "%s\n%s" % (string, fielddisplay(self, "meltingpoint", "melting point of ice at 1atm in K"))
    56         string = "%s\n%s" % (string, fielddisplay(self, "latentheat", "latent heat of fusion [J / m^3]"))
    57         string = "%s\n%s" % (string, fielddisplay(self, "beta", "rate of change of melting point with pressure [K / Pa]"))
    58         string = "%s\n%s" % (string, fielddisplay(self, "mixed_layer_capacity", "mixed layer capacity [W / kg / K]"))
    59         string = "%s\n%s" % (string, fielddisplay(self, "thermal_exchange_velocity", "thermal exchange velocity [m / s]"))
    60         string = "%s\n%s" % (string, fielddisplay(self, "rheology_B", "flow law parameter [Pa s^(1 / n)]"))
    61         string = "%s\n%s" % (string, fielddisplay(self, "rheology_n", "Glen's flow law exponent"))
    62         string = "%s\n%s" % (string, fielddisplay(self, "rheology_law", "law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius', 'LliboutryDuval', 'NyeCO2', or 'NyeH2O'"))
    63         string = "%s\n%s" % (string, fielddisplay(self, "lithosphere_shear_modulus", "Lithosphere shear modulus [Pa]"))
    64         string = "%s\n%s" % (string, fielddisplay(self, "lithosphere_density", "Lithosphere density [g / cm^ - 3]"))
    65         string = "%s\n%s" % (string, fielddisplay(self, "mantle_shear_modulus", "Mantle shear modulus [Pa]"))
    66         string = "%s\n%s" % (string, fielddisplay(self, "mantle_density", "Mantle density [g / cm^ - 3]"))
    67         string = "%s\n%s" % (string, fielddisplay(self, "earth_density", "Mantle density [kg / m^ - 3]"))
    68         return string
     70        return s
    6971    #}}}
    7072
    71     def extrude(self, md):  # {{{
     73    def extrude(self, md): #{{{
    7274        self.rheology_B = project3d(md, 'vector', self.rheology_B, 'type', 'node')
    7375        self.rheology_n = project3d(md, 'vector', self.rheology_n, 'type', 'element')
     
    7577    #}}}
    7678
    77     def setdefaultparameters(self):  # {{{
    78         #ice density (kg / m^3)
     79    def setdefaultparameters(self): #{{{
     80        #ice density (kg/m^3)
    7981        self.rho_ice = 917.
    80         #ocean water density (kg / m^3)
     82        #ocean water density (kg/m^3)
    8183        self.rho_water = 1023.
    82         #fresh water density (kg / m^3)
     84        #fresh water density (kg/m^3)
    8385        self.rho_freshwater = 1000.
    84         #water viscosity (N.s / m^2)
     86        #water viscosity (N.s/m^2)
    8587        self.mu_water = 0.001787
    86         #ice heat capacity cp (J / kg / K)
     88        #ice heat capacity cp (J/kg/K)
    8789        self.heatcapacity = 2093.
    88         #ice latent heat of fusion L (J / kg)
    89         self.latentheat = 3.34 * 1.0e5
    90         #ice thermal conductivity (W / m / K)
     90        #ice latent heat of fusion L (J/kg)
     91        self.latentheat = 3.34e5
     92        #ice thermal conductivity (W/m/K)
    9193        self.thermalconductivity = 2.4
     94        #temperate ice thermal conductivity (W/m/K)
     95        self.temperateiceconductivity = 0.24
    9296        #computation of effective conductivity
    9397        self.effectiveconductivity_averaging = 1
    94         #temperate ice thermal conductivity (W / m / K)
    95         self.temperateiceconductivity = 0.24
    9698        #the melting point of ice at 1 atmosphere of pressure in K
    9799        self.meltingpoint = 273.15
    98         #rate of change of melting point with pressure (K / Pa)
    99         self.beta = 9.8 * 1.0e-8
    100         #mixed layer (ice-water interface) heat capacity (J / kg / K)
     100        #rate of change of melting point with pressure (K/Pa)
     101        self.beta = 9.8e-8
     102        #mixed layer (ice-water interface) heat capacity (J/kg/K)
    101103        self.mixed_layer_capacity = 3974.
    102         #thermal exchange velocity (ice-water interface) (m / s)
    103         self.thermal_exchange_velocity = 1.00 * 1.0e-4
     104        #thermal exchange velocity (ice-water interface) (m/s)
     105        self.thermal_exchange_velocity = 1.00e-4
    104106        #Rheology law: what is the temperature dependence of B with T
    105107        #available: none, paterson and arrhenius
     
    107109
    108110        # GIA:
    109         self.lithosphere_shear_modulus = 6.7 * 1.0e10 # (Pa)
    110         self.lithosphere_density = 3.32  # (g / cm^ - 3)
    111         self.mantle_shear_modulus = 1.45 * 1.0e11  # (Pa)
    112         self.mantle_density = 3.34  # (g / cm^ - 3)
     111        self.lithosphere_shear_modulus = 6.7e10 # (Pa)
     112        self.lithosphere_density = 3.32  # (g/cm^-3)
     113        self.mantle_shear_modulus = 1.45e11  # (Pa)
     114        self.mantle_density = 3.34  # (g/cm^-3)
    113115
    114         #SLR
    115         self.earth_density = 5512  # average density of the Earth, (kg / m^3)
    116         return self
     116        # SLR
     117        self.earth_density = 5512  # average density of the Earth, (kg/m^3)
    117118    #}}}
    118119
    119     def checkconsistency(self, md, solution, analyses):  # {{{
    120         md = checkfield(md, 'fieldname', 'materials.rho_ice', '>', 0)
    121         md = checkfield(md, 'fieldname', 'materials.rho_water', '>', 0)
    122         md = checkfield(md, 'fieldname', 'materials.rho_freshwater', '>', 0)
    123         md = checkfield(md, 'fieldname', 'materials.mu_water', '>', 0)
    124         md = checkfield(md, 'fieldname', 'materials.rheology_B', '>', 0, 'timeseries', 1, 'NaN', 1, 'Inf', 1)
    125         md = checkfield(md, 'fieldname', 'materials.rheology_n', '>', 0, 'size', [md.mesh.numberofelements])
    126         md = checkfield(md, 'fieldname', 'materials.rheology_law', 'values', ['None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius', 'LliboutryDuval', 'NyeCO2', 'NyeH2O'])
    127         md = checkfield(md, 'fieldname', 'materials.effectiveconductivity_averaging', 'numel', [1], 'values', [0, 1, 2])
    128         md = checkfield(md, 'fieldname', 'materials.lithosphere_shear_modulus', '>', 0, 'numel', [1])
    129         md = checkfield(md, 'fieldname', 'materials.lithosphere_density', '>', 0, 'numel', [1])
    130         md = checkfield(md, 'fieldname', 'materials.mantle_shear_modulus', '>', 0, 'numel', [1])
    131         md = checkfield(md, 'fieldname', 'materials.mantle_density', '>', 0, 'numel', [1])
    132         md = checkfield(md, 'fieldname', 'materials.earth_density', '>', 0, 'numel', [1])
     120    def checkconsistency(self, md, solution, analyses): #{{{
     121        if solution != 'SealevelriseSolution':
     122            md = checkfield(md, 'fieldname', 'materials.rho_ice', '>', 0)
     123            md = checkfield(md, 'fieldname', 'materials.rho_water', '>', 0)
     124            md = checkfield(md, 'fieldname', 'materials.rho_freshwater', '>', 0)
     125            md = checkfield(md, 'fieldname', 'materials.mu_water', '>', 0)
     126            md = checkfield(md, 'fieldname', 'materials.rheology_B', '>', 0, 'universal', 1, 'NaN', 1, 'Inf', 1)
     127            md = checkfield(md, 'fieldname', 'materials.rheology_n', '>', 0, 'size', [md.mesh.numberofelements])
     128            md = checkfield(md, 'fieldname', 'materials.rheology_law', 'values', ['None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius', 'LliboutryDuval', 'NyeCO2', 'NyeH2O'])
     129            md = checkfield(md, 'fieldname', 'materials.effectiveconductivity_averaging', 'numel', [1], 'values', [0, 1, 2])
     130
     131        if 'GiaAnalysis' in analyses:
     132            md = checkfield(md, 'fieldname', 'materials.lithosphere_shear_modulus', '>', 0, 'numel', [1])
     133            md = checkfield(md, 'fieldname', 'materials.lithosphere_density', '>', 0, 'numel', [1])
     134            md = checkfield(md, 'fieldname', 'materials.mantle_shear_modulus', '>', 0, 'numel', [1])
     135            md = checkfield(md, 'fieldname', 'materials.mantle_density', '>', 0, 'numel', [1])
     136
     137        if 'SealevelriseAnalysis' in analyses:
     138            md = checkfield(md, 'fieldname', 'materials.earth_density', '>', 0, 'numel', [1])
     139
    133140        return md
    134     # }}}
     141    #}}}
    135142
    136     def marshall(self, prefix, md, fid):  # {{{
     143    def marshall(self, prefix, md, fid): #{{{
    137144        WriteData(fid, prefix, 'name', 'md.materials.type', 'data', 3, 'format', 'Integer')
    138145        WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_ice', 'format', 'Double')
     
    152159        WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_n', 'format', 'DoubleMat', 'mattype', 2)
    153160        WriteData(fid, prefix, 'data', self.rheology_law, 'name', 'md.materials.rheology_law', 'format', 'String')
    154 
    155161        WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'lithosphere_shear_modulus', 'format', 'Double')
    156162        WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'lithosphere_density', 'format', 'Double', 'scale', 10.**3.)
     
    158164        WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'mantle_density', 'format', 'Double', 'scale', 10.**3.)
    159165        WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'earth_density', 'format', 'Double')
    160 
    161     # }}}
     166    #}}}
Note: See TracChangeset for help on using the changeset viewer.