source: issm/trunk-jpl/src/m/classes/matenhancedice.py@ 26059

Last change on this file since 26059 was 26059, checked in by jdquinn, 4 years ago

CHG: MATLAB -> Python API translations for recent SE changes; clean up

File size: 8.7 KB
Line 
1from checkfield import checkfield
2from fielddisplay import fielddisplay
3from project3d import project3d
4from WriteData import WriteData
5
6
7class matenhancedice(object):
8 """MATICE class definition
9
10 Usage:
11 matenhancedice = matenhancedice()
12 """
13
14 def __init__(self): #{{{
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 = ''
32
33 #SLC
34 self.earth_density = 0 # average density of the Earth, (kg/m^3)
35
36 self.setdefaultparameters()
37 #}}}
38
39 def __repr__(self): #{{{
40 # TODO:
41 # - Convert all formatting to calls to <string>.format (see any
42 # already converted <class>.__repr__ method for examples)
43 #
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
65 #}}}
66
67 def extrude(self, md): #{{{
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 #}}}
73
74 def setdefaultparameters(self): #{{{
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)
96 self.beta = 9.8 * 10**-8
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)
100 self.thermal_exchange_velocity = 1.00 * 10**-4
101 #Rheology law: what is the temperature dependence of B with T
102 #available: none, paterson and arrhenius
103 self.rheology_law = 'Paterson'
104
105 #GIA
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)
110
111 #SLC
112 self.earth_density = 5512 #average density of the Earth, (kg / m^3)
113
114 return self
115 #}}}
116
117 def checkconsistency(self, md, solution, analyses): #{{{
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])
127
128 if 'SealevelriseAnalysis' in analyses:
129 md = checkfield(md, 'fieldname', 'materials.earth_density', '>', 0, 'numel', 1)
130 return md
131 # }}}
132
133 def marshall(self, prefix, md, fid): #{{{
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 # }}}
Note: See TracBrowser for help on using the repository browser.