source: issm/oecreview/Archive/16554-17801/ISSM-17077-17078.diff

Last change on this file was 17802, checked in by Mathieu Morlighem, 11 years ago

Added archives

File size: 37.0 KB
RevLine 
[17802]1Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
2===================================================================
3--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp (revision 17077)
4+++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp (revision 17078)
5@@ -89,6 +89,25 @@
6 case SMBEnum:
7 iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
8 break;
9+ case SMBpddEnum:
10+ iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
11+ iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
12+ if(isdelta18o){
13+ iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesLgmEnum);
14+ iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
15+ iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
16+ }
17+ else{
18+ iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
19+ iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
20+ }
21+ break;
22+ case SMBgradientsEnum:
23+ iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
24+ iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
25+ iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
26+ iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
27+ break;
28 case SurfaceforcingsEnum: /*To Be REMOVED*/
29 iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
30 iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
31Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
32===================================================================
33--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 17077)
34+++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 17078)
35@@ -280,7 +280,7 @@
36 SurfaceforcingsEnum,
37 SMBEnum,
38 SurfaceforcingsMassBalanceEnum,
39-
40+ SMBpddEnum,
41 SurfaceforcingsDelta18oEnum,
42 SurfaceforcingsDelta18oSurfaceEnum,
43 SurfaceforcingsIsdelta18oEnum,
44@@ -288,15 +288,18 @@
45 SurfaceforcingsTemperaturesPresentdayEnum,
46 SurfaceforcingsTemperaturesLgmEnum,
47 SurfaceforcingsPrecipitationEnum,
48- SurfaceforcingsIspddEnum,
49 SurfaceforcingsDesfacEnum,
50 SurfaceforcingsS0pEnum,
51- SurfaceforcingsIssmbgradientsEnum,
52+ SMBgradientsEnum,
53 SurfaceforcingsMonthlytemperaturesEnum,
54 SurfaceforcingsHrefEnum,
55 SurfaceforcingsSmbrefEnum,
56 SurfaceforcingsBPosEnum,
57 SurfaceforcingsBNegEnum,
58+ SMBlapserate,
59+ /*TO BE REMOVED*/
60+ SurfaceforcingsIspddEnum,
61+ SurfaceforcingsIssmbgradientsEnum,
62 /*}}}*/
63 /*Solutions and Analyses{{{ */
64 SolutionTypeEnum,
65Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
66===================================================================
67--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 17077)
68+++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 17078)
69@@ -284,6 +284,7 @@
70 case SurfaceforcingsEnum : return "Surfaceforcings";
71 case SMBEnum : return "SMB";
72 case SurfaceforcingsMassBalanceEnum : return "SurfaceforcingsMassBalance";
73+ case SMBpddEnum : return "SMBpdd";
74 case SurfaceforcingsDelta18oEnum : return "SurfaceforcingsDelta18o";
75 case SurfaceforcingsDelta18oSurfaceEnum : return "SurfaceforcingsDelta18oSurface";
76 case SurfaceforcingsIsdelta18oEnum : return "SurfaceforcingsIsdelta18o";
77@@ -291,15 +292,16 @@
78 case SurfaceforcingsTemperaturesPresentdayEnum : return "SurfaceforcingsTemperaturesPresentday";
79 case SurfaceforcingsTemperaturesLgmEnum : return "SurfaceforcingsTemperaturesLgm";
80 case SurfaceforcingsPrecipitationEnum : return "SurfaceforcingsPrecipitation";
81- case SurfaceforcingsIspddEnum : return "SurfaceforcingsIspdd";
82 case SurfaceforcingsDesfacEnum : return "SurfaceforcingsDesfac";
83 case SurfaceforcingsS0pEnum : return "SurfaceforcingsS0p";
84- case SurfaceforcingsIssmbgradientsEnum : return "SurfaceforcingsIssmbgradients";
85+ case SMBgradientsEnum : return "SMBgradients";
86 case SurfaceforcingsMonthlytemperaturesEnum : return "SurfaceforcingsMonthlytemperatures";
87 case SurfaceforcingsHrefEnum : return "SurfaceforcingsHref";
88 case SurfaceforcingsSmbrefEnum : return "SurfaceforcingsSmbref";
89 case SurfaceforcingsBPosEnum : return "SurfaceforcingsBPos";
90 case SurfaceforcingsBNegEnum : return "SurfaceforcingsBNeg";
91+ case SurfaceforcingsIspddEnum : return "SurfaceforcingsIspdd";
92+ case SurfaceforcingsIssmbgradientsEnum : return "SurfaceforcingsIssmbgradients";
93 case SolutionTypeEnum : return "SolutionType";
94 case AnalysisTypeEnum : return "AnalysisType";
95 case ConfigurationTypeEnum : return "ConfigurationType";
96Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
97===================================================================
98--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 17077)
99+++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 17078)
100@@ -290,6 +290,7 @@
101 else if (strcmp(name,"Surfaceforcings")==0) return SurfaceforcingsEnum;
102 else if (strcmp(name,"SMB")==0) return SMBEnum;
103 else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
104+ else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
105 else if (strcmp(name,"SurfaceforcingsDelta18o")==0) return SurfaceforcingsDelta18oEnum;
106 else if (strcmp(name,"SurfaceforcingsDelta18oSurface")==0) return SurfaceforcingsDelta18oSurfaceEnum;
107 else if (strcmp(name,"SurfaceforcingsIsdelta18o")==0) return SurfaceforcingsIsdelta18oEnum;
108@@ -297,15 +298,16 @@
109 else if (strcmp(name,"SurfaceforcingsTemperaturesPresentday")==0) return SurfaceforcingsTemperaturesPresentdayEnum;
110 else if (strcmp(name,"SurfaceforcingsTemperaturesLgm")==0) return SurfaceforcingsTemperaturesLgmEnum;
111 else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
112- else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
113 else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
114 else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
115- else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
116+ else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
117 else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
118 else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
119 else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
120 else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
121 else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
122+ else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
123+ else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
124 else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
125 else if (strcmp(name,"AnalysisType")==0) return AnalysisTypeEnum;
126 else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
127@@ -380,14 +382,14 @@
128 else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum;
129 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
130 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
131- else if (strcmp(name,"Contour")==0) return ContourEnum;
132+ else stage=4;
133+ }
134+ if(stage==4){
135+ if (strcmp(name,"Contour")==0) return ContourEnum;
136 else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
137 else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
138 else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
139- else stage=4;
140- }
141- if(stage==4){
142- if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
143+ else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
144 else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
145 else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
146 else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
147@@ -503,14 +505,14 @@
148 else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
149 else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
150 else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
151- else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
152+ else stage=5;
153+ }
154+ if(stage==5){
155+ if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
156 else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
157 else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
158 else if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
159- else stage=5;
160- }
161- if(stage==5){
162- if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
163+ else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
164 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
165 else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
166 else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
167@@ -626,14 +628,14 @@
168 else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
169 else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
170 else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
171- else if (strcmp(name,"XY")==0) return XYEnum;
172+ else stage=6;
173+ }
174+ if(stage==6){
175+ if (strcmp(name,"XY")==0) return XYEnum;
176 else if (strcmp(name,"XYZ")==0) return XYZEnum;
177 else if (strcmp(name,"Dense")==0) return DenseEnum;
178 else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
179- else stage=6;
180- }
181- if(stage==6){
182- if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
183+ else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
184 else if (strcmp(name,"Seq")==0) return SeqEnum;
185 else if (strcmp(name,"Mpi")==0) return MpiEnum;
186 else if (strcmp(name,"Mumps")==0) return MumpsEnum;
187Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
188===================================================================
189--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 17077)
190+++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 17078)
191@@ -90,6 +90,30 @@
192 case SMBEnum:
193 /*Nothing to add to parameters*/
194 break;
195+ case SMBpddEnum:
196+ parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
197+ parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsDesfacEnum));
198+ parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsS0pEnum));
199+ iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
200+ if(isdelta18o){
201+ IssmDouble *temp = NULL;
202+ IssmDouble yts;
203+ int N,M;
204+ iomodel->Constant(&yts,ConstantsYtsEnum);
205+ iomodel->FetchData(&temp,&N,&M,SurfaceforcingsDelta18oEnum); _assert_(N==2);
206+ for(i=0;i<M;i++) temp[M+i]=yts*temp[M+i];
207+ parameters->AddObject(new TransientParam(SurfaceforcingsDelta18oEnum,&temp[0],&temp[M],M));
208+ iomodel->DeleteData(temp,SurfaceforcingsDelta18oEnum);
209+
210+ iomodel->FetchData(&temp,&N,&M,SurfaceforcingsDelta18oSurfaceEnum); _assert_(N==2);
211+ for(i=0;i<M;i++) temp[M+i]=yts*temp[M+i];
212+ parameters->AddObject(new TransientParam(SurfaceforcingsDelta18oSurfaceEnum,&temp[0],&temp[M],M));
213+ iomodel->DeleteData(temp,SurfaceforcingsDelta18oSurfaceEnum);
214+ }
215+ break;
216+ case SMBgradientsEnum:
217+ /*Nothing to add to parameters*/
218+ break;
219 case SurfaceforcingsEnum: /*To Be REMOVED*/
220 parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIspddEnum));
221 parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
222Index: ../trunk-jpl/src/c/cores/transient_core.cpp
223===================================================================
224--- ../trunk-jpl/src/c/cores/transient_core.cpp (revision 17077)
225+++ ../trunk-jpl/src/c/cores/transient_core.cpp (revision 17078)
226@@ -21,11 +21,11 @@
227 /*parameters: */
228 int i;
229 IssmDouble starttime,finaltime,dt,yts;
230- bool isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isdelta18o,isgia,islevelset;
231+ bool isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isgia,islevelset;
232 bool save_results,dakota_analysis;
233 bool time_adapt=false;
234 int output_frequency;
235- int meshtype,groundingline_migration;
236+ int meshtype,groundingline_migration,smb_model;
237 int numoutputs = 0;
238 Analysis *analysis = NULL;
239 char** requested_outputs = NULL;
240@@ -53,7 +53,6 @@
241 if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
242 femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
243 if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
244- femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
245
246 /*initialize: */
247 step=0;
248@@ -169,10 +168,6 @@
249 /*unload results*/
250 if(VerboseSolution()) _printf0_(" computing requested outputs\n");
251 femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs,save_results);
252- if(isdelta18o){
253- int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
254- femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2,save_results);
255- }
256 if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
257 int outputs[1] = {MaskGroundediceLevelsetEnum};
258 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1,save_results);
259Index: ../trunk-jpl/src/c/cores/masstransport_core.cpp
260===================================================================
261--- ../trunk-jpl/src/c/cores/masstransport_core.cpp (revision 17077)
262+++ ../trunk-jpl/src/c/cores/masstransport_core.cpp (revision 17078)
263@@ -44,6 +44,19 @@
264 case SMBEnum:
265 /*Nothing to be done*/
266 break;
267+ case SMBpddEnum:
268+ femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
269+ if(isdelta18o){
270+ if(VerboseSolution()) _printf0_(" call Delta18oParametrization module\n");
271+ Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
272+ }
273+ if(VerboseSolution()) _printf0_(" call positive degree day module\n");
274+ PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
275+ break;
276+ case SMBgradientsEnum:
277+ if(VerboseSolution())_printf_(" call smb gradients module\n\n");
278+ SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
279+ break;
280 case SurfaceforcingsEnum: /*To Be REMOVED*/
281 femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
282 femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
283Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
284===================================================================
285--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp (revision 17077)
286+++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp (revision 17078)
287@@ -46,6 +46,13 @@
288 case SMBEnum:
289 /*Nothing to add*/
290 break;
291+ case SMBpddEnum:
292+ iomodel->Constant(&this->desfac,SurfaceforcingsDesfacEnum);
293+ iomodel->Constant(&this->s0p,SurfaceforcingsS0pEnum);
294+ break;
295+ case SMBgradientsEnum:
296+ /*Nothing to add*/
297+ break;
298 case SurfaceforcingsEnum: /*To Be REMOVED*/
299 iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
300 if(ispdd){
301Index: ../trunk-jpl/src/m/classes/SMBpdd.py
302===================================================================
303--- ../trunk-jpl/src/m/classes/SMBpdd.py (revision 0)
304+++ ../trunk-jpl/src/m/classes/SMBpdd.py (revision 17078)
305@@ -0,0 +1,97 @@
306+from fielddisplay import fielddisplay
307+from EnumDefinitions import *
308+from checkfield import *
309+from WriteData import *
310+
311+class SMBpdd(object):
312+ """
313+ SMBpdd Class definition
314+
315+ Usage:
316+ SMBpdd=SMBpdd();
317+ """
318+
319+ def __init__(self): # {{{
320+ self.precipitation = float('NaN')
321+ self.monthlytemperatures = float('NaN')
322+ self.desfac = 0.
323+ self.s0p = 0.
324+ self.isdelta18o = 0
325+ self.delta18o = float('NaN')
326+ self.delta18o_surface = float('NaN')
327+ self.temperatures_presentday = float('NaN')
328+ self.temperatures_lgm = float('NaN')
329+ self.precipitations_presentday = float('NaN')
330+
331+ #set defaults
332+ self.setdefaultparameters()
333+ #}}}
334+ def __repr__(self): # {{{
335+ string=" surface forcings parameters:"
336+
337+ string="%s\n%s"%(string,fielddisplay(self,'precipitation','surface precipitation [m/yr water eq]'))
338+ string="%s\n%s"%(string,fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]'))
339+ string="%s\n%s"%(string,fielddisplay(self,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)'))
340+ string="%s\n%s"%(string,fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'))
341+ string="%s\n%s"%(string,fielddisplay(self,'monthlytemperatures','monthly surface temperatures [K], required if pdd is activated and delta18o not activated'))
342+ string="%s\n%s"%(string,fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if pdd is activated and delta18o activated'))
343+ string="%s\n%s"%(string,fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if pdd is activated and delta18o activated'))
344+ string="%s\n%s"%(string,fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o activated'))
345+ string="%s\n%s"%(string,fielddisplay(self,'delta18o','delta18o, required if pdd is activated and delta18o activated'))
346+ string="%s\n%s"%(string,fielddisplay(self,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated'))
347+
348+ return string
349+ #}}}
350+ def initialize(self,md): # {{{
351+
352+ if numpy.all(numpy.isnan(self.precipitation)):
353+ self.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
354+ print " no SMBpdd.precipitation specified: values set as zero"
355+
356+ return self
357+ #}}}
358+ def setdefaultparameters(self): # {{{
359+
360+ #pdd method not used in default mode
361+ self.isdelta18o = 0
362+ self.desfac = 0.5
363+ self.s0p = 0.
364+
365+ return self
366+ #}}}
367+ def checkconsistency(self,md,solution,analyses): # {{{
368+
369+ if MasstransportAnalysisEnum() in analyses:
370+ md = checkfield(md,'fieldname','surfaceforcings.desfac','<=',1,'numel',[1]);
371+ md = checkfield(md,'fieldname','surfaceforcings.s0p','>=',0,'numel',[1]);
372+ if not self.isdelta18o:
373+ md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','forcing',1,'NaN',1)
374+ md = checkfield(md,'fieldname','surfaceforcings.precipitation','forcing',1,'NaN',1)
375+ else:
376+ md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1)
377+ md = checkfield(md,'fieldname','surfaceforcings.delta18o_surface','NaN',1)
378+ md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1)
379+ md = checkfield(md,'fieldname','surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1,12],'NaN',1)
380+ md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1)
381+
382+ return md
383+ # }}}
384+ def marshall(self,md,fid): # {{{
385+
386+ yts=365.0*24.0*3600.0
387+
388+ WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBpddEnum(),'format','Integer');
389+
390+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
391+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean')
392+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','desfac','format','Double');
393+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0p','format','Double');
394+ if self.isdelta18o:
395+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1)
396+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1)
397+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1)
398+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o_surface','format','DoubleMat','mattype',1)
399+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1)
400+ else:
401+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
402+ # }}}
403Index: ../trunk-jpl/src/m/classes/SMBpdd.m
404===================================================================
405--- ../trunk-jpl/src/m/classes/SMBpdd.m (revision 0)
406+++ ../trunk-jpl/src/m/classes/SMBpdd.m (revision 17078)
407@@ -0,0 +1,96 @@
408+%SMBpdd Class definition
409+%
410+% Usage:
411+% SMBpdd=SMBpdd();
412+
413+classdef SMBpdd
414+ properties (SetAccess=public)
415+ precipitation = NaN;
416+ monthlytemperatures = NaN;
417+ desfac = 0.5;
418+ s0p = 0;
419+ isdelta18o = 0;
420+ delta18o = NaN;
421+ delta18o_surface = NaN;
422+ temperatures_presentday = NaN;
423+ temperatures_lgm = NaN;
424+ precipitations_presentday = NaN;
425+ end
426+ methods
427+ function obj = SMBpdd(varargin) % {{{
428+ switch nargin
429+ case 0
430+ obj=setdefaultparameters(obj);
431+ otherwise
432+ error('constructor not supported');
433+ end
434+ end % }}}
435+ function self = initialize(self,md) % {{{
436+
437+ if isnan(self.precipitation),
438+ self.precipitation=zeros(md.mesh.numberofvertices,1);
439+ disp(' no SMBpdd.precipitation specified: values set as zero');
440+ end
441+
442+ end % }}}
443+ function obj = setdefaultparameters(obj) % {{{
444+
445+ obj.isdelta18o = 0;
446+ obj.desfac = 0.5;
447+ obj.s0p = 0;
448+ end % }}}
449+ function md = checkconsistency(obj,md,solution,analyses) % {{{
450+
451+ if ismember(MasstransportAnalysisEnum(),analyses),
452+ md = checkfield(md,'fieldname','surfaceforcings.desfac','<=',1,'numel',1);
453+ md = checkfield(md,'fieldname','surfaceforcings.s0p','>=',0,'numel',1);
454+ if(obj.isdelta18o==0)
455+ md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','forcing',1,'NaN',1);
456+ md = checkfield(md,'fieldname','surfaceforcings.precipitation','forcing',1,'NaN',1);
457+ else
458+ md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1);
459+ md = checkfield(md,'fieldname','surfaceforcings.delta18o_surface','NaN',1);
460+ md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
461+ md = checkfield(md,'fieldname','surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
462+ md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
463+ end
464+ end
465+ end % }}}
466+ function disp(obj) % {{{
467+ disp(sprintf(' surface forcings parameters:'));
468+
469+ disp(sprintf('\n PDD and deltaO18 parameters:'));
470+ fielddisplay(obj,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)');
471+ fielddisplay(obj,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
472+ fielddisplay(obj,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
473+ fielddisplay(obj,'monthlytemperatures','monthly surface temperatures [K], required if pdd is activated and delta18o not activated');
474+ fielddisplay(obj,'precipitation','surface precipitation [m/yr water eq]');
475+ fielddisplay(obj,'temperatures_presentday','monthly present day surface temperatures [K], required if pdd is activated and delta18o activated');
476+ fielddisplay(obj,'temperatures_lgm','monthly LGM surface temperatures [K], required if pdd is activated and delta18o activated');
477+ fielddisplay(obj,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o activated');
478+ fielddisplay(obj,'delta18o','delta18o, required if pdd is activated and delta18o activated');
479+ fielddisplay(obj,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated');
480+
481+ end % }}}
482+ function marshall(obj,md,fid) % {{{
483+
484+ yts=365.0*24.0*3600.0;
485+
486+ WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBpddEnum(),'format','Integer');
487+
488+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
489+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','desfac','format','Double');
490+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','s0p','format','Double');
491+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean');
492+ if obj.isdelta18o
493+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
494+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1);
495+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
496+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','delta18o_surface','format','DoubleMat','mattype',1);
497+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1);
498+ else
499+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
500+ end
501+ end % }}}
502+ end
503+end
504Index: ../trunk-jpl/src/m/classes/SMBgradients.m
505===================================================================
506--- ../trunk-jpl/src/m/classes/SMBgradients.m (revision 0)
507+++ ../trunk-jpl/src/m/classes/SMBgradients.m (revision 17078)
508@@ -0,0 +1,63 @@
509+%SMBgradients Class definition
510+%
511+% Usage:
512+% SMBgradients=SMBgradients();
513+
514+classdef SMBgradients
515+ properties (SetAccess=public)
516+ href = NaN;
517+ smbref = NaN;
518+ b_pos = NaN;
519+ b_neg = NaN;
520+ end
521+ methods
522+ function obj = SMBgradients(varargin) % {{{
523+ switch nargin
524+ case 0
525+ obj=setdefaultparameters(obj);
526+ otherwise
527+ error('constructor not supported');
528+ end
529+ end % }}}
530+ function self = initialize(self,md) % {{{
531+
532+ %Nothing done for now
533+
534+ end % }}}
535+ function obj = setdefaultparameters(obj) % {{{
536+
537+ %Nothing for now
538+
539+ end % }}}
540+ function md = checkconsistency(obj,md,solution,analyses) % {{{
541+
542+ if ismember(MasstransportAnalysisEnum(),analyses),
543+ md = checkfield(md,'fieldname','surfaceforcings.href','forcing',1,'NaN',1);
544+ md = checkfield(md,'fieldname','surfaceforcings.smbref','forcing',1,'NaN',1);
545+ md = checkfield(md,'fieldname','surfaceforcings.b_pos','forcing',1,'NaN',1);
546+ md = checkfield(md,'fieldname','surfaceforcings.b_neg','forcing',1,'NaN',1);
547+ end
548+ end % }}}
549+ function disp(obj) % {{{
550+ disp(sprintf(' surface forcings parameters:'));
551+
552+ disp(sprintf('\n SMB gradients parameters:'));
553+ fielddisplay(obj,'href',' reference elevation from which deviation is used to calculate SMB adjustment in smb gradients method');
554+ fielddisplay(obj,'smbref',' reference smb from which deviation is calculated in smb gradients method');
555+ fielddisplay(obj,'b_pos',' slope of hs - smb regression line for accumulation regime required if smb gradients is activated');
556+ fielddisplay(obj,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated');
557+
558+ end % }}}
559+ function marshall(obj,md,fid) % {{{
560+
561+ yts=365.0*24.0*3600.0;
562+
563+ WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBgradientsEnum(),'format','Integer');
564+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','href','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
565+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
566+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
567+ WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
568+
569+ end % }}}
570+ end
571+end
572Index: ../trunk-jpl/src/m/classes/model.py
573===================================================================
574--- ../trunk-jpl/src/m/classes/model.py (revision 17077)
575+++ ../trunk-jpl/src/m/classes/model.py (revision 17078)
576@@ -8,6 +8,8 @@
577 from constants import constants
578 from surfaceforcings import surfaceforcings
579 from SMB import SMB
580+from SMBpdd import SMBpdd
581+from SMBgradients import SMBgradients
582 from basalforcings import basalforcings
583 from matice import matice
584 from damage import damage
585Index: ../trunk-jpl/src/m/classes/SMBgradients.py
586===================================================================
587--- ../trunk-jpl/src/m/classes/SMBgradients.py (revision 0)
588+++ ../trunk-jpl/src/m/classes/SMBgradients.py (revision 17078)
589@@ -0,0 +1,56 @@
590+from fielddisplay import fielddisplay
591+from EnumDefinitions import *
592+from checkfield import *
593+from WriteData import *
594+
595+class SMBgradients(object):
596+ """
597+ SMBgradients Class definition
598+
599+ Usage:
600+ SMBgradients=SMBgradients();
601+ """
602+
603+ def __init__(self): # {{{
604+ self.href = float('NaN')
605+ self.smbref = float('NaN')
606+ self.b_pos = float('NaN')
607+ self.b_neg = float('NaN')
608+ #}}}
609+ def __repr__(self): # {{{
610+ string=" surface forcings parameters:"
611+
612+ string="%s\n%s"%(string,fielddisplay(self,'issmbgradients','is smb gradients method activated (0 or 1, default is 0)'))
613+ string="%s\n%s"%(string,fielddisplay(self,'href',' reference elevation from which deviation is used to calculate SMB adjustment in smb gradients method'))
614+ string="%s\n%s"%(string,fielddisplay(self,'smbref',' reference smb from which deviation is calculated in smb gradients method'))
615+ string="%s\n%s"%(string,fielddisplay(self,'b_pos',' slope of hs - smb regression line for accumulation regime required if smb gradients is activated'))
616+ string="%s\n%s"%(string,fielddisplay(self,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated'))
617+
618+ return string
619+ #}}}
620+ def initialize(self,md): # {{{
621+
622+ #Nothing for now
623+
624+ return self
625+ #}}}
626+ def checkconsistency(self,md,solution,analyses): # {{{
627+
628+ if MasstransportAnalysisEnum() in analyses:
629+ md = checkfield(md,'fieldname','surfaceforcings.href','forcing',1,'NaN',1)
630+ md = checkfield(md,'fieldname','surfaceforcings.smbref','forcing',1,'NaN',1)
631+ md = checkfield(md,'fieldname','surfaceforcings.b_pos','forcing',1,'NaN',1)
632+ md = checkfield(md,'fieldname','surfaceforcings.b_neg','forcing',1,'NaN',1)
633+
634+ return md
635+ # }}}
636+ def marshall(self,md,fid): # {{{
637+
638+ yts=365.0*24.0*3600.0
639+
640+ WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBgradientsEnum(),'format','Integer');
641+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','href','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
642+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
643+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
644+ WriteData(fid,'object',self,'class','surfaceforcings','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
645+ # }}}
646Index: ../trunk-jpl/src/m/enum/SMBpddEnum.m
647===================================================================
648--- ../trunk-jpl/src/m/enum/SMBpddEnum.m (revision 0)
649+++ ../trunk-jpl/src/m/enum/SMBpddEnum.m (revision 17078)
650@@ -0,0 +1,11 @@
651+function macro=SMBpddEnum()
652+%SMBPDDENUM - Enum of SMBpdd
653+%
654+% WARNING: DO NOT MODIFY THIS FILE
655+% this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
656+% Please read src/c/shared/Enum/README for more information
657+%
658+% Usage:
659+% macro=SMBpddEnum()
660+
661+macro=StringToEnum('SMBpdd');
662Index: ../trunk-jpl/src/m/enum/SMBgradientsEnum.m
663===================================================================
664--- ../trunk-jpl/src/m/enum/SMBgradientsEnum.m (revision 0)
665+++ ../trunk-jpl/src/m/enum/SMBgradientsEnum.m (revision 17078)
666@@ -0,0 +1,11 @@
667+function macro=SMBgradientsEnum()
668+%SMBGRADIENTSENUM - Enum of SMBgradients
669+%
670+% WARNING: DO NOT MODIFY THIS FILE
671+% this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
672+% Please read src/c/shared/Enum/README for more information
673+%
674+% Usage:
675+% macro=SMBgradientsEnum()
676+
677+macro=StringToEnum('SMBgradients');
678Index: ../trunk-jpl/src/m/enum/LevelsetAnalysisEnum.m
679===================================================================
680--- ../trunk-jpl/src/m/enum/LevelsetAnalysisEnum.m (revision 0)
681+++ ../trunk-jpl/src/m/enum/LevelsetAnalysisEnum.m (revision 17078)
682@@ -0,0 +1,11 @@
683+function macro=LevelsetAnalysisEnum()
684+%LEVELSETANALYSISENUM - Enum of LevelsetAnalysis
685+%
686+% WARNING: DO NOT MODIFY THIS FILE
687+% this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
688+% Please read src/c/shared/Enum/README for more information
689+%
690+% Usage:
691+% macro=LevelsetAnalysisEnum()
692+
693+macro=StringToEnum('LevelsetAnalysis');
694Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
695===================================================================
696--- ../trunk-jpl/src/m/enum/EnumDefinitions.py (revision 17077)
697+++ ../trunk-jpl/src/m/enum/EnumDefinitions.py (revision 17078)
698@@ -276,6 +276,7 @@
699 def SurfaceforcingsEnum(): return StringToEnum("Surfaceforcings")[0]
700 def SMBEnum(): return StringToEnum("SMB")[0]
701 def SurfaceforcingsMassBalanceEnum(): return StringToEnum("SurfaceforcingsMassBalance")[0]
702+def SMBpddEnum(): return StringToEnum("SMBpdd")[0]
703 def SurfaceforcingsDelta18oEnum(): return StringToEnum("SurfaceforcingsDelta18o")[0]
704 def SurfaceforcingsDelta18oSurfaceEnum(): return StringToEnum("SurfaceforcingsDelta18oSurface")[0]
705 def SurfaceforcingsIsdelta18oEnum(): return StringToEnum("SurfaceforcingsIsdelta18o")[0]
706@@ -283,15 +284,16 @@
707 def SurfaceforcingsTemperaturesPresentdayEnum(): return StringToEnum("SurfaceforcingsTemperaturesPresentday")[0]
708 def SurfaceforcingsTemperaturesLgmEnum(): return StringToEnum("SurfaceforcingsTemperaturesLgm")[0]
709 def SurfaceforcingsPrecipitationEnum(): return StringToEnum("SurfaceforcingsPrecipitation")[0]
710-def SurfaceforcingsIspddEnum(): return StringToEnum("SurfaceforcingsIspdd")[0]
711 def SurfaceforcingsDesfacEnum(): return StringToEnum("SurfaceforcingsDesfac")[0]
712 def SurfaceforcingsS0pEnum(): return StringToEnum("SurfaceforcingsS0p")[0]
713-def SurfaceforcingsIssmbgradientsEnum(): return StringToEnum("SurfaceforcingsIssmbgradients")[0]
714+def SMBgradientsEnum(): return StringToEnum("SMBgradients")[0]
715 def SurfaceforcingsMonthlytemperaturesEnum(): return StringToEnum("SurfaceforcingsMonthlytemperatures")[0]
716 def SurfaceforcingsHrefEnum(): return StringToEnum("SurfaceforcingsHref")[0]
717 def SurfaceforcingsSmbrefEnum(): return StringToEnum("SurfaceforcingsSmbref")[0]
718 def SurfaceforcingsBPosEnum(): return StringToEnum("SurfaceforcingsBPos")[0]
719 def SurfaceforcingsBNegEnum(): return StringToEnum("SurfaceforcingsBNeg")[0]
720+def SurfaceforcingsIspddEnum(): return StringToEnum("SurfaceforcingsIspdd")[0]
721+def SurfaceforcingsIssmbgradientsEnum(): return StringToEnum("SurfaceforcingsIssmbgradients")[0]
722 def SolutionTypeEnum(): return StringToEnum("SolutionType")[0]
723 def AnalysisTypeEnum(): return StringToEnum("AnalysisType")[0]
724 def ConfigurationTypeEnum(): return StringToEnum("ConfigurationType")[0]
725Index: ../trunk-jpl/src/m/enum/TransientIslevelsetEnum.m
726===================================================================
727--- ../trunk-jpl/src/m/enum/TransientIslevelsetEnum.m (revision 0)
728+++ ../trunk-jpl/src/m/enum/TransientIslevelsetEnum.m (revision 17078)
729@@ -0,0 +1,11 @@
730+function macro=TransientIslevelsetEnum()
731+%TRANSIENTISLEVELSETENUM - Enum of TransientIslevelset
732+%
733+% WARNING: DO NOT MODIFY THIS FILE
734+% this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
735+% Please read src/c/shared/Enum/README for more information
736+%
737+% Usage:
738+% macro=TransientIslevelsetEnum()
739+
740+macro=StringToEnum('TransientIslevelset');
Note: See TracBrowser for help on using the repository browser.