18 double *predictions = NULL;
23 double dmindata,dmaxdata;
31 double start_core, finish_core;
32 double start_init, finish_init;
40 options->
Get(&radius,
"searchradius",0.);
42 options->
Get(&dmindata,
"mindata",1.); mindata=int(dmindata);
43 options->
Get(&dmaxdata,
"maxdata",50.); maxdata=int(dmaxdata);
47 observations=
new Observations(obs_list,obs_x,obs_y,obs_length,options);
51 predictions =xNewZeroInit<double>(n_interp);
52 error =xNewZeroInit<double>(n_interp);
55 options->
Get(&output,
"output",(
char*)
"prediction");
58 if(strcmp(output,
"quadtree")==0){
61 else if(strcmp(output,
"variomap")==0){
62 observations->
Variomap(predictions,x_interp,n_interp);
64 else if(strcmp(output,
"prediction")==0){
70 for(
int idx=my_rank;idx<n_interp;idx+=num_procs){
71 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<
double(idx)/
double(n_interp)*100.<<
"% \n");
72 observations->
InterpolationKriging(&predictions[idx],&error[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,variogram);
74 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<
"% \n");
76 double *sumpredictions =xNew<double>(n_interp);
77 double *sumerror =xNew<double>(n_interp);
80 xDelete<double>(error); error=sumerror;
81 xDelete<double>(predictions); predictions=sumpredictions;
83 else if(strcmp(output,
"v4")==0){
86 for(
int idx=my_rank;idx<n_interp;idx+=num_procs){
87 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<
double(idx)/
double(n_interp)*100.<<
"% \n");
88 observations->
InterpolationV4(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata);
90 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<
"% \n");
92 double *sumpredictions =xNew<double>(n_interp);
94 xDelete<double>(predictions); predictions=sumpredictions;
96 else if(strcmp(output,
"nearestneighbor")==0){
99 for(
int idx=my_rank;idx<n_interp;idx+=num_procs){
100 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<
double(idx)/
double(n_interp)*100.<<
"% \n");
103 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<
"% \n");
105 double *sumpredictions =xNew<double>(n_interp);
107 xDelete<double>(predictions); predictions=sumpredictions;
109 else if(strcmp(output,
"distance")==0){
112 for(
int idx=my_rank;idx<n_interp;idx+=num_procs){
113 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<
double(idx)/
double(n_interp)*100.<<
"% \n");
114 observations->
Distances(&predictions[idx],&x_interp[idx],&y_interp[idx],1,radius);
116 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<
"% \n");
118 double *sumpredictions =xNew<double>(n_interp);
120 xDelete<double>(predictions); predictions=sumpredictions;
122 else if(strcmp(output,
"idw")==0){
124 options->
Get(&power,
"power",2.);
127 for(
int idx=my_rank;idx<n_interp;idx+=num_procs){
128 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<
double(idx)/
double(n_interp)*100.<<
"% \n");
129 observations->
InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
131 _printf0_(
" interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<
"% \n");
133 double *sumpredictions =xNew<double>(n_interp);
135 xDelete<double>(predictions); predictions=sumpredictions;
138 _error_(
"output '" << output <<
"' not supported yet");
145 xDelete<char>(output);
146 *ppredictions = predictions;
150 _printf0_(
"\n " << setw(34) << left <<
"Observation fitering elapsed time: " << finish_init-start_init <<
" seconds \n\n");
151 _printf0_(
" " << setw(34) << left <<
"Kriging prediction elapsed time: " << finish_core-start_core <<
" seconds \n\n");
152 _printf0_(
"\n " <<
"Total elapsed time " <<
int((finish-start)/3600) <<
" hrs " <<
int(
int(finish-start)%3600/60) <<
" min " <<
int(finish-start)%60 <<
" sec\n\n\n");