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

Last change on this file since 24800 was 24800, checked in by jdquinn, 5 years ago

BUG: Extra comma

File size: 8.0 KB
Line 
1%SMBsemic Class definition
2%
3% Usage:
4% SMBsemic=SMBsemic();
5
6classdef SMBsemic
7 properties (SetAccess=public)
8 dailysnowfall = NaN;
9 dailyrainfall = NaN;
10 dailydsradiation = NaN;
11 dailydlradiation = NaN;
12 dailywindspeed = NaN;
13 dailypressure = NaN;
14 dailyairdensity = NaN;
15 dailyairhumidity = NaN;
16 dailytemperature = NaN;
17 desfac = 0;
18 rlaps = 0;
19 rdl = 0;
20 s0gcm = NaN;
21 steps_per_step = 1;
22 averaging = 0;
23 requested_outputs = {};
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) % {{{
48 list = {''};
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;
63
64 end % }}}zo
65 function md = checkconsistency(self,md,solution,analyses) % {{{
66
67 if ismember('MasstransportAnalysis',analyses),
68 md = checkfield(md,'fieldname','smb.desfac','<=',1,'numel',1);
69 md = checkfield(md,'fieldname','smb.s0gcm','>=',0,'NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
70 md = checkfield(md,'fieldname','smb.rlaps','>=',0,'numel',1);
71 md = checkfield(md,'fieldname','smb.rdl','>=',0,'numel',1);
72 md = checkfield(md,'fieldname','smb.dailysnowfall','timeseries',1,'NaN',1,'Inf',1);
73 md = checkfield(md,'fieldname','smb.dailyrainfall','timeseries',1,'NaN',1,'Inf',1);
74 md = checkfield(md,'fieldname','smb.dailydsradiation','timeseries',1,'NaN',1,'Inf',1);
75 md = checkfield(md,'fieldname','smb.dailydlradiation','timeseries',1,'NaN',1,'Inf',1);
76 md = checkfield(md,'fieldname','smb.dailywindspeed','timeseries',1,'NaN',1,'Inf',1);
77 md = checkfield(md,'fieldname','smb.dailypressure','timeseries',1,'NaN',1,'Inf',1);
78 md = checkfield(md,'fieldname','smb.dailyairdensity','timeseries',1,'NaN',1,'Inf',1);
79 md = checkfield(md,'fieldname','smb.dailyairhumidity','timeseries',1,'NaN',1,'Inf',1);
80 md = checkfield(md,'fieldname','smb.dailytemperature','timeseries',1,'NaN',1,'Inf',1);
81 end
82 md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
83 md = checkfield(md,'fieldname','smb.averaging','numel',[1],'values',[0 1 2]);
84 md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
85
86 end % }}}
87 function disp(self) % {{{
88 disp(sprintf(' surface forcings parameters:'));
89
90 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).'));
91 disp(sprintf(' The implemented coupling uses daily mean GCM input to calculate yearly mean smb, accumulation, ablation, and surface temperature.'));
92 disp(sprintf(' smb and temperatures are updated every year'));
93 disp(sprintf('\n SEMIC parameters:'));
94 fielddisplay(self,'dailysnowfall','daily surface dailysnowfall [m/s]');
95 fielddisplay(self,'dailyrainfall','daily surface dailyrainfall [m/s]');
96 fielddisplay(self,'dailydsradiation','daily downwelling shortwave radiation [W/m2]');
97 fielddisplay(self,'dailydlradiation','daily downwelling longwave radiation [W/m2]');
98 fielddisplay(self,'dailywindspeed','daily surface wind speed [m/s]');
99 fielddisplay(self,'dailypressure','daily surface pressure [Pa]');
100 fielddisplay(self,'dailyairdensity','daily air density [kg/m3]');
101 fielddisplay(self,'dailyairhumidity','daily air specific humidity [kg/kg]');
102 fielddisplay(self,'dailytemperature','daily surface air temperature [K]');
103 fielddisplay(self,'rlaps','present day lapse rate (default is 7.4 [degree/km]; )Erokhina et al. 2017)');
104 fielddisplay(self,'desfac','desertification elevation factor (default is -log(2.0)/1000 [1/km]; Vizcaino et al. 2010)');
105 fielddisplay(self,'rdl','longwave downward radiation decrease (default is 0.29 [W/m^2/km]; Marty et al. 2002)');
106 fielddisplay(self,'s0gcm','GCM reference elevation; (default is 0) [m]');
107 fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
108 fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
109 disp(sprintf('%55s 0: Arithmetic (default)');
110 disp(sprintf('%55s 0: Geometric');
111 disp(sprintf('%55s 0: Harmonic');
112 fielddisplay(self,'requested_outputs','additional outputs requested');
113 end % }}}
114 function marshall(self,prefix,md,fid) % {{{
115
116 WriteData(fid,prefix,'name','md.smb.model','data',12,'format','Integer');
117
118 WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
119 WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0gcm','format','DoubleMat','mattype',1);
120 WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlaps','format','Double');
121 WriteData(fid,prefix,'object',self,'class','smb','fieldname','rdl','format','Double');
122 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailysnowfall','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
123 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailyrainfall','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
124 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailydsradiation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
125 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailydlradiation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
126 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailywindspeed','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
127 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailypressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
128 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailyairdensity','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
129 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailyairhumidity','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
130 WriteData(fid,prefix,'object',self,'class','smb','fieldname','dailytemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
131 WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
132 WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer');
133 %process requested outputs
134 outputs = self.requested_outputs;
135 pos = find(ismember(outputs,'default'));
136 if ~isempty(pos),
137 outputs(pos) = []; %remove 'default' from outputs
138 outputs = [outputs defaultoutputs(self,md)]; %add defaults
139 end
140 WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
141
142 end % }}}
143 end
144end
Note: See TracBrowser for help on using the repository browser.