source: issm/trunk-jpl/src/m/classes/solidearth.m@ 26299

Last change on this file since 26299 was 26299, checked in by jdquinn, 4 years ago

CHG: test2001 MATLAB -> Python; clean up

File size: 5.8 KB
RevLine 
[25118]1%SOLIDEARTH class definition
2%
3% Usage:
4% solidearth=solidearth();
5
6classdef solidearth
7 properties (SetAccess=public)
8 settings = solidearthsettings();
[25763]9 external = [];
[25144]10 lovenumbers = lovenumbers();
[25118]11 rotational = rotational();
12 planetradius = planetradius('earth');
13 requested_outputs = {};
14 transitions = {};
[25758]15 partitionice = [];
16 partitionhydro = [];
[26099]17 partitionocean = [];
[25118]18 end
[25969]19 methods (Static)
20 function self = loadobj(self) % {{{
21 % This function is directly called by matlab when a model object is
22 % loaded. If the input is a struct it is an old version of this class and
23 % old fields must be recovered (make sure they are in the deprecated
24 % model properties)
25
26 if isstruct(self)
27 % 2021, Jan 10
28 if isfield(self,'sealevel')
29 self.initialsealevel = self.sealevel;
30 end
31 self = structtoobj(solidearth(),self);
32
33 end
34 end% }}}
35 end
[25118]36 methods
37 function self = solidearth(varargin) % {{{
38 switch nargin
39 case 0
[25767]40 self=setdefaultparameters(self,'earth');
41 case 1
42 self=setdefaultparameters(self,varargin{:});
[25118]43 otherwise
[25767]44 error('solidearth constructor error message: zero or one argument only!');
[25118]45 end
46 end % }}}
[25767]47 function self = setdefaultparameters(self,planet) % {{{
[25118]48
[25767]49 %output default:
50 self.requested_outputs={'default'};
[25751]51
[25767]52 %transitions should be a cell array of vectors:
53 self.transitions={};
54
55 %no partitions requested for barystatic contribution:
56 self.partitionice=[];
57 self.partitionhydro=[];
[26099]58 self.partitionocean=[];
[25763]59
[25947]60 %no external solutions by default:
[25767]61 self.external=[];
62
63 %earth radius
64 self.planetradius= planetradius(planet);
[25118]65
66 end % }}}
67 function md = checkconsistency(self,md,solution,analyses) % {{{
68
[25956]69 if ~ismember('SealevelchangeAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.isslc==0),
[25118]70 return;
71 end
72
73 md = checkfield(md,'fieldname','solidearth.requested_outputs','stringrow',1);
74
75 self.settings.checkconsistency(md,solution,analyses);
[25144]76 self.lovenumbers.checkconsistency(md,solution,analyses);
[25118]77 self.rotational.checkconsistency(md,solution,analyses);
[25763]78 if ~isempty(self.external),
79 if ~isa(self.external,'solidearthsolution'),
80 error('solidearth consistency check: external field should be a solidearthsolution');
81 end
82 self.external.checkconsistency(md,solution,analyses);
83 end
[25118]84
85 end % }}}
86 function list=defaultoutputs(self,md) % {{{
87 list = {'Sealevel'};
88 end % }}}
89 function disp(self) % {{{
90 disp(sprintf(' solidearth inputs, forcings and settings:'));
91
92 fielddisplay(self,'planetradius','planet radius [m]');
93 fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
94 fielddisplay(self,'requested_outputs','additional outputs requested');
[25751]95 fielddisplay(self,'partitionice','ice partition vector for barystatic contribution');
96 fielddisplay(self,'partitionhydro','hydro partition vector for barystatic contribution');
[26099]97 fielddisplay(self,'partitionocean','ocean partition vector for barystatic contribution');
[25763]98 if isempty(self.external), fielddisplay(self,'external','external solution, of the type solidearthsolution'); end
[25118]99 self.settings.disp();
[25144]100 self.lovenumbers.disp();
[25118]101 self.rotational.disp();
[25763]102 if ~isempty(self.external),
103 self.external.disp();
104 end
[25118]105
106 end % }}}
107 function marshall(self,prefix,md,fid) % {{{
[26299]108
[25118]109 WriteData(fid,prefix,'object',self,'fieldname','planetradius','format','Double');
110 WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
[26299]111
[25751]112 if ~isempty(self.partitionice),
113 npartice=max(self.partitionice)+2;
114 else
115 npartice=0;
116 end
117 if ~isempty(self.partitionhydro),
118 nparthydro=max(self.partitionhydro)+2;
119 else
120 nparthydro=0;
121 end
[26099]122 if ~isempty(self.partitionocean),
123 npartocean=max(self.partitionocean)+2;
124 else
125 npartocean=0;
126 end
[25118]127
[25751]128 WriteData(fid,prefix,'object',self,'fieldname','partitionice','mattype',1,'format','DoubleMat');
129 WriteData(fid,prefix,'data',npartice,'format','Integer','name','md.solidearth.npartice');
130 WriteData(fid,prefix,'object',self,'fieldname','partitionhydro','mattype',1,'format','DoubleMat');
131 WriteData(fid,prefix,'data',nparthydro,'format','Integer','name','md.solidearth.nparthydro');
[26099]132 WriteData(fid,prefix,'object',self,'fieldname','partitionocean','mattype',1,'format','DoubleMat');
133 WriteData(fid,prefix,'data',npartocean,'format','Integer','name','md.solidearth.npartocean');
[26299]134
[25118]135 self.settings.marshall(prefix,md,fid);
[25144]136 self.lovenumbers.marshall(prefix,md,fid);
[25118]137 self.rotational.marshall(prefix,md,fid);
[25763]138 if ~isempty(self.external),
[25947]139 WriteData(fid,prefix,'data',1,'format','Integer','name','md.solidearth.isexternal');
[25763]140 self.external.marshall(prefix,md,fid);
[25947]141 else
142 WriteData(fid,prefix,'data',0,'format','Integer','name','md.solidearth.isexternal');
[25763]143 end
[26299]144
[25118]145 %process requested outputs
146 outputs = self.requested_outputs;
[26299]147 pos = find(ismember(outputs,'default'));
[25118]148 if ~isempty(pos),
149 outputs(pos) = []; %remove 'default' from outputs
150 outputs = [outputs defaultoutputs(self,md)]; %add defaults
151 end
152 WriteData(fid,prefix,'data',outputs,'name','md.solidearth.requested_outputs','format','StringArray');
153
154 end % }}}
[26299]155 function self = extrude(self,md) % {{{
156 end % }}}
[25118]157 function savemodeljs(self,fid,modelname) % {{{
158
159 self.settings.savemodeljs(fid,modelname);
[25144]160 self.lovenumbers.savemodeljs(fid,modelname);
[25118]161 self.rotational.savemodeljs(fid,modelname);
[25763]162 if ~isempty(self.external),
163 self.external.savemodeljs(fid,modelname);
164 end
[25118]165 writejscellstring(fid,[modelname '.solidearth.requested_outputs'],self.requested_outputs);
166 writejscellarray(fid,[modelname '.solidearth.transitions'],self.transitions);
[25751]167 writejscellarray(fid,[modelname '.solidearth.partition'],self.partition);
[25118]168 end % }}}
169 end
170end
Note: See TracBrowser for help on using the repository browser.