separation-of-potential-data/src/cal_g_kernel.cpp
2022-02-08 17:29:12 +08:00

46 lines
3.9 KiB
C++

#include "sgm_esl.h"
#include "progressBar.h"
void SGM_ESL::CalGKernel(){
int i, j;
double x1,x2,y1,y2,z1,z2;
double R222,R122,R212,R112,R221,R121,R211,R111;
double G222,G122,G212,G112,G221,G121,G211,G111;
GM_kernel_.resize(obs_points_num_);
for (i = 0; i < obs_points_num_; i++){
GM_kernel_[i].resize(mod_blocks_num_,0.0);
}
ProgressBar *bar = new ProgressBar(obs_points_num_,"Calculating GMKernel");
for (i = 0; i < obs_points_num_; i++){
bar->Progressed(i);
#pragma omp parallel for private(j,x1,x2,y1,y2,z1,z2,R222,R122,R212,R112,R221,R121,R211,R111,G222,G122,G212,G112,G221,G121,G211,G111) shared(i) schedule(guided)
for (j = 0; j < mod_blocks_num_; j++){
x1 = mod_blocks_[j].xmin; x2 = mod_blocks_[j].xmax;
y1 = mod_blocks_[j].ymin; y2 = mod_blocks_[j].ymax;
z1 = mod_blocks_[j].zmin; z2 = mod_blocks_[j].zmax;
R222=sqrt((x2- obs_points_[i].x)*(x2- obs_points_[i].x)+(y2- obs_points_[i].y)*(y2- obs_points_[i].y)+(z2- obs_points_[i].z)*(z2- obs_points_[i].z));
R122=sqrt((x1- obs_points_[i].x)*(x1- obs_points_[i].x)+(y2- obs_points_[i].y)*(y2- obs_points_[i].y)+(z2- obs_points_[i].z)*(z2- obs_points_[i].z));
R212=sqrt((x2- obs_points_[i].x)*(x2- obs_points_[i].x)+(y1- obs_points_[i].y)*(y1- obs_points_[i].y)+(z2- obs_points_[i].z)*(z2- obs_points_[i].z));
R112=sqrt((x1- obs_points_[i].x)*(x1- obs_points_[i].x)+(y1- obs_points_[i].y)*(y1- obs_points_[i].y)+(z2- obs_points_[i].z)*(z2- obs_points_[i].z));
R221=sqrt((x2- obs_points_[i].x)*(x2- obs_points_[i].x)+(y2- obs_points_[i].y)*(y2- obs_points_[i].y)+(z1- obs_points_[i].z)*(z1- obs_points_[i].z));
R121=sqrt((x1- obs_points_[i].x)*(x1- obs_points_[i].x)+(y2- obs_points_[i].y)*(y2- obs_points_[i].y)+(z1- obs_points_[i].z)*(z1- obs_points_[i].z));
R211=sqrt((x2- obs_points_[i].x)*(x2- obs_points_[i].x)+(y1- obs_points_[i].y)*(y1- obs_points_[i].y)+(z1- obs_points_[i].z)*(z1- obs_points_[i].z));
R111=sqrt((x1- obs_points_[i].x)*(x1- obs_points_[i].x)+(y1- obs_points_[i].y)*(y1- obs_points_[i].y)+(z1- obs_points_[i].z)*(z1- obs_points_[i].z));
G222=(x2- obs_points_[i].x)*log((y2- obs_points_[i].y)+R222)+(y2- obs_points_[i].y)*log((x2- obs_points_[i].x)+R222)+(z2- obs_points_[i].z)*arctg((z2- obs_points_[i].z)*R222/(x2- obs_points_[i].x)/(y2- obs_points_[i].y));
G122=(x1- obs_points_[i].x)*log((y2- obs_points_[i].y)+R122)+(y2- obs_points_[i].y)*log((x1- obs_points_[i].x)+R122)+(z2- obs_points_[i].z)*arctg((z2- obs_points_[i].z)*R122/(x1- obs_points_[i].x)/(y2- obs_points_[i].y));
G212=(x2- obs_points_[i].x)*log((y1- obs_points_[i].y)+R212)+(y1- obs_points_[i].y)*log((x2- obs_points_[i].x)+R212)+(z2- obs_points_[i].z)*arctg((z2- obs_points_[i].z)*R212/(x2- obs_points_[i].x)/(y1- obs_points_[i].y));
G112=(x1- obs_points_[i].x)*log((y1- obs_points_[i].y)+R112)+(y1- obs_points_[i].y)*log((x1- obs_points_[i].x)+R112)+(z2- obs_points_[i].z)*arctg((z2- obs_points_[i].z)*R112/(x1- obs_points_[i].x)/(y1- obs_points_[i].y));
G221=(x2- obs_points_[i].x)*log((y2- obs_points_[i].y)+R221)+(y2- obs_points_[i].y)*log((x2- obs_points_[i].x)+R221)+(z1- obs_points_[i].z)*arctg((z1- obs_points_[i].z)*R221/(x2- obs_points_[i].x)/(y2- obs_points_[i].y));
G121=(x1- obs_points_[i].x)*log((y2- obs_points_[i].y)+R121)+(y2- obs_points_[i].y)*log((x1- obs_points_[i].x)+R121)+(z1- obs_points_[i].z)*arctg((z1- obs_points_[i].z)*R121/(x1- obs_points_[i].x)/(y2- obs_points_[i].y));
G211=(x2- obs_points_[i].x)*log((y1- obs_points_[i].y)+R211)+(y1- obs_points_[i].y)*log((x2- obs_points_[i].x)+R211)+(z1- obs_points_[i].z)*arctg((z1- obs_points_[i].z)*R211/(x2- obs_points_[i].x)/(y1- obs_points_[i].y));
G111=(x1- obs_points_[i].x)*log((y1- obs_points_[i].y)+R111)+(y1- obs_points_[i].y)*log((x1- obs_points_[i].x)+R111)+(z1- obs_points_[i].z)*arctg((z1- obs_points_[i].z)*R111/(x1- obs_points_[i].x)/(y1- obs_points_[i].y));
GM_kernel_[i][j] = -1.0*G0*(G222-G122-G212+G112-G221+G121+G211-G111);
}
}
return;
}