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

Last change on this file since 26047 was 26047, checked in by Eric.Larour, 4 years ago

CHG: huge commit on solid earth capability rewrite. Complete cleanup of the sea level core.
New mass transport capabilities for ocean and tws. No more giacore. GiaIvins folded into
the sea level core. Debugging of Materials.

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