source: issm/trunk-jpl/src/m/classes/SMBsemic.m@ 27454

Last change on this file since 27454 was 27454, checked in by jdquinn, 2 years ago

CHG: Missing *args; cleanup

File size: 8.0 KB
RevLine 
[23540]1%SMBsemic Class definition
2%
3% Usage:
4% SMBsemic=SMBsemic();
5
6classdef SMBsemic
[24240]7 properties (SetAccess=public)
[23540]8 dailysnowfall = NaN;
9 dailyrainfall = NaN;
10 dailydsradiation = NaN;
11 dailydlradiation = NaN;
12 dailywindspeed = NaN;
13 dailypressure = NaN;
[27453]14 dailyairdensity = NaN;
[23540]15 dailyairhumidity = NaN;
16 dailytemperature = NaN;
17 desfac = 0;
[27453]18 rlaps = 0;
[23540]19 rdl = 0;
[27453]20 s0gcm = NaN;
21 steps_per_step = 1;
22 averaging = 0;
23 requested_outputs = {};
[23540]24 end
25 methods
26 function self = SMBsemic(varargin) % {{{
27 switch nargin
28 case 0
29 self=setdefaultparameters(self);
30 otherwise
31 error('constructor not supported');
32 end
33 end % }}}
34 function self = extrude(self,md) % {{{
35 self.dailysnowfall=project3d(md,'vector',self.dailysnowfall,'type','node');
36 self.dailyrainfall=project3d(md,'vector',self.dailyrainfall,'type','node');
37 self.dailydsradiation=project3d(md,'vector',self.dailydsradiation,'type','node');
38 self.dailydlradiation=project3d(md,'vector',self.dailydlradiation,'type','node');
39 self.dailywindspeed=project3d(md,'vector',self.dailywindspeed,'type','node');
40 self.dailypressure=project3d(md,'vector',self.dailypressure,'type','node');
41 self.dailyairdensity=project3d(md,'vector',self.dailyairdensity,'type','node');
42 self.dailyairhumidity=project3d(md,'vector',self.dailyairhumidity,'type','node');
43 self.dailytemperature=project3d(md,'vector',self.dailytemperature,'type','node');
44 self.s0gcm=project3d(md,'vector',self.s0gcm,'type','node');
45
46 end % }}}
47 function list = defaultoutputs(self,md) % {{{
[27403]48 list = {'SmbMassBalance'};
[23540]49 end % }}}
50 function self = initialize(self,md) % {{{
51
52 if isnan(self.s0gcm),
53 self.s0gcm=zeros(md.mesh.numberofvertices,1);
54 disp(' no SMBsemic.s0gcm specified: values set as zero');
55 end
56
57 end % }}}
58 function self = setdefaultparameters(self) % {{{
59
60 self.desfac = -log(2.0)/1000;
61 self.rlaps = 7.4;
62 self.rdl = 0.29;
[27409]63 self.requested_outputs={'default'};
[23540]64
65 end % }}}zo
66 function md = checkconsistency(self,md,solution,analyses) % {{{
67
68 if ismember('MasstransportAnalysis',analyses),
69 md = checkfield(md,'fieldname','smb.desfac','<=',1,'numel',1);
70 md = checkfield(md,'fieldname','smb.s0gcm','>=',0,'NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
71 md = checkfield(md,'fieldname','smb.rlaps','>=',0,'numel',1);
72 md = checkfield(md,'fieldname','smb.rdl','>=',0,'numel',1);
73 md = checkfield(md,'fieldname','smb.dailysnowfall','timeseries',1,'NaN',1,'Inf',1);
74 md = checkfield(md,'fieldname','smb.dailyrainfall','timeseries',1,'NaN',1,'Inf',1);
75 md = checkfield(md,'fieldname','smb.dailydsradiation','timeseries',1,'NaN',1,'Inf',1);
76 md = checkfield(md,'fieldname','smb.dailydlradiation','timeseries',1,'NaN',1,'Inf',1);
77 md = checkfield(md,'fieldname','smb.dailywindspeed','timeseries',1,'NaN',1,'Inf',1);
78 md = checkfield(md,'fieldname','smb.dailypressure','timeseries',1,'NaN',1,'Inf',1);
79 md = checkfield(md,'fieldname','smb.dailyairdensity','timeseries',1,'NaN',1,'Inf',1);
80 md = checkfield(md,'fieldname','smb.dailyairhumidity','timeseries',1,'NaN',1,'Inf',1);
81 md = checkfield(md,'fieldname','smb.dailytemperature','timeseries',1,'NaN',1,'Inf',1);
82 end
[24240]83 md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
[24800]84 md = checkfield(md,'fieldname','smb.averaging','numel',[1],'values',[0 1 2]);
[23540]85 md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
86
87 end % }}}
88 function disp(self) % {{{
89 disp(sprintf(' surface forcings parameters:'));
[24240]90
[23540]91 disp(sprintf(' Interface for coupling GCM data to the energy balance model SEMIC (Krapp et al (2017) https://doi.org/10.5194/tc-11-1519-2017).'));
[24240]92 disp(sprintf(' The implemented coupling uses daily mean GCM input to calculate yearly mean smb, accumulation, ablation, and surface temperature.'));
[23540]93 disp(sprintf(' smb and temperatures are updated every year'));
94 disp(sprintf('\n SEMIC parameters:'));
[24240]95 fielddisplay(self,'dailysnowfall','daily surface dailysnowfall [m/s]');
[23540]96 fielddisplay(self,'dailyrainfall','daily surface dailyrainfall [m/s]');
97 fielddisplay(self,'dailydsradiation','daily downwelling shortwave radiation [W/m2]');
98 fielddisplay(self,'dailydlradiation','daily downwelling longwave radiation [W/m2]');
[24240]99 fielddisplay(self,'dailywindspeed','daily surface wind speed [m/s]');
[23540]100 fielddisplay(self,'dailypressure','daily surface pressure [Pa]');
[24240]101 fielddisplay(self,'dailyairdensity','daily air density [kg/m3]');
[23540]102 fielddisplay(self,'dailyairhumidity','daily air specific humidity [kg/kg]');
103 fielddisplay(self,'dailytemperature','daily surface air temperature [K]');
[27454]104 fielddisplay(self,'rlaps','present day lapse rate (default is 7.4 [degree/km]; Erokhina et al. 2017)');
[23540]105 fielddisplay(self,'desfac','desertification elevation factor (default is -log(2.0)/1000 [1/km]; Vizcaino et al. 2010)');
106 fielddisplay(self,'rdl','longwave downward radiation decrease (default is 0.29 [W/m^2/km]; Marty et al. 2002)');
107 fielddisplay(self,'s0gcm','GCM reference elevation; (default is 0) [m]');
[24240]108 fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
[24793]109 fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
[24806]110 disp(sprintf('%51s 0: Arithmetic (default)',' '));
111 disp(sprintf('%51s 1: Geometric',' '));
112 disp(sprintf('%51s 2: Harmonic',' '));
[23540]113 fielddisplay(self,'requested_outputs','additional outputs requested');
114 end % }}}
115 function marshall(self,prefix,md,fid) % {{{
[24240]116
[27453]117 yts=md.constants.yts;
118
[23540]119 WriteData(fid,prefix,'name','md.smb.model','data',12,'format','Integer');
120
121 WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
122 WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0gcm','format','DoubleMat','mattype',1);
123 WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlaps','format','Double');
124 WriteData(fid,prefix,'object',self,'class','smb','fieldname','rdl','format','Double');
[27453]125 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailysnowfall','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
126 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailyrainfall','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
127 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailydsradiation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
128 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailydlradiation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
129 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailywindspeed','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
130 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailypressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
131 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailyairdensity','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
132 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailyairhumidity','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
133 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailytemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);
134 WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer');
135 WriteData(fid,prefix,'object',self,'fieldname','averaging','format','Integer');
[23540]136 %process requested outputs
137 outputs = self.requested_outputs;
138 pos = find(ismember(outputs,'default'));
139 if ~isempty(pos),
140 outputs(pos) = []; %remove 'default' from outputs
141 outputs = [outputs defaultoutputs(self,md)]; %add defaults
142 end
143 WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
144
145 end % }}}
146 end
147end
Note: See TracBrowser for help on using the repository browser.