source: issm/oecreview/Archive/23390-24306/ISSM-23990-23991.diff@ 24307

Last change on this file since 24307 was 24307, checked in by Mathieu Morlighem, 5 years ago

NEW: adding Archive/23390-24306

File size: 20.7 KB
RevLine 
[24307]1Index: ../trunk-jpl/src/c/classes/FemModel.h
2===================================================================
3--- ../trunk-jpl/src/c/classes/FemModel.h (revision 23990)
4+++ ../trunk-jpl/src/c/classes/FemModel.h (revision 23991)
5@@ -126,6 +126,8 @@
6 void StrainRateeffectivex();
7 void StressIntensityFactorx();
8 void RignotMeltParameterizationx();
9+ void TotalCalvingFluxx(IssmDouble* pFbmb, bool scaled);
10+ void TotalCalvingFluxLevelsetx(IssmDouble* pGbmb, bool scaled);
11 void TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled);
12 void TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled);
13 void TotalSmbx(IssmDouble* pSmb, bool scaled);
14Index: ../trunk-jpl/src/c/classes/FemModel.cpp
15===================================================================
16--- ../trunk-jpl/src/c/classes/FemModel.cpp (revision 23990)
17+++ ../trunk-jpl/src/c/classes/FemModel.cpp (revision 23991)
18@@ -2201,6 +2201,8 @@
19 case MaxVzEnum: this->MaxVzx(&double_result); break;
20 case MaxAbsVzEnum: this->MaxAbsVzx(&double_result); break;
21 case MassFluxEnum: this->MassFluxx(&double_result); break;
22+ case TotalCalvingFluxEnum: this->TotalCalvingFluxx(&double_result,false); break;
23+ case TotalCalvingFluxLevelsetEnum: this->TotalCalvingFluxLevelsetx(&double_result,false); break;
24 case TotalFloatingBmbEnum: this->TotalFloatingBmbx(&double_result,false); break;
25 case TotalFloatingBmbScaledEnum: this->TotalFloatingBmbx(&double_result,true); break;
26 case TotalGroundedBmbEnum: this->TotalGroundedBmbx(&double_result,false); break;
27@@ -2445,6 +2447,8 @@
28 case RheologyBbarAbsGradientEnum: RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
29 case DragCoefficientAbsGradientEnum: DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
30 case BalancethicknessMisfitEnum: BalancethicknessMisfitx(responses); break;
31+ case TotalCalvingFluxEnum: this->TotalCalvingFluxx(responses, false); break;
32+ case TotalCalvingFluxLevelsetEnum: this->TotalCalvingFluxLevelsetx(responses, false); break;
33 case TotalFloatingBmbEnum: this->TotalFloatingBmbx(responses, false); break;
34 case TotalFloatingBmbScaledEnum: this->TotalFloatingBmbx(responses, true); break;
35 case TotalGroundedBmbEnum: this->TotalGroundedBmbx(responses, false); break;
36@@ -2709,6 +2713,38 @@
37 *pdt=min_dt;
38 }
39 /*}}}*/
40+void FemModel::TotalCalvingFluxx(IssmDouble* pM, bool scaled){/*{{{*/
41+
42+ IssmDouble local_calving_flux = 0;
43+ IssmDouble total_calving_flux;
44+
45+ for(int i=0;i<this->elements->Size();i++){
46+ Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
47+ local_calving_flux+=element->TotalCalvingFlux(scaled);
48+ }
49+ ISSM_MPI_Reduce(&local_calving_flux,&total_calving_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
50+ ISSM_MPI_Bcast(&total_calving_flux,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
51+
52+ /*Assign output pointers: */
53+ *pM=total_calving_flux;
54+
55+}/*}}}*/
56+void FemModel::TotalCalvingFluxLevelsetx(IssmDouble* pM, bool scaled){/*{{{*/
57+
58+ IssmDouble local_calving_flux = 0;
59+ IssmDouble total_calving_flux;
60+
61+ for(int i=0;i<this->elements->Size();i++){
62+ Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
63+ local_calving_flux+=element->TotalCalvingFluxLevelset(scaled);
64+ }
65+ ISSM_MPI_Reduce(&local_calving_flux,&total_calving_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
66+ ISSM_MPI_Bcast(&total_calving_flux,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
67+
68+ /*Assign output pointers: */
69+ *pM=total_calving_flux;
70+
71+}/*}}}*/
72 void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled){/*{{{*/
73
74 IssmDouble local_fbmb = 0;
75Index: ../trunk-jpl/src/c/classes/Elements/Element.h
76===================================================================
77--- ../trunk-jpl/src/c/classes/Elements/Element.h (revision 23990)
78+++ ../trunk-jpl/src/c/classes/Elements/Element.h (revision 23991)
79@@ -319,6 +319,8 @@
80 virtual IssmDouble SurfaceArea(void)=0;
81 virtual int TensorInterpolation()=0;
82 virtual IssmDouble TimeAdapt()=0;
83+ virtual IssmDouble TotalCalvingFlux(bool scaled){_error_("not implemented");};
84+ virtual IssmDouble TotalCalvingFluxLevelset(bool scaled){_error_("not implemented");};
85 virtual IssmDouble TotalFloatingBmb(bool scaled)=0;
86 virtual IssmDouble TotalGroundedBmb(bool scaled)=0;
87 virtual IssmDouble TotalSmb(bool scaled)=0;
88Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
89===================================================================
90--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 23990)
91+++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 23991)
92@@ -4059,6 +4059,191 @@
93 return dt;
94 }
95 /*}}}*/
96+IssmDouble Tria::TotalCalvingFlux(bool scaled){/*{{{*/
97+
98+ /*Make sure there is an ice front here*/
99+ if(!IsIceInElement() || !IsIcefront()) return 0;
100+
101+ /*Scaled not implemented yet...*/
102+ _assert_(!scaled);
103+
104+ /*Get domain type*/
105+ int domaintype;
106+ parameters->FindParam(&domaintype,DomainTypeEnum);
107+
108+ /*Get ice front coordinates*/
109+ IssmDouble *xyz_list = NULL;
110+ IssmDouble* xyz_front = NULL;
111+ this->GetVerticesCoordinates(&xyz_list);
112+ this->GetIcefrontCoordinates(&xyz_front,xyz_list,MaskIceLevelsetEnum);
113+
114+ /*Get normal vector*/
115+ IssmDouble normal[3];
116+ this->NormalSection(&normal[0],xyz_front);
117+ //normal[0] = -normal[0];
118+ //normal[1] = -normal[1];
119+
120+ /*Get inputs*/
121+ IssmDouble flux = 0.;
122+ IssmDouble calvingratex,calvingratey,thickness,Jdet;
123+ IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
124+ Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
125+ Input* calvingratex_input=NULL;
126+ Input* calvingratey_input=NULL;
127+ if(domaintype==Domain2DhorizontalEnum){
128+ calvingratex_input=inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
129+ calvingratey_input=inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
130+ }
131+ else{
132+ calvingratex_input=inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
133+ calvingratey_input=inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
134+ }
135+
136+ /*Start looping on Gaussian points*/
137+ Gauss* gauss=this->NewGauss(xyz_list,xyz_front,3);
138+ for(int ig=gauss->begin();ig<gauss->end();ig++){
139+
140+ gauss->GaussPoint(ig);
141+ thickness_input->GetInputValue(&thickness,gauss);
142+ calvingratex_input->GetInputValue(&calvingratex,gauss);
143+ calvingratey_input->GetInputValue(&calvingratey,gauss);
144+ this->JacobianDeterminantSurface(&Jdet,xyz_front,gauss);
145+
146+ flux += rho_ice*Jdet*gauss->weight*thickness*(calvingratex*normal[0] + calvingratey*normal[1]);
147+ }
148+
149+ return flux;
150+}
151+/*}}}*/
152+IssmDouble Tria::TotalCalvingFluxLevelset(bool scaled){/*{{{*/
153+
154+ /*Make sure there is an ice front here*/
155+ if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)) return 0;
156+
157+ /*Scaled not implemented yet...*/
158+ _assert_(!scaled);
159+
160+ int domaintype,index1,index2;
161+ const IssmPDouble epsilon = 1.e-15;
162+ IssmDouble s1,s2;
163+ IssmDouble gl[NUMVERTICES];
164+ IssmDouble xyz_front[2][3];
165+
166+
167+ IssmDouble *xyz_list = NULL;
168+ this->GetVerticesCoordinates(&xyz_list);
169+
170+ /*Recover parameters and values*/
171+ parameters->FindParam(&domaintype,DomainTypeEnum);
172+ GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);
173+
174+ /*Be sure that values are not zero*/
175+ if(gl[0]==0.) gl[0]=gl[0]+epsilon;
176+ if(gl[1]==0.) gl[1]=gl[1]+epsilon;
177+ if(gl[2]==0.) gl[2]=gl[2]+epsilon;
178+
179+ if(domaintype==Domain2DverticalEnum){
180+ _error_("not implemented");
181+ }
182+ else if(domaintype==Domain2DhorizontalEnum || domaintype==Domain3DEnum || domaintype==Domain3DsurfaceEnum){
183+ int pt1 = 0;
184+ int pt2 = 1;
185+ if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
186+
187+ /*Portion of the segments*/
188+ s1=gl[2]/(gl[2]-gl[1]);
189+ s2=gl[2]/(gl[2]-gl[0]);
190+ if(gl[2]<0.){
191+ pt1 = 1; pt2 = 0;
192+ }
193+ xyz_front[pt2][0]=xyz_list[3*2+0]+s1*(xyz_list[3*1+0]-xyz_list[3*2+0]);
194+ xyz_front[pt2][1]=xyz_list[3*2+1]+s1*(xyz_list[3*1+1]-xyz_list[3*2+1]);
195+ xyz_front[pt2][2]=xyz_list[3*2+2]+s1*(xyz_list[3*1+2]-xyz_list[3*2+2]);
196+ xyz_front[pt1][0]=xyz_list[3*2+0]+s2*(xyz_list[3*0+0]-xyz_list[3*2+0]);
197+ xyz_front[pt1][1]=xyz_list[3*2+1]+s2*(xyz_list[3*0+1]-xyz_list[3*2+1]);
198+ xyz_front[pt1][2]=xyz_list[3*2+2]+s2*(xyz_list[3*0+2]-xyz_list[3*2+2]);
199+ }
200+ else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
201+
202+ /*Portion of the segments*/
203+ s1=gl[0]/(gl[0]-gl[1]);
204+ s2=gl[0]/(gl[0]-gl[2]);
205+ if(gl[0]<0.){
206+ pt1 = 1; pt2 = 0;
207+ }
208+
209+ xyz_front[pt1][0]=xyz_list[3*0+0]+s1*(xyz_list[3*1+0]-xyz_list[3*0+0]);
210+ xyz_front[pt1][1]=xyz_list[3*0+1]+s1*(xyz_list[3*1+1]-xyz_list[3*0+1]);
211+ xyz_front[pt1][2]=xyz_list[3*0+2]+s1*(xyz_list[3*1+2]-xyz_list[3*0+2]);
212+ xyz_front[pt2][0]=xyz_list[3*0+0]+s2*(xyz_list[3*2+0]-xyz_list[3*0+0]);
213+ xyz_front[pt2][1]=xyz_list[3*0+1]+s2*(xyz_list[3*2+1]-xyz_list[3*0+1]);
214+ xyz_front[pt2][2]=xyz_list[3*0+2]+s2*(xyz_list[3*2+2]-xyz_list[3*0+2]);
215+ }
216+ else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
217+
218+ /*Portion of the segments*/
219+ s1=gl[1]/(gl[1]-gl[0]);
220+ s2=gl[1]/(gl[1]-gl[2]);
221+ if(gl[1]<0.){
222+ pt1 = 1; pt2 = 0;
223+ }
224+
225+ xyz_front[pt2][0]=xyz_list[3*1+0]+s1*(xyz_list[3*0+0]-xyz_list[3*1+0]);
226+ xyz_front[pt2][1]=xyz_list[3*1+1]+s1*(xyz_list[3*0+1]-xyz_list[3*1+1]);
227+ xyz_front[pt2][2]=xyz_list[3*1+2]+s1*(xyz_list[3*0+2]-xyz_list[3*1+2]);
228+ xyz_front[pt1][0]=xyz_list[3*1+0]+s2*(xyz_list[3*2+0]-xyz_list[3*1+0]);
229+ xyz_front[pt1][1]=xyz_list[3*1+1]+s2*(xyz_list[3*2+1]-xyz_list[3*1+1]);
230+ xyz_front[pt1][2]=xyz_list[3*1+2]+s2*(xyz_list[3*2+2]-xyz_list[3*1+2]);
231+ }
232+ else{
233+ _error_("case not possible");
234+ }
235+
236+ }
237+ else _error_("mesh type "<<EnumToStringx(domaintype)<<"not supported yet ");
238+
239+ /*Some checks in debugging mode*/
240+ _assert_(s1>=0 && s1<=1.);
241+ _assert_(s2>=0 && s2<=1.);
242+
243+ /*Get normal vector*/
244+ IssmDouble normal[3];
245+ this->NormalSection(&normal[0],&xyz_front[0][0]);
246+ normal[0] = -normal[0];
247+ normal[1] = -normal[1];
248+
249+ /*Get inputs*/
250+ IssmDouble flux = 0.;
251+ IssmDouble calvingratex,calvingratey,thickness,Jdet;
252+ IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
253+ Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
254+ Input* calvingratex_input=NULL;
255+ Input* calvingratey_input=NULL;
256+ if(domaintype==Domain2DhorizontalEnum){
257+ calvingratex_input=inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
258+ calvingratey_input=inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
259+ }
260+ else{
261+ calvingratex_input=inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
262+ calvingratey_input=inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
263+ }
264+
265+ /*Start looping on Gaussian points*/
266+ Gauss* gauss=this->NewGauss(xyz_list,&xyz_front[0][0],3);
267+ for(int ig=gauss->begin();ig<gauss->end();ig++){
268+
269+ gauss->GaussPoint(ig);
270+ thickness_input->GetInputValue(&thickness,gauss);
271+ calvingratex_input->GetInputValue(&calvingratex,gauss);
272+ calvingratey_input->GetInputValue(&calvingratey,gauss);
273+ this->JacobianDeterminantSurface(&Jdet,&xyz_front[0][0],gauss);
274+
275+ flux += rho_ice*Jdet*gauss->weight*thickness*(calvingratex*normal[0] + calvingratey*normal[1]);
276+ }
277+
278+ return flux;
279+}
280+/*}}}*/
281 IssmDouble Tria::TotalFloatingBmb(bool scaled){/*{{{*/
282
283 /*The fbmb[kg yr-1] of one element is area[m2] * melting_rate [kg m^-2 yr^-1]*/
284Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
285===================================================================
286--- ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 23990)
287+++ ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 23991)
288@@ -136,6 +136,8 @@
289 IssmDouble SurfaceArea(void);
290 int TensorInterpolation();
291 IssmDouble TimeAdapt();
292+ IssmDouble TotalCalvingFlux(bool scaled);
293+ IssmDouble TotalCalvingFluxLevelset(bool scaled);
294 IssmDouble TotalFloatingBmb(bool scaled);
295 IssmDouble TotalGroundedBmb(bool scaled);
296 IssmDouble TotalSmb(bool scaled);
297Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
298===================================================================
299--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 23990)
300+++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 23991)
301@@ -144,7 +144,6 @@
302 FrictionThresholdSpeedEnum,
303 FrictionVoidRatioEnum,
304 FrontalForcingsBasinIcefrontAreaEnum,
305- FrontalForcingsBasinIdEnum,
306 FrontalForcingsNumberofBasinsEnum,
307 FrontalForcingsParamEnum,
308 GiaCrossSectionShapeEnum,
309@@ -531,6 +530,7 @@
310 FrictionTillFrictionAngleEnum,
311 FrictionWaterLayerEnum,
312 FrictionfEnum,
313+ FrontalForcingsBasinIdEnum,
314 FrontalForcingsSubglacialDischargeEnum,
315 FrontalForcingsThermalForcingEnum,
316 GeometryHydrostaticRatioEnum,
317@@ -1207,6 +1207,8 @@
318 ThermalAnalysisEnum,
319 ThermalSolutionEnum,
320 ThicknessErrorEstimatorEnum,
321+ TotalCalvingFluxEnum,
322+ TotalCalvingFluxLevelsetEnum,
323 TotalFloatingBmbEnum,
324 TotalFloatingBmbScaledEnum,
325 TotalGroundedBmbEnum,
326Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
327===================================================================
328--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 23990)
329+++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 23991)
330@@ -152,7 +152,6 @@
331 case FrictionThresholdSpeedEnum : return "FrictionThresholdSpeed";
332 case FrictionVoidRatioEnum : return "FrictionVoidRatio";
333 case FrontalForcingsBasinIcefrontAreaEnum : return "FrontalForcingsBasinIcefrontArea";
334- case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId";
335 case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins";
336 case FrontalForcingsParamEnum : return "FrontalForcingsParam";
337 case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
338@@ -537,6 +536,7 @@
339 case FrictionTillFrictionAngleEnum : return "FrictionTillFrictionAngle";
340 case FrictionWaterLayerEnum : return "FrictionWaterLayer";
341 case FrictionfEnum : return "Frictionf";
342+ case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId";
343 case FrontalForcingsSubglacialDischargeEnum : return "FrontalForcingsSubglacialDischarge";
344 case FrontalForcingsThermalForcingEnum : return "FrontalForcingsThermalForcing";
345 case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
346@@ -1211,6 +1211,8 @@
347 case ThermalAnalysisEnum : return "ThermalAnalysis";
348 case ThermalSolutionEnum : return "ThermalSolution";
349 case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
350+ case TotalCalvingFluxEnum : return "TotalCalvingFlux";
351+ case TotalCalvingFluxLevelsetEnum : return "TotalCalvingFluxLevelset";
352 case TotalFloatingBmbEnum : return "TotalFloatingBmb";
353 case TotalFloatingBmbScaledEnum : return "TotalFloatingBmbScaled";
354 case TotalGroundedBmbEnum : return "TotalGroundedBmb";
355Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
356===================================================================
357--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 23990)
358+++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 23991)
359@@ -155,7 +155,6 @@
360 else if (strcmp(name,"FrictionThresholdSpeed")==0) return FrictionThresholdSpeedEnum;
361 else if (strcmp(name,"FrictionVoidRatio")==0) return FrictionVoidRatioEnum;
362 else if (strcmp(name,"FrontalForcingsBasinIcefrontArea")==0) return FrontalForcingsBasinIcefrontAreaEnum;
363- else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum;
364 else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum;
365 else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum;
366 else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
367@@ -259,11 +258,11 @@
368 else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
369 else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
370 else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
371+ else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
372 else stage=3;
373 }
374 if(stage==3){
375- if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
376- else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
377+ if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
378 else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
379 else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
380 else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
381@@ -382,11 +381,11 @@
382 else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum;
383 else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum;
384 else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
385+ else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
386 else stage=4;
387 }
388 if(stage==4){
389- if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
390- else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
391+ if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
392 else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
393 else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum;
394 else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum;
395@@ -505,11 +504,11 @@
396 else if (strcmp(name,"DistanceToGroundingline")==0) return DistanceToGroundinglineEnum;
397 else if (strcmp(name,"Domain2Dhorizontal")==0) return Domain2DhorizontalEnum;
398 else if (strcmp(name,"Domain2Dvertical")==0) return Domain2DverticalEnum;
399+ else if (strcmp(name,"Domain3D")==0) return Domain3DEnum;
400 else stage=5;
401 }
402 if(stage==5){
403- if (strcmp(name,"Domain3D")==0) return Domain3DEnum;
404- else if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
405+ if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
406 else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum;
407 else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum;
408 else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
409@@ -549,6 +548,7 @@
410 else if (strcmp(name,"FrictionTillFrictionAngle")==0) return FrictionTillFrictionAngleEnum;
411 else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
412 else if (strcmp(name,"Frictionf")==0) return FrictionfEnum;
413+ else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum;
414 else if (strcmp(name,"FrontalForcingsSubglacialDischarge")==0) return FrontalForcingsSubglacialDischargeEnum;
415 else if (strcmp(name,"FrontalForcingsThermalForcing")==0) return FrontalForcingsThermalForcingEnum;
416 else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
417@@ -1238,15 +1238,17 @@
418 else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
419 else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
420 else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
421+ else if (strcmp(name,"TotalCalvingFlux")==0) return TotalCalvingFluxEnum;
422+ else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
423 else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
424 else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
425 else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
426- else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
427- else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
428 else stage=11;
429 }
430 if(stage==11){
431- if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
432+ if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
433+ else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
434+ else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
435 else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
436 else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
437 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
Note: See TracBrowser for help on using the repository browser.