source: issm/trunk-jpl/src/m/classes/SMBpdd.m@ 18968

Last change on this file since 18968 was 18968, checked in by lemorzad, 10 years ago

updating pdd module and NR 236 and 237. Updated python scripts may not work as I am not familiar with python.

File size: 12.6 KB
Line 
1%SMBpdd Class definition
2%
3% Usage:
4% SMBpdd=SMBpdd();
5
6classdef SMBpdd
7 properties (SetAccess=public)
8 precipitation = NaN;
9 monthlytemperatures = NaN;
10 desfac = 0;
11 s0p = 0;
12 s0t = 0;
13 rlaps = 0;
14 rlapslgm = 0;
15 Pfac = NaN;
16 Tdiff = NaN;
17 sealev = NaN;
18 isdelta18o = 0;
19 ismungsm = 0;
20 delta18o = NaN;
21 delta18o_surface = NaN;
22 temperatures_presentday = NaN;
23 temperatures_lgm = NaN;
24 precipitations_presentday = NaN;
25 precipitations_lgm = NaN;
26 end
27 methods
28 function obj = SMBpdd(varargin) % {{{
29 switch nargin
30 case 0
31 obj=setdefaultparameters(obj);
32 otherwise
33 error('constructor not supported');
34 end
35 end % }}}
36 function self = extrude(self,md) % {{{
37 if(self.isdelta18o==0 & self.ismungsm==0),self.precipitation=project3d(md,'vector',self.precipitation,'type','node');end
38 if(self.isdelta18o==0 & self.ismungsm==0),self.monthlytemperatures=project3d(md,'vector',self.monthlytemperatures,'type','node');end
39 if(self.isdelta18o),self.temperatures_lgm=project3d(md,'vector',self.temperatures_lgm,'type','node');end
40 if(self.isdelta18o),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
41 if(self.isdelta18o),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
42 if(self.isdelta18o),self.precipitations_lgm=project3d(md,'vector',self.precipitations_lgm,'type','node');end
43 if(self.ismungsm),self.temperatures_lgm=project3d(md,'vector',self.temperatures_lgm,'type','node');end
44 if(self.ismungsm),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
45 if(self.ismungsm),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
46 if(self.ismungsm),self.precipitations_lgm=project3d(md,'vector',self.precipitations_lgm,'type','node');end
47
48 end % }}}
49 function self = initialize(self,md) % {{{
50
51 % if isnan(self.precipitation),
52 % self.precipitation=zeros(md.mesh.numberofvertices,1);
53 % disp(' no SMBpdd.precipitation specified: values set as zero');
54 % end
55
56 end % }}}
57 function obj = setdefaultparameters(obj) % {{{
58
59 obj.isdelta18o = 0;
60 obj.ismungsm = 0;
61 obj.desfac = 0.5;
62 obj.s0p = 0;
63 obj.s0t = 0;
64 obj.rlaps = 6.5;
65 obj.rlapslgm = 6.5;
66
67 end % }}}
68 function md = checkconsistency(obj,md,solution,analyses) % {{{
69
70 if ismember(MasstransportAnalysisEnum(),analyses),
71 md = checkfield(md,'fieldname','surfaceforcings.desfac','<=',1,'numel',1);
72 md = checkfield(md,'fieldname','surfaceforcings.s0p','>=',0,'numel',1);
73 md = checkfield(md,'fieldname','surfaceforcings.s0t','>=',0,'numel',1);
74 md = checkfield(md,'fieldname','surfaceforcings.rlaps','>=',0,'numel',1);
75 md = checkfield(md,'fieldname','surfaceforcings.rlapslgm','>=',0,'numel',1);
76 if(obj.isdelta18o==0 & obj.ismungsm==0)
77 md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','forcing',1,'NaN',1);
78 md = checkfield(md,'fieldname','surfaceforcings.precipitation','forcing',1,'NaN',1);
79 elseif(obj.isdelta18o==1)
80 md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1);
81 md = checkfield(md,'fieldname','surfaceforcings.delta18o_surface','NaN',1);
82 md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
83 md = checkfield(md,'fieldname','surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
84 md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
85 md = checkfield(md,'fieldname','surfaceforcings.precipitations_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
86 md = checkfield(md,'fieldname','surfaceforcings.Tdiff','NaN',1);
87 md = checkfield(md,'fieldname','surfaceforcings.sealev','NaN',1);
88 elseif(obj.ismungsm==1)
89 md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
90 md = checkfield(md,'fieldname','surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
91 md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
92 md = checkfield(md,'fieldname','surfaceforcings.precipitations_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
93 md = checkfield(md,'fieldname','surfaceforcings.Pfac','NaN',1,'size',[2,NaN]);
94 md = checkfield(md,'fieldname','surfaceforcings.Tdiff','NaN',1);
95 md = checkfield(md,'fieldname','surfaceforcings.sealev','NaN',1);
96 end
97 end
98 end % }}}
99 function disp(obj) % {{{
100 disp(sprintf(' surface forcings parameters:'));
101
102 disp(sprintf('\n PDD and deltaO18 parameters:'));
103 fielddisplay(obj,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)');
104 fielddisplay(obj,'ismungsm','is temperature and precipitation mungsm parametrisation activated (0 or 1, default is 0)');
105 fielddisplay(obj,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
106 fielddisplay(obj,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
107 fielddisplay(obj,'s0t','should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]');
108 fielddisplay(obj,'rlaps','present day lapse rate [degree/km]');
109 fielddisplay(obj,'rlapslgm','LGM lapse rate [degree/km]');
110 if(obj.isdelta18o==0 & obj.ismungsm==0)
111 fielddisplay(obj,'monthlytemperatures',['monthly surface temperatures [K], required if pdd is activated and delta18o not activated']);
112 fielddisplay(obj,'precipitation',['monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o or mungsm not activated']);
113 elseif(obj.isdelta18o==1)
114 fielddisplay(obj,'delta18o','delta18o, required if pdd is activated and delta18o activated');
115 fielddisplay(obj,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated');
116 fielddisplay(obj,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');
117 fielddisplay(obj,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');
118 fielddisplay(obj,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
119 fielddisplay(obj,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
120 fielddisplay(obj,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');
121 fielddisplay(obj,'sealev','sea level [m], 1D(year), required if mungsm is activated');
122 elseif(obj.ismungsm==1)
123 fielddisplay(obj,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');
124 fielddisplay(obj,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');
125 fielddisplay(obj,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
126 fielddisplay(obj,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');
127 fielddisplay(obj,'Pfac','time interpolation parameter for precipitation, 1D(year), required if mungsm is activated');
128 fielddisplay(obj,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');
129 fielddisplay(obj,'sealev','sea level [m], 1D(year), required if mungsm is activated');
130 end
131 end % }}}
132 function marshall(obj,md,fid) % {{{
133
134 yts=365.0*24.0*3600.0;
135
136 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBpddEnum(),'format','Integer');
137
138 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean');
139 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','ismungsm','format','Boolean');
140 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','desfac','format','Double');
141 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','s0p','format','Double');
142 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','s0t','format','Double');
143 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','rlaps','format','Double');
144 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','rlapslgm','format','Double');
145
146 if(obj.isdelta18o==0 & obj.ismungsm==0)
147 %WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
148 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
149 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
150 elseif obj.isdelta18o
151 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
152 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1);
153 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
154 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitations_lgm','format','DoubleMat','mattype',1);
155 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','delta18o_surface','format','DoubleMat','mattype',1);
156 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1);
157 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);
158 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);
159 elseif obj.ismungsm
160 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
161 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1);
162 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
163 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitations_lgm','format','DoubleMat','mattype',1);
164 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','Pfac','format','DoubleMat','mattype',1);
165 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);
166 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);
167 end
168 end % }}}
169 end
170end
Note: See TracBrowser for help on using the repository browser.