Index: ../trunk-jpl/src/m/classes/matbafl.m =================================================================== --- ../trunk-jpl/src/m/classes/matbafl.m (revision 0) +++ ../trunk-jpl/src/m/classes/matbafl.m (revision 20643) @@ -0,0 +1,209 @@ +%MATICE class definition +% +% Usage: +% matbafl=matbafl(); + +classdef matbafl + properties (SetAccess=public) + rho_ice = 0.; + rho_water = 0.; + rho_freshwater = 0.; + mu_water = 0.; + heatcapacity = 0.; + latentheat = 0.; + thermalconductivity = 0.; + temperateiceconductivity = 0.; + meltingpoint = 0.; + beta = 0.; + mixed_layer_capacity = 0.; + thermal_exchange_velocity = 0.; + rheology_ko = NaN; + rheology_Ec = NaN; + rheology_Es = NaN; + rheology_law = ''; + + %gia: + lithosphere_shear_modulus = 0.; + lithosphere_density = 0.; + mantle_shear_modulus = 0.; + mantle_density = 0.; + + %slr + earth_density = 0; + + end + methods + function self = extrude(self,md) % {{{ + self.rheology_ko=project3d(md,'vector',self.rheology_ko,'type','node'); + self.rheology_Ec=project3d(md,'vector',self.rheology_Ec,'type','node'); + self.rheology_Es=project3d(md,'vector',self.rheology_Es,'type','node'); + end % }}} + function self = matbafl(varargin) % {{{ + switch nargin + case 0 + self=setdefaultparameters(self); + case 1 + inputstruct=varargin{1}; + list1 = properties('matbafl'); + list2 = fieldnames(inputstruct); + for i=1:length(list1) + fieldname = list1{i}; + if ismember(fieldname,list2), + self.(fieldname) = inputstruct.(fieldname); + end + end + otherwise + error('constructor not supported'); + end + end % }}} + function self = setdefaultparameters(self) % {{{ + + %ice density (kg/m^3) + self.rho_ice=917.; + + %ocean water density (kg/m^3) + self.rho_water=1023.; + + %fresh water density (kg/m^3) + self.rho_freshwater=1000.; + + %water viscosity (N.s/m^2) + self.mu_water=0.001787; + + %ice heat capacity cp (J/kg/K) + self.heatcapacity=2093.; + + %ice latent heat of fusion L (J/kg) + self.latentheat=3.34*10^5; + + %ice thermal conductivity (W/m/K) + self.thermalconductivity=2.4; + + %wet ice thermal conductivity (W/m/K) + self.temperateiceconductivity=.24; + + %the melting point of ice at 1 atmosphere of pressure in K + self.meltingpoint=273.15; + + %rate of change of melting point with pressure (K/Pa) + self.beta=9.8*10^-8; + + %mixed layer (ice-water interface) heat capacity (J/kg/K) + self.mixed_layer_capacity=3974.; + + %thermal exchange velocity (ice-water interface) (m/s) + self.thermal_exchange_velocity=1.00*10^-4; + + %Rheology law: what is the temperature dependence of B with T + %available: none, paterson and arrhenius + self.rheology_law='Paterson'; + + % GIA: + self.lithosphere_shear_modulus = 6.7*10^10; % (Pa) + self.lithosphere_density = 3.32; % (g/cm^-3) + self.mantle_shear_modulus = 1.45*10^11; % (Pa) + self.mantle_density = 3.34; % (g/cm^-3) + + %SLR + self.earth_density= 5512; % average density of the Earth, (kg/m^3) + + end % }}} + function md = checkconsistency(self,md,solution,analyses) % {{{ + md = checkfield(md,'fieldname','materials.rho_ice','>',0); + md = checkfield(md,'fieldname','materials.rho_water','>',0); + md = checkfield(md,'fieldname','materials.rho_freshwater','>',0); + md = checkfield(md,'fieldname','materials.mu_water','>',0); + md = checkfield(md,'fieldname','materials.rheology_ko','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1); + md = checkfield(md,'fieldname','materials.rheology_Ec','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1); + md = checkfield(md,'fieldname','materials.rheology_Es','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1); + md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'}); + + if ismember(GiaAnalysisEnum(),analyses), + md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1); + md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1); + md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1); + md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1); + end + if ismember(SealevelriseAnalysisEnum(),analyses), + md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1); + end + + end % }}} + function disp(self) % {{{ + disp(sprintf(' Materials:')); + + fielddisplay(self,'rho_ice','ice density [kg/m^3]'); + fielddisplay(self,'rho_water','ocean water density [kg/m^3]'); + fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]'); + fielddisplay(self,'mu_water','water viscosity [N s/m^2]'); + fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]'); + fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']); + fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]'); + fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K'); + fielddisplay(self,'latentheat','latent heat of fusion [J/kg]'); + fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]'); + fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]'); + fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]'); + fielddisplay(self,'rheology_ko','octahedral flow law parameter [s^-1 Pa^-2]'); + fielddisplay(self,'rheology_Ec','compressive enhancement factor'); + fielddisplay(self,'rheology_Es','shear enhancement factor'); + fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']); + fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]'); + fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]'); + fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]'); + fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]'); + fielddisplay(self,'earth_density','Mantle density [kg/m^-3]'); + end % }}} + function marshall(self,md,fid) % {{{ + WriteData(fid,'enum',MaterialsEnum(),'data',MaticeEnum(),'format','Integer'); + WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','rheology_ko','format','DoubleMat','mattype',1); + WriteData(fid,'object',self,'class','materials','fieldname','rheology_Ec','format','DoubleMat','mattype',1); + WriteData(fid,'object',self,'class','materials','fieldname','rheology_Es','format','DoubleMat','mattype',1); + WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer'); + + WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3); + WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double'); + WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3); + WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double'); + end % }}} + function savemodeljs(self,fid,modelname) % {{{ + + writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice); + writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water); + writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater); + writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water); + writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity); + writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat); + writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity); + writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity); + writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint); + writejsdouble(fid,[modelname '.materials.beta'],self.beta); + writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); + writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity); + writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); + writejs1Darray(fid,[modelname '.materials.rheology_ko'],self.rheology_ko); + writejs1Darray(fid,[modelname '.materials.rheology_Ec'],self.rheology_Ec); + writejs1Darray(fid,[modelname '.materials.rheology_Es'],self.rheology_Es); + writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law); + writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus); + writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density); + writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus); + writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density); + writejsdouble(fid,[modelname '.materials.earth_density'],self.earth_density); + + end % }}} + end +end