source:
issm/oecreview/Archive/24684-25833/ISSM-24755-24756.diff
Last change on this file was 25834, checked in by , 4 years ago | |
---|---|
File size: 29.1 KB |
-
../trunk-jpl/src/m/classes/materials.py
4 4 from checkfield import checkfield 5 5 from WriteData import WriteData 6 6 7 8 def naturetointeger(strnat): #{{{9 10 intnat = np.zeros(len(strnat))11 for i in range(len(intnat)):12 if strnat[i] == 'damageice':13 intnat[i] = 114 elif strnat[i] == 'estar':15 intnat[i] = 216 elif strnat[i] == 'ice':17 intnat[i] = 318 elif strnat[i] == 'enhancedice':19 intnat[i] = 420 elif strnat[i] == 'litho':21 intnat[i] = 622 elif strnat[i] == 'hydro':23 intnat[i] = 724 else:25 raise RuntimeError("materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')")26 27 return intnat28 # }}}29 30 31 7 class materials(object): 32 8 """ 33 9 MATERIALS class definition … … 44 20 self.nature = args 45 21 46 22 for i in range(len(self.nature)): 47 if not(self.nature[i] == 'litho' or self.nature[i] == 'ice' ):48 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho' )")23 if not(self.nature[i] == 'litho' or self.nature[i] == 'ice' or self.nature[i] == 'hydro'): 24 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 49 25 50 26 #start filling in the dynamic fields: 51 27 for i in range(len(self.nature)): … … 52 28 nat = self.nature[i] 53 29 if nat == 'ice': 54 30 setattr(self, 'rho_ice', 0) 55 setattr(self, 'rho_ice', 0)56 31 setattr(self, 'rho_water', 0) 57 32 setattr(self, 'rho_freshwater', 0) 58 33 setattr(self, 'mu_water', 0) … … 78 53 setattr(self, 'isburgers', 0) 79 54 setattr(self, 'density', 0) 80 55 setattr(self, 'issolid', 0) 56 elif nat == 'hydro': 57 setattr(self, 'rho_ice', 0) 58 setattr(self, 'rho_water', 0) 59 setattr(self, 'earth_density', 0) 81 60 else: 82 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho')") 83 #set default parameters: 61 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 62 63 #set default parameters: 84 64 self.setdefaultparameters() 85 65 #}}} 86 66 87 def __repr__(self): # {{{88 string = " Materials:"89 for i in range(len(self.nature)):90 nat = self.nature[i]91 if nat == 'ice':92 string = "%s\n%s" % (string, 'Ice:')93 string = "%s\n%s" % (string, fielddisplay(self, "rho_ice", "ice density [kg / m^3]"))94 string = "%s\n%s" % (string, fielddisplay(self, "rho_water", "water density [kg / m^3]"))95 string = "%s\n%s" % (string, fielddisplay(self, "rho_freshwater", "fresh water density [kg / m^3]"))96 string = "%s\n%s" % (string, fielddisplay(self, "mu_water", "water viscosity [N s / m^2]"))97 string = "%s\n%s" % (string, fielddisplay(self, "heatcapacity", "heat capacity [J / kg / K]"))98 string = "%s\n%s" % (string, fielddisplay(self, "thermalconductivity", "ice thermal conductivity [W / m / K]"))99 string = "%s\n%s" % (string, fielddisplay(self, "temperateiceconductivity", "temperate ice thermal conductivity [W / m / K]"))100 string = "%s\n%s" % (string, fielddisplay(self, "meltingpoint", "melting point of ice at 1atm in K"))101 string = "%s\n%s" % (string, fielddisplay(self, "latentheat", "latent heat of fusion [J / m^3]"))102 string = "%s\n%s" % (string, fielddisplay(self, "beta", "rate of change of melting point with pressure [K / Pa]"))103 string = "%s\n%s" % (string, fielddisplay(self, "mixed_layer_capacity", "mixed layer capacity [W / kg / K]"))104 string = "%s\n%s" % (string, fielddisplay(self, "thermal_exchange_velocity", "thermal exchange velocity [m / s]"))105 string = "%s\n%s" % (string, fielddisplay(self, "rheology_B", "flow law parameter [Pa s^(1 / n)]"))106 string = "%s\n%s" % (string, fielddisplay(self, "rheology_n", "Glen's flow law exponent"))107 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'"))108 elif nat == 'litho':109 string = "%s\n%s" % (string, 'Litho:')110 string = "%s\n%s" % (string, fielddisplay(self, 'numlayers', 'number of layers (default 2)'))111 string = "%s\n%s" % (string, fielddisplay(self, 'radius', 'array describing the radius for each interface (numlayers + 1) [m]'))112 string = "%s\n%s" % (string, fielddisplay(self, 'viscosity', 'array describing each layer''s viscosity (numlayers) [Pa.s]'))113 string = "%s\n%s" % (string, fielddisplay(self, 'lame_lambda', 'array describing the lame lambda parameter (numlayers) [Pa]'))114 string = "%s\n%s" % (string, fielddisplay(self, 'lame_mu', 'array describing the shear modulus for each layers (numlayers) [Pa]'))115 string = "%s\n%s" % (string, fielddisplay(self, 'burgers_viscosity', 'array describing each layer''s transient viscosity, only for Burgers rheologies (numlayers) [Pa.s]'))116 string = "%s\n%s" % (string, fielddisplay(self, 'burgers_mu', 'array describing each layer''s transient shear modulus, only for Burgers rheologies (numlayers) [Pa]'))117 string = "%s\n%s" % (string, fielddisplay(self, 'isburgers', 'array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)'))118 string = "%s\n%s" % (string, fielddisplay(self, 'density', 'array describing each layer''s density (numlayers) [kg / m^3]'))119 string = "%s\n%s" % (string, fielddisplay(self, 'issolid', 'array describing whether the layer is solid or liquid (default 1) (numlayers)'))120 121 else:122 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho')")123 124 return string125 #}}}126 127 def extrude(self, md): # {{{128 for i in range(len(self.nature)):129 nat = self.nature[i]130 if nat == 'ice':131 self.rheology_B = project3d(md, 'vector', self.rheology_B, 'type', 'node')132 self.rheology_n = project3d(md, 'vector', self.rheology_n, 'type', 'element')133 return self134 #}}}135 136 67 def setdefaultparameters(self): # {{{ 137 68 for i in range(len(self.nature)): 138 69 nat = self.nature[i] … … 164 95 #Rheology law: what is the temperature dependence of B with T 165 96 #available: none, paterson and arrhenius 166 97 self.rheology_law = 'Paterson' 167 168 98 elif nat == 'litho': 169 99 #we default to a configuration that enables running GIA solutions using giacaron and / or giaivins. 170 100 self.numlayers = 2 … … 179 109 self.isburgers = [0, 0] 180 110 self.density = [5.51 * 1e3, 5.50 * 1e3] # (Pa) #mantle and lithosphere density [kg / m^3] 181 111 self.issolid = [1, 1] # is layer solid or liquid. 182 112 elif nat == 'hydro': 113 #ice density (kg / m^3) 114 self.rho_ice = 917. 115 #ocean water density (kg / m^3) 116 self.rho_water = 1023. 117 #average density of the Earth (kg / m^3) 118 self.earth_density = 5512 183 119 else: 184 raise RuntimeError("materials setdefaultparameters error message: nature of the material not supported yet! ('ice' or 'litho' )")120 raise RuntimeError("materials setdefaultparameters error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 185 121 186 122 return self 187 123 #}}} 188 124 125 def __repr__(self): # {{{ 126 string = " Materials:" 127 for i in range(len(self.nature)): 128 nat = self.nature[i] 129 if nat == 'ice': 130 string = "%s\n%s" % (string, 'Ice:') 131 string = "%s\n%s" % (string, fielddisplay(self, "rho_ice", "ice density [kg / m^3]")) 132 string = "%s\n%s" % (string, fielddisplay(self, "rho_water", "ocean water density [kg / m^3]")) 133 string = "%s\n%s" % (string, fielddisplay(self, "rho_freshwater", "fresh water density [kg / m^3]")) 134 string = "%s\n%s" % (string, fielddisplay(self, "mu_water", "water viscosity [N s / m^2]")) 135 string = "%s\n%s" % (string, fielddisplay(self, "heatcapacity", "heat capacity [J / kg / K]")) 136 string = "%s\n%s" % (string, fielddisplay(self, "thermalconductivity", "ice thermal conductivity [W / m / K]")) 137 string = "%s\n%s" % (string, fielddisplay(self, "temperateiceconductivity", "temperate ice thermal conductivity [W / m / K]")) 138 string = "%s\n%s" % (string, fielddisplay(self, "meltingpoint", "melting point of ice at 1atm in K")) 139 string = "%s\n%s" % (string, fielddisplay(self, "latentheat", "latent heat of fusion [J / m^3]")) 140 string = "%s\n%s" % (string, fielddisplay(self, "beta", "rate of change of melting point with pressure [K / Pa]")) 141 string = "%s\n%s" % (string, fielddisplay(self, "mixed_layer_capacity", "mixed layer capacity [W / kg / K]")) 142 string = "%s\n%s" % (string, fielddisplay(self, "thermal_exchange_velocity", "thermal exchange velocity [m / s]")) 143 string = "%s\n%s" % (string, fielddisplay(self, "rheology_B", "flow law parameter [Pa s^(1 / n)]")) 144 string = "%s\n%s" % (string, fielddisplay(self, "rheology_n", "Glen's flow law exponent")) 145 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'")) 146 elif nat == 'litho': 147 string = "%s\n%s" % (string, 'Litho:') 148 string = "%s\n%s" % (string, fielddisplay(self, 'numlayers', 'number of layers (default 2)')) 149 string = "%s\n%s" % (string, fielddisplay(self, 'radius', 'array describing the radius for each interface (numlayers + 1) [m]')) 150 string = "%s\n%s" % (string, fielddisplay(self, 'viscosity', 'array describing each layer''s viscosity (numlayers) [Pa.s]')) 151 string = "%s\n%s" % (string, fielddisplay(self, 'lame_lambda', 'array describing the lame lambda parameter (numlayers) [Pa]')) 152 string = "%s\n%s" % (string, fielddisplay(self, 'lame_mu', 'array describing the shear modulus for each layers (numlayers) [Pa]')) 153 string = "%s\n%s" % (string, fielddisplay(self, 'burgers_viscosity', 'array describing each layer''s transient viscosity, only for Burgers rheologies (numlayers) [Pa.s]')) 154 string = "%s\n%s" % (string, fielddisplay(self, 'burgers_mu', 'array describing each layer''s transient shear modulus, only for Burgers rheologies (numlayers) [Pa]')) 155 string = "%s\n%s" % (string, fielddisplay(self, 'isburgers', 'array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)')) 156 string = "%s\n%s" % (string, fielddisplay(self, 'density', 'array describing each layer''s density (numlayers) [kg / m^3]')) 157 string = "%s\n%s" % (string, fielddisplay(self, 'issolid', 'array describing whether the layer is solid or liquid (default 1) (numlayers)')) 158 elif nat == 'hydro': 159 string = "%s\n%s" % (string, 'Hydro:') 160 string = "%s\n%s" % (string, fielddisplay(self, "rho_ice", "ice density [kg / m^3]")) 161 string = "%s\n%s" % (string, fielddisplay(self, "rho_water", "ocean water density [kg / m^3]")) 162 string = "%s\n%s" % (string, fielddisplay(self, "earth_density", "mantle density [kg / m^3]")) 163 else: 164 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 165 166 return string 167 #}}} 168 189 169 def checkconsistency(self, md, solution, analyses): # {{{ 190 170 for i in range(len(self.nature)): 191 171 nat = self.nature[i] … … 197 177 md = checkfield(md, 'fieldname', 'materials.rheology_B', '>', 0, 'timeseries', 1, 'NaN', 1, 'Inf', 1) 198 178 md = checkfield(md, 'fieldname', 'materials.rheology_n', '>', 0, 'size', [md.mesh.numberofelements]) 199 179 md = checkfield(md, 'fieldname', 'materials.rheology_law', 'values', ['None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius', 'LliboutryDuval', 'NyeCO2', 'NyeH2O']) 200 201 180 elif nat == 'litho': 202 181 if 'LoveAnalysis' not in analyses: 203 182 return md … … 223 202 for i in range(md.materials.numlayers - 1): 224 203 if (not md.materials.issolid[i]) and (not md.materials.issolid[i + 1]): #if there are at least two consecutive indices that contain issolid = 0 225 204 raise RuntimeError("%s%i%s" % ('2 or more adjacent fluid layers detected starting at layer ', i, '. This is not supported yet. Consider merging them.')) 226 205 elif nat == 'hydro': 206 md = checkfield(md, 'fieldname', 'materials.rho_ice', '>', 0) 207 md = checkfield(md, 'fieldname', 'materials.rho_water', '>', 0) 208 md = checkfield(md, 'fieldname', 'materials.earth_density', '>', 0, 'numel', [1]) 227 209 else: 228 raise RuntimeError("materials checkconsistency error message: nature of the material not supported yet! ('ice' or 'litho' )")210 raise RuntimeError("materials checkconsistency error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 229 211 230 212 return md 231 213 # }}} … … 232 214 233 215 def marshall(self, prefix, md, fid): # {{{ 234 216 #1: MatdamageiceEnum 2: MatestarEnum 3: MaticeEnum 4: MatenhancediceEnum 5: MaterialsEnum 235 WriteData(fid, prefix, 'name', 'md.materials.type', 'data', 6, 'format', 'Integer')236 217 WriteData(fid, prefix, 'name', 'md.materials.nature', 'data', naturetointeger(self.nature), 'format', 'IntMat', 'mattype', 3) 218 WriteData(fid, prefix, 'name', 'md.materials.type', 'data', 5, 'format', 'Integer') #DANGER, this can evolve if you have classes 237 219 238 220 for i in range(len(self.nature)): 239 221 nat = self.nature[i] … … 254 236 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_B', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) 255 237 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rheology_n', 'format', 'DoubleMat', 'mattype', 2) 256 238 WriteData(fid, prefix, 'data', self.rheology_law, 'name', 'md.materials.rheology_law', 'format', 'String') 257 258 239 elif nat == 'litho': 259 240 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'numlayers', 'format', 'Integer') 260 241 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'radius', 'format', 'DoubleMat', 'mattype', 3) … … 266 247 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'isburgers', 'format', 'DoubleMat', 'mattype', 3) 267 248 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'burgers_viscosity', 'format', 'DoubleMat', 'mattype', 3) 268 249 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'burgers_mu', 'format', 'DoubleMat', 'mattype', 3) 269 250 elif nat == 'hydro': 251 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_ice', 'format', 'Double') 252 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'rho_water', 'format', 'Double') 253 WriteData(fid, prefix, 'object', self, 'class', 'materials', 'fieldname', 'earth_density', 'format', 'Double') 270 254 else: 271 raise RuntimeError("materials constructor error message: nature of the material not supported yet! (' 'ice'' or ''litho'')")255 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 272 256 # }}} 257 258 def extrude(self, md): # {{{ 259 for i in range(len(self.nature)): 260 nat = self.nature[i] 261 if nat == 'ice': 262 self.rheology_B = project3d(md, 'vector', self.rheology_B, 'type', 'node') 263 self.rheology_n = project3d(md, 'vector', self.rheology_n, 'type', 'element') 264 return self 265 #}}} 266 267 def naturetointeger(strnat): #{{{ 268 intnat = np.zeros(len(strnat)) 269 270 for i in range(len(intnat)): 271 if strnat[i] == 'damageice': 272 intnat[i] = 1 273 elif strnat[i] == 'estar': 274 intnat[i] = 2 275 elif strnat[i] == 'ice': 276 intnat[i] = 3 277 elif strnat[i] == 'enhancedice': 278 intnat[i] = 4 279 # elif strnat[i] == 'materials': 280 # intnat[i] = 5 #this case will never happen, kept to ensure equivalent of codes between IoCodeToMeterialsEnum and IoCodeToNatureEnum 281 elif strnat[i] == 'litho': 282 intnat[i] = 6 283 elif strnat[i] == 'hydro': 284 intnat[i] = 7 285 else: 286 raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho' or 'hydro')") 287 288 return intnat 289 # }}} -
../trunk-jpl/src/m/classes/materials.m
4 4 % materials=materials(); 5 5 6 6 classdef materials < dynamicprops 7 properties (SetAccess=public) 7 properties (SetAccess=public) 8 8 nature={}; 9 9 %all properties are dynamic. 10 10 end … … 12 12 function self = materials(varargin) % {{{ 13 13 if nargin==0 14 14 self.nature={'ice'}; 15 else 15 else 16 16 self.nature=varargin; 17 17 end 18 19 %check this is acceptable: 18 19 %check this is acceptable: 20 20 for i=1:length(self.nature), 21 if ~(strcmpi(self.nature{i},'litho') | strcmpi(self.nature{i},'ice') | strcmpi(self.nature{i},'hydro')), 21 if ~(strcmpi(self.nature{i},'litho') | strcmpi(self.nature{i},'ice') | strcmpi(self.nature{i},'hydro')), 22 22 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')'); 23 23 end 24 24 end 25 26 %start filling in the dynamic fields: 25 26 %start filling in the dynamic fields: 27 27 for i=1:length(self.nature), 28 nat=self.nature{i}; 28 nat=self.nature{i}; 29 29 switch nat 30 30 case 'ice' 31 31 self.addprop('rho_ice'); … … 36 36 self.addprop('latentheat'); 37 37 self.addprop('thermalconductivity'); 38 38 self.addprop('temperateiceconductivity'); 39 39 self.addprop('meltingpoint'); 40 40 self.addprop('beta'); 41 41 self.addprop('mixed_layer_capacity'); 42 42 self.addprop('thermal_exchange_velocity'); … … 45 45 self.addprop('rheology_law'); 46 46 case 'litho' 47 47 self.addprop('numlayers'); 48 48 self.addprop('radius'); 49 49 self.addprop('viscosity'); 50 50 self.addprop('lame_lambda'); 51 51 self.addprop('lame_mu'); … … 69 69 function self = setdefaultparameters(self) % {{{ 70 70 71 71 for i=1:length(self.nature), 72 nat=self.nature{i}; 72 nat=self.nature{i}; 73 73 switch nat 74 74 case 'ice' 75 75 %ice density (kg/m^3) … … 82 82 self.rho_freshwater=1000.; 83 83 84 84 %water viscosity (N.s/m^2) 85 self.mu_water=0.001787; 85 self.mu_water=0.001787; 86 86 87 87 %ice heat capacity cp (J/kg/K) 88 88 self.heatcapacity=2093.; … … 92 92 93 93 %ice thermal conductivity (W/m/K) 94 94 self.thermalconductivity=2.4; 95 95 96 96 %wet ice thermal conductivity (W/m/K) 97 97 self.temperateiceconductivity=.24; 98 98 … … 113 113 self.rheology_law='Paterson'; 114 114 115 115 case 'litho' 116 %we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 116 %we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 117 117 self.numlayers=2; 118 118 119 119 %center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface 120 %(with 1d3 to avoid numerical singularities) 120 %(with 1d3 to avoid numerical singularities) 121 121 self.radius=[1e3;6278*1e3;6378*1e3]; 122 122 123 123 self.viscosity=[1e21;1e40]; %mantle and lithosphere viscosity (respectively) [Pa.s] … … 135 135 136 136 %ocean water density (kg/m^3) 137 137 self.rho_water=1023.; 138 % SLR139 self.earth_density= 5512; % average density of the Earth, (kg/m^3)138 % average density of the Earth (kg/m^3) 139 self.earth_density=5512; 140 140 141 141 otherwise 142 142 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')'); … … 147 147 disp(sprintf(' Materials:')); 148 148 149 149 for i=1:length(self.nature), 150 nat=self.nature{i}; 150 nat=self.nature{i}; 151 151 switch nat 152 152 case 'ice' 153 153 disp(sprintf(' \nIce:')); … … 182 182 disp(sprintf(' \nHydro:')); 183 183 fielddisplay(self,'rho_ice','ice density [kg/m^3]'); 184 184 fielddisplay(self,'rho_water','ocean water density [kg/m^3]'); 185 fielddisplay(self,'earth_density',' Mantle density [kg/m^-3]');185 fielddisplay(self,'earth_density','mantle density [kg/m^3]'); 186 186 187 187 otherwise 188 188 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')'); … … 192 192 function md = checkconsistency(self,md,solution,analyses) % {{{ 193 193 194 194 for i=1:length(self.nature), 195 nat=self.nature{i}; 195 nat=self.nature{i}; 196 196 switch nat 197 197 case 'ice' 198 198 md = checkfield(md,'fieldname','materials.rho_ice','>',0); … … 216 216 md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers 1],'>=',0); 217 217 218 218 for i=1:md.materials.numlayers, 219 if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 219 if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 220 220 error('materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice'); 221 221 end 222 222 end 223 if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 223 if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 224 224 error('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.'); 225 225 end 226 226 ind=find(md.materials.issolid==0); … … 241 241 end % }}} 242 242 function marshall(self,prefix,md,fid) % {{{ 243 243 244 %1: MatdamageiceEnum 2: MatestarEnum 3: MaticeEnum 4: MatenhancediceEnum 5: MaterialsEnum 244 %1: MatdamageiceEnum 2: MatestarEnum 3: MaticeEnum 4: MatenhancediceEnum 5: MaterialsEnum 245 245 WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',3); 246 WriteData(fid,prefix,'name','md.materials.type','data',5,'format','Integer'); %DANGER, this can evolve if you have classes. 246 WriteData(fid,prefix,'name','md.materials.type','data',5,'format','Integer'); %DANGER, this can evolve if you have classes. 247 247 248 248 for i=1:length(self.nature), 249 nat=self.nature{i}; 249 nat=self.nature{i}; 250 250 switch nat 251 251 case 'ice' 252 252 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double'); … … 270 270 WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3); 271 271 WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3); 272 272 WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3); 273 WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); 274 WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); 275 WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); 276 WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); 277 WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); 273 WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); 274 WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); 275 WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); 276 WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); 277 WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); 278 278 case 'hydro' 279 279 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double'); 280 280 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double'); … … 287 287 end % }}} 288 288 function self = extrude(self,md) % {{{ 289 289 for i=1:length(self.nature), 290 nat=self.nature{i}; 290 nat=self.nature{i}; 291 291 switch nat 292 292 case 'ice' 293 293 self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node'); … … 296 296 end 297 297 end % }}} 298 298 function savemodeljs(self,fid,modelname) % {{{ 299 299 300 300 for i=1:length(self.nature), 301 nat=self.nature{i}; 301 nat=self.nature{i}; 302 302 switch nat 303 303 case 'ice' 304 304 writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice); … … 323 323 writejsdouble(fid,[modelname '.materials.lame_mu'],self.lame_mu); 324 324 writejsdouble(fid,[modelname '.materials.lame_lambda'],self.lame_lambda); 325 325 writejsdouble(fid,[modelname '.materials.issolid'],self.issolid); 326 writejsdouble(fid,[modelname '.materials.density'],self.density); 327 writejsdouble(fid,[modelname '.materials.viscosity'],self.viscosity); 328 writejsdouble(fid,[modelname '.materials.isburgers'],self.isburgers); 329 writejsdouble(fid,[modelname '.materials.burgers_viscosity'],self.burgers_viscosity); 330 writejsdouble(fid,[modelname '.materials.burgers_mu'],self.burgers_mu); 326 writejsdouble(fid,[modelname '.materials.density'],self.density); 327 writejsdouble(fid,[modelname '.materials.viscosity'],self.viscosity); 328 writejsdouble(fid,[modelname '.materials.isburgers'],self.isburgers); 329 writejsdouble(fid,[modelname '.materials.burgers_viscosity'],self.burgers_viscosity); 330 writejsdouble(fid,[modelname '.materials.burgers_mu'],self.burgers_mu); 331 331 332 332 case 'hydro' 333 333 writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice); … … 344 344 end % }}} 345 345 end 346 346 end 347 function intnat = naturetointeger(strnat) % {{{ 348 intnat=zeros(length(strnat),1); 349 for i=1:length(strnat), 350 switch strnat{i}, 351 case 'damageice' 352 intnat(i)=1; 353 case 'estar' 354 intnat(i)=2; 355 case 'ice' 356 intnat(i)=3; 357 case 'enhancedice' 358 intnat(i)=4; 359 %case 'materials' %this case will never happen, kept to ensure equivalent of codes between IoCodeToMaterialsEnumm and IoCodeToNatureEnum 360 % intnat(i)=5; 361 case 'litho' 362 intnat(i)=6; 363 case 'hydro' 364 intnat(i)=7; 365 otherwise 366 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')'); 367 end 368 end 369 end % }}} 347 348 function intnat = naturetointeger(strnat) % {{{ 349 intnat=zeros(length(strnat),1); 350 for i=1:length(strnat), 351 switch strnat{i}, 352 case 'damageice' 353 intnat(i)=1; 354 case 'estar' 355 intnat(i)=2; 356 case 'ice' 357 intnat(i)=3; 358 case 'enhancedice' 359 intnat(i)=4; 360 %case 'materials' %this case will never happen, kept to ensure equivalent of codes between IoCodeToMaterialsEnum and IoCodeToNatureEnum 361 % intnat(i)=5; 362 case 'litho' 363 intnat(i)=6; 364 case 'hydro' 365 intnat(i)=7; 366 otherwise 367 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')'); 368 end 369 end 370 end % }}}
Note:
See TracBrowser
for help on using the repository browser.