source: issm/oecreview/Archive/21724-22754/ISSM-22748-22749.diff@ 22755

Last change on this file since 22755 was 22755, checked in by Mathieu Morlighem, 7 years ago

CHG: added 21724-22754

File size: 9.0 KB
RevLine 
[22755]1Index: ../trunk-jpl/test/Archives/Archive470.arch
2===================================================================
3Cannot display: file marked as a binary type.
4svn:mime-type = application/octet-stream
5Index: ../trunk-jpl/src/m/classes/basalforcingspico.m
6===================================================================
7--- ../trunk-jpl/src/m/classes/basalforcingspico.m (revision 22748)
8+++ ../trunk-jpl/src/m/classes/basalforcingspico.m (revision 22749)
9@@ -67,8 +67,8 @@
10 md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0);
11 md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0);
12 md = checkfield(md,'fieldname','basalforcings.gamma_T','numel',1,'NaN',1,'Inf',1,'>',0);
13- md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0);
14- md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0);
15+ md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
16+ md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
17 md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
18 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
19
20Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
21===================================================================
22--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp (revision 22748)
23+++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp (revision 22749)
24@@ -31,12 +31,13 @@
25 void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/
26
27 int numvertices,num_basins,maxbox,basinid;
28- IssmDouble* dmax_basin=NULL;
29+ IssmDouble dist_max;
30+ IssmDouble* dmax_basin_cpu=NULL;
31 IssmDouble* distances=NULL;
32
33 femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
34 femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
35- dmax_basin=xNew<IssmDouble>(num_basins);
36+ dmax_basin_cpu=xNew<IssmDouble>(num_basins);
37
38 femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
39 femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
40@@ -45,8 +46,8 @@
41 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
42
43 /*find maximum distance to grounding line per domain and per basin*/
44- IssmDouble dist_max=-1.;
45- for(int i=0;i<num_basins;i++){dmax_basin[i]=-1;}
46+ IssmDouble maxdist_cpu=-1.;
47+ for(int i=0;i<num_basins;i++){dmax_basin_cpu[i]=-1;}
48 for(int i=0;i<femmodel->elements->Size();i++){
49 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
50 if(!element->IsIceInElement() || !element->IsFloating()) continue;
51@@ -55,12 +56,17 @@
52 element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
53 element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
54 for(int k=0; k<numvertices; k++){
55- if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
56- if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
57+ if(fabs(distances[k])>maxdist_cpu){maxdist_cpu=fabs(distances[k]);}
58+ if(fabs(distances[k])>dmax_basin_cpu[basinid]){dmax_basin_cpu[basinid]=fabs(distances[k]);}
59 }
60 xDelete<IssmDouble>(distances);
61 }
62
63+ /*Synchronize across cpus*/
64+ IssmDouble* dmax_basin=xNew<IssmDouble>(num_basins);
65+ ISSM_MPI_Allreduce((void*)&maxdist_cpu,(void*)&dist_max,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
66+ ISSM_MPI_Allreduce(dmax_basin_cpu,dmax_basin,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
67+
68 /*Define maximum number of boxes per basin*/
69 int* nd=xNew<int>(num_basins);
70 for(int i=0; i<num_basins;i++){
71@@ -96,6 +102,7 @@
72 femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
73
74 IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox);
75+
76 for(int i=0;i<femmodel->elements->Size();i++){
77 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
78 if(!element->IsIceInElement() || !element->IsFloating()) continue;
79@@ -107,7 +114,8 @@
80 /*Synchronize across cpus*/
81 IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
82 ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
83-
84+ if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
85+
86 /*Update parameters to keep track of the new areas in future calculations*/
87 femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoBoxAreaEnum,sumareas,maxbox*num_basins));
88
89Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
90===================================================================
91--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 22748)
92+++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 22749)
93@@ -233,11 +233,11 @@
94 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
95 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
96 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
97- _assert_(M>1 && N>1);
98+ _assert_(M>=1 && N>=1);
99 parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,N,M));
100 xDelete<IssmDouble>(transparam);
101 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
102- _assert_(M>1 && N>1);
103+ _assert_(M>=1 && N>=1);
104 parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,N,M));
105 xDelete<IssmDouble>(transparam);
106 break;
107Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
108===================================================================
109--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 22748)
110+++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 22749)
111@@ -2199,6 +2199,7 @@
112 xDelete<char*>(cost_functions);
113 }
114 }
115+/*}}}*/
116 void Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/
117
118 /*Intermediary*/
119@@ -2892,7 +2893,7 @@
120 IssmDouble dist_gl,dist_cf;
121
122 inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
123- IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id]);
124+ IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id])+1.;
125
126 Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
127 Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);
128@@ -2935,7 +2936,6 @@
129 int basinid, maxbox, num_basins, numnodes, M;
130 IssmDouble gamma_T, overturning_coeff, thickness;
131 IssmDouble pressure, T_star,p_coeff, q_coeff;
132- IssmDouble* boxareas = NULL;
133
134 /*Get variables*/
135 IssmDouble rhoi = this->GetMaterialParameter(MaterialsRhoIceEnum);
136@@ -2957,11 +2957,13 @@
137 this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
138 this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
139 this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
140- this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
141 this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
142 Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
143 _assert_(basinid<=num_basins);
144
145+ IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox);
146+ this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
147+
148 IssmDouble area_boxi = boxareas[basinid*maxbox+boxid];
149 IssmDouble g1 = area_boxi*gamma_T;
150
151Index: ../trunk-jpl/test/NightlyRun/test470.m
152===================================================================
153--- ../trunk-jpl/test/NightlyRun/test470.m (revision 22748)
154+++ ../trunk-jpl/test/NightlyRun/test470.m (revision 22749)
155@@ -45,9 +45,9 @@
156 field_names ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
157 'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
158 'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
159-field_tolerances={1,1,1,1,1,1,1,1,...
160- 1,1,1,1,1,1,1,1,...
161- 1,1,1,1,1,1,1,1};
162+field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
163+ 3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
164+ 1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
165 field_values={...
166 (md.results.TransientSolution(1).Base),...
167 (md.results.TransientSolution(1).Surface),...
Note: See TracBrowser for help on using the repository browser.