12 double area,area_1,area_2,area_3;
18 int my_thread = handle->
id;
19 int num_threads = handle->
num;
23 bool debug = gate->
debug;
26 double *x_data = gate->
x_data;
27 double *y_data = gate->
y_data;
28 double *data = gate->
data;
29 double xmin = gate->
xmin;
30 double xmax = gate->
xmax;
31 double ymin = gate->
ymin;
32 double ymax = gate->
ymax;
35 double *x_prime = gate->
x_prime;
36 double *y_prime = gate->
y_prime;
48 if (debug && my_thread==0 && fmod((
double)i,(double)100)==0)
49 _printf_(
"\r interpolation progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<
"% ");
52 if ( (x_data[index_data[3*i+0]-1]<xmin) && (x_data[index_data[3*i+1]-1]<xmin) && (x_data[index_data[3*i+2]-1]<xmin))
continue;
53 if ( (x_data[index_data[3*i+0]-1]>xmax) && (x_data[index_data[3*i+1]-1]>xmax) && (x_data[index_data[3*i+2]-1]>xmax))
continue;
54 if ( (y_data[index_data[3*i+0]-1]<ymin) && (y_data[index_data[3*i+1]-1]<ymin) && (y_data[index_data[3*i+2]-1]<ymin))
continue;
55 if ( (y_data[index_data[3*i+0]-1]>ymax) && (y_data[index_data[3*i+1]-1]>ymax) && (y_data[index_data[3*i+2]-1]>ymax))
continue;
59 area=x_data[index_data[3*i+1]-1]*y_data[index_data[3*i+2]-1]-y_data[index_data[3*i+1]-1]*x_data[index_data[3*i+2]-1]
60 + x_data[index_data[3*i+0]-1]*y_data[index_data[3*i+1]-1]-y_data[index_data[3*i+0]-1]*x_data[index_data[3*i+1]-1]
61 + x_data[index_data[3*i+2]-1]*y_data[index_data[3*i+0]-1]-y_data[index_data[3*i+2]-1]*x_data[index_data[3*i+0]-1];
64 for (j=0;j<nods_prime;j++){
69 area_1=((x_prime[j]-x_data[index_data[3*i+2]-1])*(y_data[index_data[3*i+1]-1]-y_data[index_data[3*i+2]-1])
70 - (y_prime[j]-y_data[index_data[3*i+2]-1])*(x_data[index_data[3*i+1]-1]-x_data[index_data[3*i+2]-1]))/area;
72 area_2=((x_data[index_data[3*i+0]-1]-x_data[index_data[3*i+2]-1])*(y_prime[j]-y_data[index_data[3*i+2]-1])
73 - (y_data[index_data[3*i+0]-1]-y_data[index_data[3*i+2]-1])*(x_prime[j]-x_data[index_data[3*i+2]-1]))/area;
75 area_3=1-area_1-area_2;
78 if (area_1>=0 && area_2>=0 && area_3>=0){
81 if (interpolation_type==1){
83 data_value=area_1*data[index_data[3*i+0]-1]+area_2*data[index_data[3*i+1]-1]+area_3*data[index_data[3*i+2]-1];
89 if (xIsNan<IssmPDouble>(data_value)){
90 if(num_default_values==1) data_value=default_values[0];
91 else data_value=default_values[j];
95 data_prime->SetValue(j,data_value,
INS_VAL);
100 if(debug && my_thread==0)
101 _printf_(
"\r interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<
"% \n");