Changeset 21697
- Timestamp:
- 05/02/17 16:29:43 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/materials.m
r21696 r21697 65 65 function self = setdefaultparameters(self) % {{{ 66 66 67 for i=1:length(self.nature), 68 nat=self.nature{i}; 69 switch nat 70 case 'ice' 71 %ice density (kg/m^3) 72 self.rho_ice=917.; 73 74 %ocean water density (kg/m^3) 75 self.rho_water=1023.; 76 77 %fresh water density (kg/m^3) 78 self.rho_freshwater=1000.; 79 80 %water viscosity (N.s/m^2) 81 self.mu_water=0.001787; 82 83 %ice heat capacity cp (J/kg/K) 84 self.heatcapacity=2093.; 85 86 %ice latent heat of fusion L (J/kg) 87 self.latentheat=3.34*10^5; 88 89 %ice thermal conductivity (W/m/K) 90 self.thermalconductivity=2.4; 91 92 %wet ice thermal conductivity (W/m/K) 93 self.temperateiceconductivity=.24; 94 95 %the melting point of ice at 1 atmosphere of pressure in K 96 self.meltingpoint=273.15; 97 98 %rate of change of melting point with pressure (K/Pa) 99 self.beta=9.8*10^-8; 100 101 %mixed layer (ice-water interface) heat capacity (J/kg/K) 102 self.mixed_layer_capacity=3974.; 103 104 %thermal exchange velocity (ice-water interface) (m/s) 105 self.thermal_exchange_velocity=1.00*10^-4; 106 107 %Rheology law: what is the temperature dependence of B with T 108 %available: none, paterson and arrhenius 109 self.rheology_law='Paterson'; 110 111 case 'litho' 112 %we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 113 self.numlayers=2; 114 115 %surface, then the lab (lithosphere/asthenosphere boundary) then the center of the earth 116 %(with 1d3 to avoid numerical singularities) 117 self.radius=[6378*1e3;6278*1e3;1e3]; 118 119 self.viscosity=[1e40;1e21]; %lithosphere and mantle viscosity (respectively) [Pa.s] 120 self.lame_mu=[6.7*10^10;1.45*1e11]; % (Pa) %lithosphere and mantle shear modulus (respectively) [Pa] 121 self.lame_lambda=[6.7*10^10;1.45*1e11]; % (Pa) %lithosphere and mantle lamba parameter (respectively) [Pa] 122 self.burgers_viscosity=[NaN;NaN]; 123 self.burgers_mu=[NaN;NaN]; 124 self.isburgers=[false;false]; 125 self.density=[3.32*1e3,3.34*1e3]; % (Pa) %lithosphere and mantle density [kg/m^3] 126 self.issolid=[true,true]; % is layer solid or liquid. 127 128 otherwise 129 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')'); 130 end 131 end 132 67 for i=1:length(self.nature), 68 nat=self.nature{i}; 69 switch nat 70 case 'ice' 71 %ice density (kg/m^3) 72 self.rho_ice=917.; 73 74 %ocean water density (kg/m^3) 75 self.rho_water=1023.; 76 77 %fresh water density (kg/m^3) 78 self.rho_freshwater=1000.; 79 80 %water viscosity (N.s/m^2) 81 self.mu_water=0.001787; 82 83 %ice heat capacity cp (J/kg/K) 84 self.heatcapacity=2093.; 85 86 %ice latent heat of fusion L (J/kg) 87 self.latentheat=3.34*10^5; 88 89 %ice thermal conductivity (W/m/K) 90 self.thermalconductivity=2.4; 91 92 %wet ice thermal conductivity (W/m/K) 93 self.temperateiceconductivity=.24; 94 95 %the melting point of ice at 1 atmosphere of pressure in K 96 self.meltingpoint=273.15; 97 98 %rate of change of melting point with pressure (K/Pa) 99 self.beta=9.8*10^-8; 100 101 %mixed layer (ice-water interface) heat capacity (J/kg/K) 102 self.mixed_layer_capacity=3974.; 103 104 %thermal exchange velocity (ice-water interface) (m/s) 105 self.thermal_exchange_velocity=1.00*10^-4; 106 107 %Rheology law: what is the temperature dependence of B with T 108 %available: none, paterson and arrhenius 109 self.rheology_law='Paterson'; 110 111 case 'litho' 112 %we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 113 self.numlayers=2; 114 115 %surface, then the lab (lithosphere/asthenosphere boundary) then the center of the earth 116 %(with 1d3 to avoid numerical singularities) 117 self.radius=[6378*1e3;6278*1e3;1e3]; 118 119 self.viscosity=[1e40;1e21]; %lithosphere and mantle viscosity (respectively) [Pa.s] 120 self.lame_mu=[6.7*10^10;1.45*1e11]; % (Pa) %lithosphere and mantle shear modulus (respectively) [Pa] 121 self.lame_lambda=[6.7*10^10;1.45*1e11]; % (Pa) %lithosphere and mantle lamba parameter (respectively) [Pa] 122 self.burgers_viscosity=[NaN;NaN]; 123 self.burgers_mu=[NaN;NaN]; 124 self.isburgers=[false;false]; 125 self.density=[3.32*1e3;3.34*1e3]; % (Pa) %lithosphere and mantle density [kg/m^3] 126 self.issolid=[true;true]; % is layer solid or liquid. 127 128 otherwise 129 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')'); 130 end 131 end 133 132 end % }}} 134 133 function disp(self) % {{{ … … 173 172 end % }}} 174 173 function md = checkconsistency(self,md,solution,analyses) % {{{ 175 md = checkfield(md,'fieldname','materials.rho_ice','>',0); 176 md = checkfield(md,'fieldname','materials.rho_water','>',0); 177 md = checkfield(md,'fieldname','materials.rho_freshwater','>',0); 178 md = checkfield(md,'fieldname','materials.mu_water','>',0); 179 md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1); 180 md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]); 181 md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'}); 182 183 if ismember('GiaAnalysis',analyses), 184 md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1); 185 md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1); 186 md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1); 187 md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1); 188 end 189 if ismember('SealevelriseAnalysis',analyses), 190 md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1); 191 end 192 174 175 for i=1:length(self.nature), 176 nat=self.nature{i}; 177 switch nat 178 case 'ice' 179 md = checkfield(md,'fieldname','materials.rho_ice','>',0); 180 md = checkfield(md,'fieldname','materials.rho_water','>',0); 181 md = checkfield(md,'fieldname','materials.rho_freshwater','>',0); 182 md = checkfield(md,'fieldname','materials.mu_water','>',0); 183 md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1); 184 md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]); 185 md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'}); 186 case 'litho' 187 if ~ismember('LoveAnalysis',analyses), return; end 188 md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',1); 189 md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1 1],'>',0); 190 md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); 191 md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); 192 md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0,'<',2); 193 md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); 194 md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); 195 md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0,'<',2); 196 md = checkfield(md,'fieldname','materials.burgers_viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); 197 md = checkfield(md,'fieldname','materials.burgers_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); 198 199 otherwise 200 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')'); 201 end 202 end 203 204 end % }}} 205 function intnat = naturetointeger(strnat) % {{{ 206 intnat=zeros(length(strnat),1); 207 for i=1:length(strnat), 208 switch strnat{i}, 209 case 'damageice' 210 intnat(i)=1; 211 case 'estar' 212 intnat(i)=2; 213 case 'ice' 214 intnat(i)=3; 215 case 'enhancedice' 216 intnat(i)=4; 217 case 'litho' 218 intnat(i)=5; 219 otherwise 220 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')'); 221 end 222 end 193 223 end % }}} 194 224 function marshall(self,prefix,md,fid) % {{{ 195 WriteData(fid,prefix,'name','md.materials.type','data',3,'format','Integer'); 196 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double'); 197 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double'); 198 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); 199 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double'); 200 WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); 201 WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double'); 202 WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); 203 WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); 204 WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); 205 WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double'); 206 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); 207 WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); 208 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 209 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2); 210 WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String'); 211 212 WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double'); 213 WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3); 214 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double'); 215 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3); 216 WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double'); 225 226 %1: MatdamageiceEnum 2: MatestarEnum 3: MaticeEnum 4: MatenhancediceEnum 5: MaterialsEnum 227 WriteData(fid,prefix,'name','md.materials.type','data',6,'format','Integer'); 228 WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',1); 229 230 for i=1:length(self.nature), 231 nat=self.nature{i}; 232 switch nat 233 case 'ice' 234 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double'); 235 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double'); 236 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); 237 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double'); 238 WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); 239 WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double'); 240 WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); 241 WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); 242 WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); 243 WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double'); 244 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); 245 WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); 246 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 247 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2); 248 WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String'); 249 case 'litho' 250 WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Double'); 251 WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',1); 252 WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',1); 253 WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda ','format','DoubleMat','mattype',1); 254 WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','BooleanMat','mattype',1); 255 WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',1); 256 WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',1); 257 WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','BooleanMat','mattype',1); 258 WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',1); 259 WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',1); 260 otherwise 261 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')'); 262 end 263 end 217 264 end % }}} 218 265 function self = extrude(self,md) % {{{ 219 self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node'); 220 self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element'); 266 for i=1:length(self.nature), 267 nat=self.nature{i}; 268 switch nat 269 case 'ice' 270 self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node'); 271 self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element'); 272 end 273 end 221 274 end % }}} 222 275 function savemodeljs(self,fid,modelname) % {{{ 223 224 writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice); 225 writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water); 226 writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater); 227 writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water); 228 writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity); 229 writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat); 230 writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity); 231 writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity); 232 writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint); 233 writejsdouble(fid,[modelname '.materials.beta'],self.beta); 234 writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); 235 writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity); 236 writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); 237 writejs1Darray(fid,[modelname '.materials.rheology_B'],self.rheology_B); 238 writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n); 239 writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law); 240 writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus); 241 writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density); 242 writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus); 243 writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density); 244 writejsdouble(fid,[modelname '.materials.earth_density'],self.earth_density); 276 277 for i=1:length(self.nature), 278 nat=self.nature{i}; 279 switch nat 280 case 'ice' 281 writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice); 282 writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water); 283 writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater); 284 writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water); 285 writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity); 286 writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat); 287 writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity); 288 writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity); 289 writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint); 290 writejsdouble(fid,[modelname '.materials.beta'],self.beta); 291 writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); 292 writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity); 293 writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); 294 writejs1Darray(fid,[modelname '.materials.rheology_B'],self.rheology_B); 295 writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n); 296 writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law); 297 case 'litho' 298 writejsdouble(fid,[modelname '.materials.numlayers'],self.numlayers); 299 writejsdouble(fid,[modelname '.materials.radius'],self.radius); 300 writejsdouble(fid,[modelname '.materials.lame_mu'],self.lame_mu); 301 writejsdouble(fid,[modelname '.materials.lame_lambda'],self.lame_lambda); 302 writejsdouble(fid,[modelname '.materials.issolid'],self.issolid); 303 writejsdouble(fid,[modelname '.materials.density'],self.density); 304 writejsdouble(fid,[modelname '.materials.viscosity'],self.viscosity); 305 writejsdouble(fid,[modelname '.materials.isburgers'],self.isburgers); 306 writejsdouble(fid,[modelname '.materials.burgers_viscosity'],self.burgers_viscosity); 307 writejsdouble(fid,[modelname '.materials.burgers_mu'],self.burgers_mu); 308 otherwise 309 error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')'); 310 end 311 end 312 313 245 314 246 315 end % }}}
Note:
See TracChangeset
for help on using the changeset viewer.