Changeset 21681
- Timestamp:
- 04/18/17 13:54:10 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/giacaron.m
r21594 r21681 5 5 classdef giacaron 6 6 properties (SetAccess=public) 7 numlayers = NaN; 7 8 %Physical constants 9 gravitational_constant= NaN; 10 surface_radius = NaN; 11 core_mantle_boudary_radius= NaN; 12 inner_core_boudary_radius= NaN; 13 stress_norm= NaN; 14 gravity_norm= NaN; 15 radius_norm= NaN; 16 17 %Numerical parameters 18 allow_layer_deletion=NaN; 19 verbose_mode=NaN; 20 21 %GIA problem setup 22 forcing_type=NaN; 23 isincompressible=NaN; 24 benchmark_mode=NaN; 25 calculate_sea_level=NaN; 26 calculate_rotational_feedback=NaN; 27 subtract_present_day=NaN; 28 ntime=NaN; 29 nphi=NaN; 30 31 %Earth model 32 numlayers = NaN; 8 33 radius = NaN; 9 34 lame_mu = NaN; … … 15 40 transient_viscosity = NaN; 16 41 transient_mu = NaN; 42 43 %Inversion 44 % dataset_type_dentifier= NaN 45 % ndata_std= NaN; 46 % ndata_minimum_val = NaN; 47 % ndata_maximum_val = NaN; 48 % ndata_total=NaN; 49 % n_forward_models=NaN; 50 % ice_coefficients_solving = NaN; 51 % ninverse_parameters=NaN; 52 53 %Ice history 54 ice_model_identifier=NaN; 55 ice_model_ntime=NaN; 56 nice_sheets=NaN; 57 17 58 end 18 59 methods … … 27 68 if strcmpi(body,'earth'), 28 69 self.numlayers=getfieldvalue(options,'numlayers',5); 70 self.calculate_sea_level=true; 29 71 %[self.radius,self.lame_mu, self.lame_lambda, self.issolid, self.density, ... 30 72 %self.viscosity, self.isburger, self.transient_viscosity, self.transient_mu]=... … … 38 80 end % }}} 39 81 function self = setdefaultparameters(self) % {{{ 82 %Physical constants 83 gravitational_constant= 6.67259e-11; 84 stress_norm= 1e12; 85 gravity_norm= 10; 86 radius_norm= 1.0; 87 88 %Numerical parameters 89 allow_layer_deletion=true; 90 verbose_mode=false; 91 92 %GIA problem setup 93 forcing_type=11; 94 isincompressible=false; 95 benchmark_mode=false; 96 calculate_sea_level=false; 97 calculate_rotational_feedback=true; 98 subtract_present_day=true; 99 100 %Earth model 101 isburger = false(self.numlayers,1); 102 103 %Ice history 104 nice_sheets=1; 105 40 106 end % }}} 41 107 function md = checkconsistency(self,md,solution,analyses) % {{{ 42 108 43 109 if ~ismember('GiaAnalysis',analyses), return; end 110 % Physical constants 111 md = checkfield(md,'fieldname','gia.gravitational_constant','NaN',1,'Inf',1,'numel',1,'>',0); 112 md = checkfield(md,'fieldname','gia.surface_radius','NaN',1,'Inf',1,'numel',1,'>',0); 113 md = checkfield(md,'fieldname','gia.core_mantle_boundary_radius','Inf',1,'numel',1,'>',0); 114 md = checkfield(md,'fieldname','gia.inner_core_boundary_radius','Inf',1,'numel',1,'>',0); 115 md = checkfield(md,'fieldname','gia.radius_norm','NaN',1,'Inf',1,'numel',1,'>',0); 116 md = checkfield(md,'fieldname','gia.stress_norm','NaN',1,'Inf',1,'numel',1,'>',0); 117 md = checkfield(md,'fieldname','gia.gravity_norm','NaN',1,'Inf',1,'numel',1,'>',0); 118 119 %Numerical parameters 120 md = checkfield(md,'fieldname','gia.allow_layer_deletion','values',[0 1]); 121 md = checkfield(md,'fieldname','gia.verbose_mode','values',[0 1]); 122 123 %GIA problem setup 124 md = checkfield(md,'fieldname','gia.forcing_type','NaN',1,'Inf',1,'numel',1,'>',0, '<=', 12); 125 md = checkfield(md,'fieldname','gia.isincompressible','values',[0 1]); 126 md = checkfield(md,'fieldname','gia.benchmark_mode','values',[0 1]); 127 md = checkfield(md,'fieldname','gia.calculate_sea_level','values',[0 1]); 128 md = checkfield(md,'fieldname','gia.calculate_rotational_feedback','values',[0 1]); 129 md = checkfield(md,'fieldname','gia.subtract_present_day','values',[0 1]); 130 md = checkfield(md,'fieldname','gia.ntime','NaN',1,'Inf',1,'numel',1,'>',0); 131 md = checkfield(md,'fieldname','gia.ntheta','NaN',1,'Inf',1,'numel',1,'>',0); 132 md = checkfield(md,'fieldname','gia.nphi','numel',1,'values', self.ntheta*2); 133 134 %Ice history 135 md = checkfield(md,'fieldname','gia.ice_model_identifier', 'stringrow', 1, 'size', [1 3]); 136 md = checkfield(md,'fieldname','gia.ice_model_ntime', 'NaN', 1, 'Inf', 1, 'numel', 1); 137 md = checkfield(md,'fieldname','gia.nice_sheets', 'NaN', 1, 'Inf', 1, '>', 0, 'numel', 1); 138 139 %Earth parameters 44 140 md = checkfield(md,'fieldname','gia.numlayers','NaN',1,'Inf',1,'>',0,'numel',1); 45 141 md = checkfield(md,'fieldname','gia.radius','NaN',1,'Inf',1,'size',[md.gia.numlayers 1],'>',0); … … 55 151 function disp(self) % {{{ 56 152 disp(sprintf(' giacaron parameters:')); 153 154 % Physical constants 155 fielddisplay(self,'gravitational_constant', 'Newton''s Gravitational constant, should be equal to approximately 6.67e-11 [m^3.kg^-1.s^-2]'); 156 fielddisplay(self,'surface_radius','NaN', 'Planet outer surface radius [m]'); 157 fielddisplay(self,'core_mantle_boundary_radius', 'Planet core mantle boundary radius (optional) [m]'); 158 fielddisplay(self,'inner_core_boundary_radius','Planet inner core boundary radius (optional) [m]'); 159 fielddisplay(self,'radius_norm', 'length normalization constant [m] (default 1.0)'); 160 fielddisplay(self,'stress_norm', 'stress normalization constant [Pa] (default 1e12)'); 161 fielddisplay(self,'gravity_norm', 'gravity normalization constant [m.s^-2] (default 10)'); 162 163 %Numerical parameters 164 fielddisplay(self,'allow_layer_deletion', 'boolean allowing the migration of the starting integration radius while increasing the spherical harmonic degree (default true)'); 165 fielddisplay(self,'verbose_mode', 'boolean allowing the program to write more details on terminal (default false)') 166 167 %GIA problem setup 168 fielddisplay(self,'forcing_type','integer indicating the nature and depth of the forcing for the Love number calculation: 1: ICB -- Volumic Potential, 2: ICB -- Pressure, 3: ICB -- Loading, 4: ICB -- Tangential traction, 5: CMB -- Volumic Potential, 6: CMB -- Pressure 7: CMB -- Loading, 8: CMB -- Tangential traction, 9: SURF -- Volumic Potential, 10: SURF -- Pressure, 11: SURF -- Loading, 12: SURF -- Tangential traction (default 11)'); 169 fielddisplay(self,'isincompressible', 'boolean approximating the mantle rheology to an incompressible body, sets Lame_lambda to 5e14 Pa (default false)'); 170 fielddisplay(self,'benchmark_mode', 'boolean to enter benchmark mode, writes a lot of outputs from the midst of the calculation (default false)'); 171 fielddisplay(self,'calculate_sea_level', 'boolean allowing the sea level equation solving (default false)'); 172 fielddisplay(self,'calculate_rotational_feedback', 'boolean allowing the calculation of rotational feedback (default true)'); 173 fielddisplay(self,'subtract_present_day', 'boolean, subtracts the present day signal so the calculation is expressed as the difference with the present-day topography, geoid and sea level (default true)'); 174 fielddisplay(self,'ntime', 'number of time steps') 175 fielddisplay(self,'ntheta', 'size of grid in latitude') 176 fielddisplay(self,'nphi', 'size of grid in longitude (should always be ntheta*2)'); 177 178 %Ice history 179 fielddisplay(self,'ice_model_identifier', 'string identifier for the ice model (3 characters)') 180 fielddisplay(self,'ice_model_ntime', 'number of time steps in the original ice model, is used to interpolate the model on the desired time') 181 fielddisplay(self,'nice_sheets', 'number of ice regions to be scaled independently') 182 183 %Earth parameters 57 184 fielddisplay(self,'numlayers','number of layers (default 5)'); 58 185 fielddisplay(self,'radius','array describing the radius for each interface (numlayers+1) [m]'); … … 71 198 WriteData(fid,prefix,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10^3); %from km to m 72 199 WriteData(fid,prefix,'object',self,'fieldname','cross_section_shape','format','Integer'); 200 201 %Physical constants 202 WriteData(fid,prefix,'object',self,'fieldname','gravitational_constant','format','Double'); 203 WriteData(fid,prefix,'object',self,'fieldname','surface_radius ','format','Double'); 204 WriteData(fid,prefix,'object',self,'fieldname','core_mantle_boudary_radius','format','Double'); 205 WriteData(fid,prefix,'object',self,'fieldname','inner_core_boudary_radius','format','Double'); 206 WriteData(fid,prefix,'object',self,'fieldname','stress_norm','format','Double'); 207 WriteData(fid,prefix,'object',self,'fieldname','gravity_norm','format','Double'); 208 WriteData(fid,prefix,'object',self,'fieldname','radius_norm','format','Double'); 209 210 %Numerical parameters 211 WriteData(fid,prefix,'object',self,'fieldname','allow_layer_deletion','format','Boolean'); 212 WriteData(fid,prefix,'object',self,'fieldname','verbose_mode','format','Boolean'); 213 214 %GIA problem setup 215 WriteData(fid,prefix,'object',self,'fieldname','forcing_type','format','Integer'); 216 WriteData(fid,prefix,'object',self,'fieldname','isincompressible','format','Boolean'); 217 WriteData(fid,prefix,'object',self,'fieldname','benchmark_mode','format','Boolean'); 218 WriteData(fid,prefix,'object',self,'fieldname','calculate_sea_level','format','Boolean'); 219 WriteData(fid,prefix,'object',self,'fieldname','calculate_rotational_feedback','format','Boolean'); 220 WriteData(fid,prefix,'object',self,'fieldname','subtract_present_day','format','Boolean'); 221 WriteData(fid,prefix,'object',self,'fieldname','ntime','format','Integer'); 222 WriteData(fid,prefix,'object',self,'fieldname','ntheta','format','Integer'); 223 WriteData(fid,prefix,'object',self,'fieldname','nphi','format','Integer'); 224 225 %Earth model 226 WriteData(fid,prefix,'object',self,'fieldname','numlayers','format','Double'); 227 WriteData(fid,prefix,'object',self,'fieldname','radius','format','DoubleMat','mattype',1); 228 WriteData(fid,prefix,'object',self,'fieldname','lame_mu','format','DoubleMat','mattype',1); 229 WriteData(fid,prefix,'object',self,'fieldname','lame_lambda ','format','DoubleMat','mattype',1); 230 WriteData(fid,prefix,'object',self,'fieldname','issolid','format','BooleanMat','mattype',1); 231 WriteData(fid,prefix,'object',self,'fieldname','density','format','DoubleMat','mattype',1); 232 WriteData(fid,prefix,'object',self,'fieldname','viscosity','format','DoubleMat','mattype',1); 233 WriteData(fid,prefix,'object',self,'fieldname','isburger','format','BooleanMat','mattype',1); 234 WriteData(fid,prefix,'object',self,'fieldname','transient_viscosity','format','DoubleMat','mattype',1); 235 WriteData(fid,prefix,'object',self,'fieldname','transient_mu','format','DoubleMat','mattype',1); 236 237 %Inversion 238 % dataset_type_dentifier= NaN 239 WriteData(fid,prefix,'object',self,'fieldname','ndata_std','format','Integer'); 240 WriteData(fid,prefix,'object',self,'fieldname','ndata_minimum_val ','format','Integer'); 241 WriteData(fid,prefix,'object',self,'fieldname','ndata_maximum_val ','format','Integer'); 242 WriteData(fid,prefix,'object',self,'fieldname','ndata_total','format','Integer'); 243 WriteData(fid,prefix,'object',self,'fieldname','n_forward_models','format','Integer'); 244 WriteData(fid,prefix,'object',self,'fieldname','ice_coefficients_solving ','format','String'); 245 WriteData(fid,prefix,'object',self,'fieldname','ninverse_parameters','format','Integer'); 246 247 %Ice history 248 WriteData(fid,prefix,'object',self,'fieldname','ice_model_identifier','format','String'); 249 WriteData(fid,prefix,'object',self,'fieldname','ice_model_ntime','format','Integer'); 250 WriteData(fid,prefix,'object',self,'fieldname','nice_sheets','format','Integer'); 73 251 end % }}} 74 252 function savemodeljs(self,fid,modelname) % {{{ 75 253 254 %Physical constants 255 writejsdouble(fid,[modelname '.gia.gravitational_constant'],self.gravitational_constant); 256 writejsdouble(fid,[modelname '.gia.surface_radius'],self.surface_radius); 257 writejsdouble(fid,[modelname '.gia.core_mantle_boudary_radius'],self.core_mantle_boudary_radius); 258 writejsdouble(fid,[modelname '.gia.inner_core_boudary_radius'],self.inner_core_boudary_radius); 259 writejsdouble(fid,[modelname '.gia.stress_norm'],self.stress_norm); 260 writejsdouble(fid,[modelname '.gia.gravity_norm'],self.gravity_norm); 261 writejsdouble(fid,[modelname '.gia.radius_norm'],self.radius_norm); 262 263 %Numerical parameters 264 writejsdouble(fid,[modelname '.gia.allow_layer_deletion'],self.allow_layer_deletion); 265 writejsdouble(fid,[modelname '.gia.verbose_mode'],self.verbose_mode); 266 267 %GIA problem setup 268 writejsdouble(fid,[modelname '.gia.forcing_type'],self.forcing_type); 269 writejsdouble(fid,[modelname '.gia.isincompressible'],self.isincompressible); 270 writejsdouble(fid,[modelname '.gia.benchmark_mode'],self.benchmark_mode); 271 writejsdouble(fid,[modelname '.gia.calculate_sea_level'],self.calculate_sea_level); 272 writejsdouble(fid,[modelname '.gia.calculate_rotational_feedback'],self.calculate_rotational_feedback); 273 writejsdouble(fid,[modelname '.gia.subtract_present_day'],self.subtract_present_day); 274 writejsdouble(fid,[modelname '.gia.ntime'],self.ntime); 275 writejsdouble(fid,[modelname '.gia.ntheta'],self.ntheta); 276 writejsdouble(fid,[modelname '.gia.nphi'],self.nphi); 277 278 %Earth model 279 writejsdouble(fid,[modelname '.gia.numlayers'],self.numlayers); 280 writejsdouble(fid,[modelname '.gia.radius'],self.radius); 281 writejsdouble(fid,[modelname '.gia.lame_mu'],self.lame_mu); 282 writejsdouble(fid,[modelname '.gia.lame_lambda'],self.lame_lambda); 283 writejsdouble(fid,[modelname '.gia.issolid'],self.issolid); 284 writejsdouble(fid,[modelname '.gia.density'],self.density); 285 writejsdouble(fid,[modelname '.gia.viscosity'],self.viscosity); 286 writejsdouble(fid,[modelname '.gia.isburger'],self.isburger); 287 writejsdouble(fid,[modelname '.gia.transient_viscosity'],self.transient_viscosity); 288 writejsdouble(fid,[modelname '.gia.transient_mu'],self.transient_mu); 289 290 %Inversion 291 % dataset_type_dentifier= NaN 292 % writejsdouble(fid,[modelname '.gia.ndata_std'],self.ndata_std); 293 % writejsdouble(fid,[modelname '.gia.ndata_minimum_val'],self.ndata_minimum_val); 294 % writejsdouble(fid,[modelname '.gia.ndata_maximum_val'],self.ndata_maximum_val); 295 % writejsdouble(fid,[modelname '.gia.ndata_total'],self.ndata_total); 296 % writejsdouble(fid,[modelname '.gia.n_forward_models'],self.n_forward_models); 297 % writejsdouble(fid,[modelname '.gia.ice_coefficients_solving'],self.ice_coefficients_solving); 298 % writejsdouble(fid,[modelname '.gia.ninverse_parameters'],self.ninverse_parameters); 299 300 %Ice history 301 writejsdouble(fid,[modelname '.gia.ice_model_identifier'],self.ice_model_identifier); 302 writejsdouble(fid,[modelname '.gia.ice_model_ntime'],self.ice_model_ntime); 303 writejsdouble(fid,[modelname '.gia.nice_sheets'],self.nice_sheets); 76 304 writejsdouble(fid,[modelname '.gia.mantle_viscosity'],self.mantle_viscosity); 77 305 writejsdouble(fid,[modelname '.gia.lithosphere_thickness'],self.lithosphere_thickness); 78 306 writejsdouble(fid,[modelname '.gia.cross_section_shape'],self.cross_section_shape); 79 307 80 308 end % }}} 81 309 end
Note:
See TracChangeset
for help on using the changeset viewer.