[26059] | 1 | from checkfield import checkfield
|
---|
[22267] | 2 | from fielddisplay import fielddisplay
|
---|
| 3 | from project3d import project3d
|
---|
| 4 | from WriteData import WriteData
|
---|
| 5 |
|
---|
[24213] | 6 |
|
---|
[22267] | 7 | class matenhancedice(object):
|
---|
[26059] | 8 | """MATICE class definition
|
---|
[22267] | 9 |
|
---|
[26059] | 10 | Usage:
|
---|
| 11 | matenhancedice = matenhancedice()
|
---|
[24213] | 12 | """
|
---|
[22267] | 13 |
|
---|
[25171] | 14 | def __init__(self): #{{{
|
---|
[24213] | 15 | self.rho_ice = 0.
|
---|
| 16 | self.rho_water = 0.
|
---|
| 17 | self.rho_freshwater = 0.
|
---|
| 18 | self.mu_water = 0.
|
---|
| 19 | self.heatcapacity = 0.
|
---|
| 20 | self.latentheat = 0.
|
---|
| 21 | self.thermalconductivity = 0.
|
---|
| 22 | self.temperateiceconductivity = 0.
|
---|
| 23 | self.effectiveconductivity_averaging = 0
|
---|
| 24 | self.meltingpoint = 0.
|
---|
| 25 | self.beta = 0.
|
---|
| 26 | self.mixed_layer_capacity = 0.
|
---|
| 27 | self.thermal_exchange_velocity = 0.
|
---|
| 28 | self.rheology_E = float('NaN')
|
---|
| 29 | self.rheology_B = float('NaN')
|
---|
| 30 | self.rheology_n = float('NaN')
|
---|
| 31 | self.rheology_law = ''
|
---|
[22267] | 32 |
|
---|
[26059] | 33 | #SLC
|
---|
| 34 | self.earth_density = 0 # average density of the Earth, (kg/m^3)
|
---|
[23716] | 35 |
|
---|
[24213] | 36 | self.setdefaultparameters()
|
---|
| 37 | #}}}
|
---|
[22267] | 38 |
|
---|
[25171] | 39 | def __repr__(self): #{{{
|
---|
[26059] | 40 | # TODO:
|
---|
| 41 | # - Convert all formatting to calls to <string>.format (see any
|
---|
| 42 | # already converted <class>.__repr__ method for examples)
|
---|
| 43 | #
|
---|
[25171] | 44 | s = " Materials:"
|
---|
| 45 | s = "%s\n%s" % (s, fielddisplay(self, "rho_ice", "ice density [kg/m^3]"))
|
---|
| 46 | s = "%s\n%s" % (s, fielddisplay(self, "rho_water", "water density [kg/m^3]"))
|
---|
| 47 | s = "%s\n%s" % (s, fielddisplay(self, "rho_freshwater", "fresh water density [kg/m^3]"))
|
---|
| 48 | s = "%s\n%s" % (s, fielddisplay(self, "mu_water", "water viscosity [N s/m^2]"))
|
---|
| 49 | s = "%s\n%s" % (s, fielddisplay(self, "heatcapacity", "heat capacity [J/kg/K]"))
|
---|
| 50 | s = "%s\n%s" % (s, fielddisplay(self, "thermalconductivity", "ice thermal conductivity [W/m/K]"))
|
---|
| 51 | s = "%s\n%s" % (s, fielddisplay(self, "temperateiceconductivity", "temperate ice thermal conductivity [W/m/K]"))
|
---|
| 52 | s = "%s\n%s" % (s, fielddisplay(self, "effectiveconductivity_averaging", "computation of effectiveconductivity: (0) arithmetic mean, (1) harmonic mean, (2) geometric mean (default)"))
|
---|
| 53 | s = "%s\n%s" % (s, fielddisplay(self, "meltingpoint", "melting point of ice at 1atm in K"))
|
---|
| 54 | s = "%s\n%s" % (s, fielddisplay(self, "latentheat", "latent heat of fusion [J/m^3]"))
|
---|
| 55 | s = "%s\n%s" % (s, fielddisplay(self, "beta", "rate of change of melting point with pressure [K/Pa]"))
|
---|
| 56 | s = "%s\n%s" % (s, fielddisplay(self, "mixed_layer_capacity", "mixed layer capacity [W/kg/K]"))
|
---|
| 57 | s = "%s\n%s" % (s, fielddisplay(self, "thermal_exchange_velocity", "thermal exchange velocity [m/s]"))
|
---|
| 58 | s = "%s\n%s" % (s, fielddisplay(self, "rheology_E", "enhancement factor"))
|
---|
| 59 | s = "%s\n%s" % (s, fielddisplay(self, "rheology_B", "flow law parameter [Pa s^(1/n)]"))
|
---|
| 60 | s = "%s\n%s" % (s, fielddisplay(self, "rheology_n", "Glen's flow law exponent"))
|
---|
| 61 | s = "%s\n%s" % (s, fielddisplay(self, "rheology_law", "law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius' or 'LliboutryDuval'"))
|
---|
| 62 | s = "%s\n%s" % (s, fielddisplay(self, "earth_density", "Mantle density [kg/m^-3]"))
|
---|
| 63 |
|
---|
| 64 | return s
|
---|
[24213] | 65 | #}}}
|
---|
[23716] | 66 |
|
---|
[25171] | 67 | def extrude(self, md): #{{{
|
---|
[24213] | 68 | self.rheology_E = project3d(md, 'vector', self.rheology_E, 'type', 'node')
|
---|
| 69 | self.rheology_B = project3d(md, 'vector', self.rheology_B, 'type', 'node')
|
---|
| 70 | self.rheology_n = project3d(md, 'vector', self.rheology_n, 'type', 'element')
|
---|
| 71 | return self
|
---|
| 72 | #}}}
|
---|
[23716] | 73 |
|
---|
[25171] | 74 | def setdefaultparameters(self): #{{{
|
---|
[24213] | 75 | #ice density (kg / m^3)
|
---|
| 76 | self.rho_ice = 917.
|
---|
| 77 | #ocean water density (kg / m^3)
|
---|
| 78 | self.rho_water = 1023.
|
---|
| 79 | #fresh water density (kg / m^3)
|
---|
| 80 | self.rho_freshwater = 1000.
|
---|
| 81 | #water viscosity (N.s / m^2)
|
---|
| 82 | self.mu_water = 0.001787
|
---|
| 83 | #ice heat capacity cp (J / kg / K)
|
---|
| 84 | self.heatcapacity = 2093.
|
---|
| 85 | #ice latent heat of fusion L (J / kg)
|
---|
| 86 | self.latentheat = 3.34 * 10**5
|
---|
| 87 | #ice thermal conductivity (W / m / K)
|
---|
| 88 | self.thermalconductivity = 2.4
|
---|
| 89 | #temperate ice thermal conductivity (W / m / K)
|
---|
| 90 | self.temperateiceconductivity = 0.24
|
---|
| 91 | #computation of effective conductivity
|
---|
| 92 | self.effectiveconductivity_averaging = 1
|
---|
| 93 | #the melting point of ice at 1 atmosphere of pressure in K
|
---|
| 94 | self.meltingpoint = 273.15
|
---|
| 95 | #rate of change of melting point with pressure (K / Pa)
|
---|
[24261] | 96 | self.beta = 9.8 * 10**-8
|
---|
[24213] | 97 | #mixed layer (ice-water interface) heat capacity (J / kg / K)
|
---|
| 98 | self.mixed_layer_capacity = 3974.
|
---|
| 99 | #thermal exchange velocity (ice-water interface) (m / s)
|
---|
[24261] | 100 | self.thermal_exchange_velocity = 1.00 * 10**-4
|
---|
[24213] | 101 | #Rheology law: what is the temperature dependence of B with T
|
---|
| 102 | #available: none, paterson and arrhenius
|
---|
| 103 | self.rheology_law = 'Paterson'
|
---|
[23716] | 104 |
|
---|
[26059] | 105 | #GIA
|
---|
[24213] | 106 | self.lithosphere_shear_modulus = 6.7 * 10**10 # (Pa)
|
---|
| 107 | self.lithosphere_density = 3.32 # (g / cm^ - 3)
|
---|
| 108 | self.mantle_shear_modulus = 1.45 * 10**11 # (Pa)
|
---|
| 109 | self.mantle_density = 3.34 # (g / cm^ - 3)
|
---|
[22267] | 110 |
|
---|
[26059] | 111 | #SLC
|
---|
[24213] | 112 | self.earth_density = 5512 #average density of the Earth, (kg / m^3)
|
---|
[23716] | 113 |
|
---|
[24213] | 114 | return self
|
---|
| 115 | #}}}
|
---|
[22267] | 116 |
|
---|
[25171] | 117 | def checkconsistency(self, md, solution, analyses): #{{{
|
---|
[24213] | 118 | md = checkfield(md, 'fieldname', 'materials.rho_ice', '>', 0)
|
---|
| 119 | md = checkfield(md, 'fieldname', 'materials.rho_water', '>', 0)
|
---|
| 120 | md = checkfield(md, 'fieldname', 'materials.rho_freshwater', '>', 0)
|
---|
| 121 | md = checkfield(md, 'fieldname', 'materials.mu_water', '>', 0)
|
---|
| 122 | md = checkfield(md, 'fieldname', 'materials.rheology_E', '>', 0, 'timeseries', 1, 'NaN', 1, 'Inf', 1)
|
---|
| 123 | md = checkfield(md, 'fieldname', 'materials.rheology_B', '>', 0, 'timeseries', 1, 'NaN', 1, 'Inf', 1)
|
---|
| 124 | md = checkfield(md, 'fieldname', 'materials.rheology_n', '>', 0, 'size', [md.mesh.numberofelements])
|
---|
| 125 | md = checkfield(md, 'fieldname', 'materials.rheology_law', 'values', ['None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius', 'LliboutryDuval'])
|
---|
| 126 | md = checkfield(md, 'fieldname', 'materials.effectiveconductivity_averaging', 'numel', [1], 'values', [0, 1, 2])
|
---|
[23716] | 127 |
|
---|
[26317] | 128 | if 'SealevelchangeAnalysis' in analyses:
|
---|
[24213] | 129 | md = checkfield(md, 'fieldname', 'materials.earth_density', '>', 0, 'numel', 1)
|
---|
| 130 | return md
|
---|
| 131 | # }}}
|
---|
[23716] | 132 |
|
---|
[25171] | 133 | def marshall(self, prefix, md, fid): #{{{
|
---|
[24213] | 134 | WriteData(fid, prefix, 'name', 'md.materials.type', 'data', 4, 'format', 'Integer')
|
---|
| 135 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_ice', 'format', 'Double')
|
---|
| 136 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_water', 'format', 'Double')
|
---|
| 137 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_freshwater', 'format', 'Double')
|
---|
| 138 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'mu_water', 'format', 'Double')
|
---|
| 139 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'heatcapacity', 'format', 'Double')
|
---|
| 140 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'latentheat', 'format', 'Double')
|
---|
| 141 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'thermalconductivity', 'format', 'Double')
|
---|
| 142 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'temperateiceconductivity', 'format', 'Double')
|
---|
| 143 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'effectiveconductivity_averaging', 'format', 'Integer')
|
---|
| 144 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'meltingpoint', 'format', 'Double')
|
---|
| 145 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'beta', 'format', 'Double')
|
---|
| 146 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'mixed_layer_capacity', 'format', 'Double')
|
---|
| 147 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'thermal_exchange_velocity', 'format', 'Double')
|
---|
| 148 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_E', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
|
---|
| 149 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_B', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
|
---|
| 150 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_n', 'format', 'DoubleMat', 'mattype', 2)
|
---|
| 151 | WriteData(fid, prefix, 'data', self.rheology_law, 'name', 'md.materials.rheology_law', 'format', 'String')
|
---|
| 152 | WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'earth_density', 'format', 'Double')
|
---|
| 153 | # }}}
|
---|