source: issm/trunk/src/m/classes/matice.m@ 19105

Last change on this file since 19105 was 19105, checked in by Mathieu Morlighem, 10 years ago

merged trunk-jpl and trunk for revision 19103

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