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

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

CHG: Missing changes from merge from Eric’s branch

File size: 4.7 KB
RevLine 
[25118]1%SOLIDEARTH class definition
2%
3% Usage:
4% solidearth=solidearth();
5
6classdef solidearth
7 properties (SetAccess=public)
8 sealevel = NaN;
9 settings = solidearthsettings();
10 surfaceload = surfaceload();
[25144]11 lovenumbers = lovenumbers();
[25118]12 rotational = rotational();
13 planetradius = planetradius('earth');
14 requested_outputs = {};
15 transitions = {};
[25758]16 partitionice = [];
17 partitionhydro = [];
[25118]18 end
19 methods
20 function self = solidearth(varargin) % {{{
21 switch nargin
22 case 0
[25758]23 self=setdefaultparameters(self);
[25118]24 otherwise
[25758]25 error('constructor not supported');
[25118]26 end
27 end % }}}
[25758]28 function self = setdefaultparameters(self) % {{{
[25118]29
30 %output default:
31 self.requested_outputs={'default'};
32
33 %transitions should be a cell array of vectors:
34 self.transitions={};
[25758]35
[25751]36 %no partitions requested for barystatic contribution:
37 self.partitionice=[];
38 self.partitionhydro=[];
39
[25118]40 %earth radius
[25758]41 self.planetradius= planetradius('earth');
[25118]42
43 end % }}}
44 function md = checkconsistency(self,md,solution,analyses) % {{{
45
46 if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.isslr==0),
47 return;
48 end
49
50 md = checkfield(md,'fieldname','solidearth.sealevel','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
51 md = checkfield(md,'fieldname','solidearth.requested_outputs','stringrow',1);
52
53 self.settings.checkconsistency(md,solution,analyses);
54 self.surfaceload.checkconsistency(md,solution,analyses);
[25144]55 self.lovenumbers.checkconsistency(md,solution,analyses);
[25118]56 self.rotational.checkconsistency(md,solution,analyses);
57
58
59 end % }}}
60 function list=defaultoutputs(self,md) % {{{
61 list = {'Sealevel'};
62 end % }}}
63 function disp(self) % {{{
64 disp(sprintf(' solidearth inputs, forcings and settings:'));
65
66 fielddisplay(self,'sealevel','current sea level (prior to computation) [m]');
67 fielddisplay(self,'planetradius','planet radius [m]');
68 fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
69 fielddisplay(self,'requested_outputs','additional outputs requested');
[25751]70 fielddisplay(self,'partitionice','ice partition vector for barystatic contribution');
71 fielddisplay(self,'partitionhydro','hydro partition vector for barystatic contribution');
[25118]72 self.settings.disp();
73 self.surfaceload.disp();
[25144]74 self.lovenumbers.disp();
[25118]75 self.rotational.disp();
76
77 end % }}}
78 function marshall(self,prefix,md,fid) % {{{
79
80 WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
81 WriteData(fid,prefix,'object',self,'fieldname','planetradius','format','Double');
82 WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
[25751]83
84 if ~isempty(self.partitionice),
85 npartice=max(self.partitionice)+2;
86 else
87 npartice=0;
88 end
89 if ~isempty(self.partitionhydro),
90 nparthydro=max(self.partitionhydro)+2;
91 else
92 nparthydro=0;
93 end
[25118]94
[25751]95
96 WriteData(fid,prefix,'object',self,'fieldname','partitionice','mattype',1,'format','DoubleMat');
97 WriteData(fid,prefix,'data',npartice,'format','Integer','name','md.solidearth.npartice');
98 WriteData(fid,prefix,'object',self,'fieldname','partitionhydro','mattype',1,'format','DoubleMat');
99 WriteData(fid,prefix,'data',nparthydro,'format','Integer','name','md.solidearth.nparthydro');
100
[25118]101 self.settings.marshall(prefix,md,fid);
102 self.surfaceload.marshall(prefix,md,fid);
[25144]103 self.lovenumbers.marshall(prefix,md,fid);
[25118]104 self.rotational.marshall(prefix,md,fid);
105
106 %process requested outputs
107 outputs = self.requested_outputs;
108 pos = find(ismember(outputs,'default'));
109 if ~isempty(pos),
110 outputs(pos) = []; %remove 'default' from outputs
111 outputs = [outputs defaultoutputs(self,md)]; %add defaults
112 end
113 WriteData(fid,prefix,'data',outputs,'name','md.solidearth.requested_outputs','format','StringArray');
114
115 end % }}}
116 function savemodeljs(self,fid,modelname) % {{{
117
118 writejs1Darray(fid,[modelname '.solidearth.sealevel'],self.sealevel);
119 self.settings.savemodeljs(fid,modelname);
120 self.surfaceload.savemodeljs(fid,modelname);
[25144]121 self.lovenumbers.savemodeljs(fid,modelname);
[25118]122 self.rotational.savemodeljs(fid,modelname);
123 writejscellstring(fid,[modelname '.solidearth.requested_outputs'],self.requested_outputs);
124 writejscellarray(fid,[modelname '.solidearth.transitions'],self.transitions);
[25751]125 writejscellarray(fid,[modelname '.solidearth.partition'],self.partition);
[25118]126 end % }}}
127 function self = extrude(self,md) % {{{
128 self.sealevel=project3d(md,'vector',self.sealevel,'type','node');
129 end % }}}
130 end
131end
Note: See TracBrowser for help on using the repository browser.