Changeset 25836 for issm/trunk/src/m/classes/matice.py
- Timestamp:
- 12/08/20 08:45:53 (4 years ago)
- Location:
- issm/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/m/classes/matice.py
r24313 r25836 1 import numpy as np 2 1 3 from fielddisplay import fielddisplay 2 4 from project3d import project3d … … 6 8 7 9 class matice(object): 8 """10 ''' 9 11 MATICE class definition 10 12 11 12 matice = matice()13 """13 Usage: 14 matice = matice() 15 ''' 14 16 15 def __init__(self): #{{{17 def __init__(self): #{{{ 16 18 self.rho_ice = 0. 17 19 self.rho_water = 0. … … 27 29 self.mixed_layer_capacity = 0. 28 30 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 31 33 self.rheology_law = '' 32 34 33 #giaivins :35 #giaivins 34 36 self.lithosphere_shear_modulus = 0. 35 37 self.lithosphere_density = 0. … … 37 39 self.mantle_density = 0. 38 40 39 # SLR40 self.earth_density = 551241 #slr 42 self.earth_density = 0 41 43 self.setdefaultparameters() 42 44 #}}} 43 45 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]")) 46 69 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 69 71 #}}} 70 72 71 def extrude(self, md): #{{{73 def extrude(self, md): #{{{ 72 74 self.rheology_B = project3d(md, 'vector', self.rheology_B, 'type', 'node') 73 75 self.rheology_n = project3d(md, 'vector', self.rheology_n, 'type', 'element') … … 75 77 #}}} 76 78 77 def setdefaultparameters(self): #{{{78 #ice density (kg /m^3)79 def setdefaultparameters(self): #{{{ 80 #ice density (kg/m^3) 79 81 self.rho_ice = 917. 80 #ocean water density (kg /m^3)82 #ocean water density (kg/m^3) 81 83 self.rho_water = 1023. 82 #fresh water density (kg /m^3)84 #fresh water density (kg/m^3) 83 85 self.rho_freshwater = 1000. 84 #water viscosity (N.s /m^2)86 #water viscosity (N.s/m^2) 85 87 self.mu_water = 0.001787 86 #ice heat capacity cp (J / kg /K)88 #ice heat capacity cp (J/kg/K) 87 89 self.heatcapacity = 2093. 88 #ice latent heat of fusion L (J /kg)89 self.latentheat = 3.34 * 1.0e590 #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) 91 93 self.thermalconductivity = 2.4 94 #temperate ice thermal conductivity (W/m/K) 95 self.temperateiceconductivity = 0.24 92 96 #computation of effective conductivity 93 97 self.effectiveconductivity_averaging = 1 94 #temperate ice thermal conductivity (W / m / K)95 self.temperateiceconductivity = 0.2496 98 #the melting point of ice at 1 atmosphere of pressure in K 97 99 self.meltingpoint = 273.15 98 #rate of change of melting point with pressure (K /Pa)99 self.beta = 9.8 * 1.0e-8100 #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) 101 103 self.mixed_layer_capacity = 3974. 102 #thermal exchange velocity (ice-water interface) (m /s)103 self.thermal_exchange_velocity = 1.00 * 1.0e-4104 #thermal exchange velocity (ice-water interface) (m/s) 105 self.thermal_exchange_velocity = 1.00e-4 104 106 #Rheology law: what is the temperature dependence of B with T 105 107 #available: none, paterson and arrhenius … … 107 109 108 110 # 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) 113 115 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) 117 118 #}}} 118 119 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 133 140 return md 134 # 141 #}}} 135 142 136 def marshall(self, prefix, md, fid): #{{{143 def marshall(self, prefix, md, fid): #{{{ 137 144 WriteData(fid, prefix, 'name', 'md.materials.type', 'data', 3, 'format', 'Integer') 138 145 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_ice', 'format', 'Double') … … 152 159 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_n', 'format', 'DoubleMat', 'mattype', 2) 153 160 WriteData(fid, prefix, 'data', self.rheology_law, 'name', 'md.materials.rheology_law', 'format', 'String') 154 155 161 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'lithosphere_shear_modulus', 'format', 'Double') 156 162 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'lithosphere_density', 'format', 'Double', 'scale', 10.**3.) … … 158 164 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'mantle_density', 'format', 'Double', 'scale', 10.**3.) 159 165 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.