[21337] | 1 | Index: ../trunk-jpl/src/m/classes/matbafl.m
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/m/classes/matbafl.m (revision 0)
|
---|
| 4 | +++ ../trunk-jpl/src/m/classes/matbafl.m (revision 20643)
|
---|
| 5 | @@ -0,0 +1,209 @@
|
---|
| 6 | +%MATICE class definition
|
---|
| 7 | +%
|
---|
| 8 | +% Usage:
|
---|
| 9 | +% matbafl=matbafl();
|
---|
| 10 | +
|
---|
| 11 | +classdef matbafl
|
---|
| 12 | + properties (SetAccess=public)
|
---|
| 13 | + rho_ice = 0.;
|
---|
| 14 | + rho_water = 0.;
|
---|
| 15 | + rho_freshwater = 0.;
|
---|
| 16 | + mu_water = 0.;
|
---|
| 17 | + heatcapacity = 0.;
|
---|
| 18 | + latentheat = 0.;
|
---|
| 19 | + thermalconductivity = 0.;
|
---|
| 20 | + temperateiceconductivity = 0.;
|
---|
| 21 | + meltingpoint = 0.;
|
---|
| 22 | + beta = 0.;
|
---|
| 23 | + mixed_layer_capacity = 0.;
|
---|
| 24 | + thermal_exchange_velocity = 0.;
|
---|
| 25 | + rheology_ko = NaN;
|
---|
| 26 | + rheology_Ec = NaN;
|
---|
| 27 | + rheology_Es = NaN;
|
---|
| 28 | + rheology_law = '';
|
---|
| 29 | +
|
---|
| 30 | + %gia:
|
---|
| 31 | + lithosphere_shear_modulus = 0.;
|
---|
| 32 | + lithosphere_density = 0.;
|
---|
| 33 | + mantle_shear_modulus = 0.;
|
---|
| 34 | + mantle_density = 0.;
|
---|
| 35 | +
|
---|
| 36 | + %slr
|
---|
| 37 | + earth_density = 0;
|
---|
| 38 | +
|
---|
| 39 | + end
|
---|
| 40 | + methods
|
---|
| 41 | + function self = extrude(self,md) % {{{
|
---|
| 42 | + self.rheology_ko=project3d(md,'vector',self.rheology_ko,'type','node');
|
---|
| 43 | + self.rheology_Ec=project3d(md,'vector',self.rheology_Ec,'type','node');
|
---|
| 44 | + self.rheology_Es=project3d(md,'vector',self.rheology_Es,'type','node');
|
---|
| 45 | + end % }}}
|
---|
| 46 | + function self = matbafl(varargin) % {{{
|
---|
| 47 | + switch nargin
|
---|
| 48 | + case 0
|
---|
| 49 | + self=setdefaultparameters(self);
|
---|
| 50 | + case 1
|
---|
| 51 | + inputstruct=varargin{1};
|
---|
| 52 | + list1 = properties('matbafl');
|
---|
| 53 | + list2 = fieldnames(inputstruct);
|
---|
| 54 | + for i=1:length(list1)
|
---|
| 55 | + fieldname = list1{i};
|
---|
| 56 | + if ismember(fieldname,list2),
|
---|
| 57 | + self.(fieldname) = inputstruct.(fieldname);
|
---|
| 58 | + end
|
---|
| 59 | + end
|
---|
| 60 | + otherwise
|
---|
| 61 | + error('constructor not supported');
|
---|
| 62 | + end
|
---|
| 63 | + end % }}}
|
---|
| 64 | + function self = setdefaultparameters(self) % {{{
|
---|
| 65 | +
|
---|
| 66 | + %ice density (kg/m^3)
|
---|
| 67 | + self.rho_ice=917.;
|
---|
| 68 | +
|
---|
| 69 | + %ocean water density (kg/m^3)
|
---|
| 70 | + self.rho_water=1023.;
|
---|
| 71 | +
|
---|
| 72 | + %fresh water density (kg/m^3)
|
---|
| 73 | + self.rho_freshwater=1000.;
|
---|
| 74 | +
|
---|
| 75 | + %water viscosity (N.s/m^2)
|
---|
| 76 | + self.mu_water=0.001787;
|
---|
| 77 | +
|
---|
| 78 | + %ice heat capacity cp (J/kg/K)
|
---|
| 79 | + self.heatcapacity=2093.;
|
---|
| 80 | +
|
---|
| 81 | + %ice latent heat of fusion L (J/kg)
|
---|
| 82 | + self.latentheat=3.34*10^5;
|
---|
| 83 | +
|
---|
| 84 | + %ice thermal conductivity (W/m/K)
|
---|
| 85 | + self.thermalconductivity=2.4;
|
---|
| 86 | +
|
---|
| 87 | + %wet ice thermal conductivity (W/m/K)
|
---|
| 88 | + self.temperateiceconductivity=.24;
|
---|
| 89 | +
|
---|
| 90 | + %the melting point of ice at 1 atmosphere of pressure in K
|
---|
| 91 | + self.meltingpoint=273.15;
|
---|
| 92 | +
|
---|
| 93 | + %rate of change of melting point with pressure (K/Pa)
|
---|
| 94 | + self.beta=9.8*10^-8;
|
---|
| 95 | +
|
---|
| 96 | + %mixed layer (ice-water interface) heat capacity (J/kg/K)
|
---|
| 97 | + self.mixed_layer_capacity=3974.;
|
---|
| 98 | +
|
---|
| 99 | + %thermal exchange velocity (ice-water interface) (m/s)
|
---|
| 100 | + self.thermal_exchange_velocity=1.00*10^-4;
|
---|
| 101 | +
|
---|
| 102 | + %Rheology law: what is the temperature dependence of B with T
|
---|
| 103 | + %available: none, paterson and arrhenius
|
---|
| 104 | + self.rheology_law='Paterson';
|
---|
| 105 | +
|
---|
| 106 | + % GIA:
|
---|
| 107 | + self.lithosphere_shear_modulus = 6.7*10^10; % (Pa)
|
---|
| 108 | + self.lithosphere_density = 3.32; % (g/cm^-3)
|
---|
| 109 | + self.mantle_shear_modulus = 1.45*10^11; % (Pa)
|
---|
| 110 | + self.mantle_density = 3.34; % (g/cm^-3)
|
---|
| 111 | +
|
---|
| 112 | + %SLR
|
---|
| 113 | + self.earth_density= 5512; % average density of the Earth, (kg/m^3)
|
---|
| 114 | +
|
---|
| 115 | + end % }}}
|
---|
| 116 | + function md = checkconsistency(self,md,solution,analyses) % {{{
|
---|
| 117 | + md = checkfield(md,'fieldname','materials.rho_ice','>',0);
|
---|
| 118 | + md = checkfield(md,'fieldname','materials.rho_water','>',0);
|
---|
| 119 | + md = checkfield(md,'fieldname','materials.rho_freshwater','>',0);
|
---|
| 120 | + md = checkfield(md,'fieldname','materials.mu_water','>',0);
|
---|
| 121 | + md = checkfield(md,'fieldname','materials.rheology_ko','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
|
---|
| 122 | + md = checkfield(md,'fieldname','materials.rheology_Ec','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
|
---|
| 123 | + md = checkfield(md,'fieldname','materials.rheology_Es','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
|
---|
| 124 | + md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
|
---|
| 125 | +
|
---|
| 126 | + if ismember(GiaAnalysisEnum(),analyses),
|
---|
| 127 | + md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
|
---|
| 128 | + md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
|
---|
| 129 | + md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
|
---|
| 130 | + md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
|
---|
| 131 | + end
|
---|
| 132 | + if ismember(SealevelriseAnalysisEnum(),analyses),
|
---|
| 133 | + md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
|
---|
| 134 | + end
|
---|
| 135 | +
|
---|
| 136 | + end % }}}
|
---|
| 137 | + function disp(self) % {{{
|
---|
| 138 | + disp(sprintf(' Materials:'));
|
---|
| 139 | +
|
---|
| 140 | + fielddisplay(self,'rho_ice','ice density [kg/m^3]');
|
---|
| 141 | + fielddisplay(self,'rho_water','ocean water density [kg/m^3]');
|
---|
| 142 | + fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]');
|
---|
| 143 | + fielddisplay(self,'mu_water','water viscosity [N s/m^2]');
|
---|
| 144 | + fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]');
|
---|
| 145 | + fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']);
|
---|
| 146 | + fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');
|
---|
| 147 | + fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K');
|
---|
| 148 | + fielddisplay(self,'latentheat','latent heat of fusion [J/kg]');
|
---|
| 149 | + fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]');
|
---|
| 150 | + fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
|
---|
| 151 | + fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
|
---|
| 152 | + fielddisplay(self,'rheology_ko','octahedral flow law parameter [s^-1 Pa^-2]');
|
---|
| 153 | + fielddisplay(self,'rheology_Ec','compressive enhancement factor');
|
---|
| 154 | + fielddisplay(self,'rheology_Es','shear enhancement factor');
|
---|
| 155 | + fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
|
---|
| 156 | + fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
|
---|
| 157 | + fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]');
|
---|
| 158 | + fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]');
|
---|
| 159 | + fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]');
|
---|
| 160 | + fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
|
---|
| 161 | + end % }}}
|
---|
| 162 | + function marshall(self,md,fid) % {{{
|
---|
| 163 | + WriteData(fid,'enum',MaterialsEnum(),'data',MaticeEnum(),'format','Integer');
|
---|
| 164 | + WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double');
|
---|
| 165 | + WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');
|
---|
| 166 | + WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
|
---|
| 167 | + WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double');
|
---|
| 168 | + WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
|
---|
| 169 | + WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double');
|
---|
| 170 | + WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
|
---|
| 171 | + WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
|
---|
| 172 | + WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
|
---|
| 173 | + WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double');
|
---|
| 174 | + WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
|
---|
| 175 | + WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
|
---|
| 176 | + WriteData(fid,'object',self,'class','materials','fieldname','rheology_ko','format','DoubleMat','mattype',1);
|
---|
| 177 | + WriteData(fid,'object',self,'class','materials','fieldname','rheology_Ec','format','DoubleMat','mattype',1);
|
---|
| 178 | + WriteData(fid,'object',self,'class','materials','fieldname','rheology_Es','format','DoubleMat','mattype',1);
|
---|
| 179 | + WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
|
---|
| 180 | +
|
---|
| 181 | + WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
|
---|
| 182 | + WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
|
---|
| 183 | + WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
|
---|
| 184 | + WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
|
---|
| 185 | + WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double');
|
---|
| 186 | + end % }}}
|
---|
| 187 | + function savemodeljs(self,fid,modelname) % {{{
|
---|
| 188 | +
|
---|
| 189 | + writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice);
|
---|
| 190 | + writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water);
|
---|
| 191 | + writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater);
|
---|
| 192 | + writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water);
|
---|
| 193 | + writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity);
|
---|
| 194 | + writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat);
|
---|
| 195 | + writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity);
|
---|
| 196 | + writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity);
|
---|
| 197 | + writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint);
|
---|
| 198 | + writejsdouble(fid,[modelname '.materials.beta'],self.beta);
|
---|
| 199 | + writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
|
---|
| 200 | + writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity);
|
---|
| 201 | + writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
|
---|
| 202 | + writejs1Darray(fid,[modelname '.materials.rheology_ko'],self.rheology_ko);
|
---|
| 203 | + writejs1Darray(fid,[modelname '.materials.rheology_Ec'],self.rheology_Ec);
|
---|
| 204 | + writejs1Darray(fid,[modelname '.materials.rheology_Es'],self.rheology_Es);
|
---|
| 205 | + writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
|
---|
| 206 | + writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus);
|
---|
| 207 | + writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density);
|
---|
| 208 | + writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus);
|
---|
| 209 | + writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density);
|
---|
| 210 | + writejsdouble(fid,[modelname '.materials.earth_density'],self.earth_density);
|
---|
| 211 | +
|
---|
| 212 | + end % }}}
|
---|
| 213 | + end
|
---|
| 214 | +end
|
---|