6 #include "../InputDuplicatex/InputDuplicatex.h"
7 #include "../../shared/shared.h"
8 #include "../../toolkits/toolkits.h"
19 IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices);
21 xDelete<IssmDouble>(values);
28 for(
int i=0;i<maxbox;i++){
40 int numvertices,num_basins,maxbox,basinid;
46 IssmDouble* dmax_basin_cpu=xNew<IssmDouble>(num_basins);
56 for(
int i=0;i<num_basins;i++){dmax_basin_cpu[i]=-1;}
61 distances=xNew<IssmDouble>(numvertices);
64 for(
int k=0; k<numvertices; k++){
65 if(fabs(distances[k])>maxdist_cpu){maxdist_cpu=fabs(distances[k]);}
66 if(fabs(distances[k])>dmax_basin_cpu[basinid]){dmax_basin_cpu[basinid]=fabs(distances[k]);}
68 xDelete<IssmDouble>(distances);
72 IssmDouble* dmax_basin=xNew<IssmDouble>(num_basins);
77 int* nd=xNew<int>(num_basins);
78 for(
int i=0; i<num_basins;i++){
79 IssmDouble val=sqrt(dmax_basin[i]/dist_max)*(maxbox-1);
82 _error_(
"Check the implementation of floor below");
84 int k=0;
while(k<val+.5){k++;}
88 nd[i]= reCast<int>(floor(val));
100 xDelete<IssmDouble>(dmax_basin);
101 xDelete<IssmDouble>(dmax_basin_cpu);
106 int num_basins,maxbox,basinid,boxid,domaintype;
112 IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox);
127 IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
135 xDelete<IssmDouble>(boxareas);
136 xDelete<IssmDouble>(sumareas);
147 int num_basins, basinid, maxbox, M, domaintype;
155 IssmDouble* toc_weighted_avg = xNewZeroInit<IssmDouble>(num_basins);
156 IssmDouble* soc_weighted_avg = xNewZeroInit<IssmDouble>(num_basins);
157 IssmDouble* toc_sumweightedavg = xNewZeroInit<IssmDouble>(num_basins);
158 IssmDouble* soc_sumweightedavg = xNewZeroInit<IssmDouble>(num_basins);
159 IssmDouble* overturning_sumweightedavg = xNewZeroInit<IssmDouble>(num_basins);
169 if(el_boxid!=boxid)
continue;
180 toc_weighted_avg[basinid]+=toc*area;
181 soc_weighted_avg[basinid]+=soc*area;
190 for(
int k=0;k<num_basins;k++){
191 int p=k*maxbox+boxid;
192 if(boxareas[p]==0)
continue;
193 toc_sumweightedavg[k] = toc_sumweightedavg[k]/boxareas[p];
194 soc_sumweightedavg[k] = soc_sumweightedavg[k]/boxareas[p];
202 overturning_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
210 if(el_boxid!=boxid)
continue;
219 overturning_weighted_avg[basinid]+=overturning*area;
227 for(
int k=0;k<num_basins;k++){
228 int p=k*maxbox+boxid;
229 if(boxareas[p]==0.)
continue;
230 overturning_sumweightedavg[k] = overturning_sumweightedavg[k]/boxareas[p];
236 xDelete<IssmDouble>(overturning_sumweightedavg);
237 xDelete<IssmDouble>(toc_sumweightedavg);
238 xDelete<IssmDouble>(soc_sumweightedavg);
239 xDelete<IssmDouble>(overturning_weighted_avg);
240 xDelete<IssmDouble>(toc_weighted_avg);
241 xDelete<IssmDouble>(soc_weighted_avg);
242 xDelete<IssmDouble>(boxareas);