tmp
This commit is contained in:
parent
2262b0269a
commit
6ba586004e
@ -42,6 +42,8 @@ typedef void (*gkernel_triangle2d_ptr)(gctl::matrix<double> &out_kernel, const g
|
|||||||
|
|
||||||
void gkernel_triangle2d_vz(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
void gkernel_triangle2d_vz(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
||||||
const gctl::array<gctl::point2dc> &obsp, gctl::verbose_type_e verbose);
|
const gctl::array<gctl::point2dc> &obsp, gctl::verbose_type_e verbose);
|
||||||
|
void gkernel_triangle2d_vx(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
||||||
|
const gctl::array<gctl::point2dc> &obsp, gctl::verbose_type_e verbose);
|
||||||
void gkernel_triangle2d_vzx(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
void gkernel_triangle2d_vzx(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
||||||
const gctl::array<gctl::point2dc> &obsp, gctl::verbose_type_e verbose);
|
const gctl::array<gctl::point2dc> &obsp, gctl::verbose_type_e verbose);
|
||||||
void gkernel_triangle2d_vzz(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
void gkernel_triangle2d_vzz(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
||||||
@ -65,6 +67,9 @@ void gctl::gkernel(matrix<double> &out_kernel, const array<triangle2d> &ele,
|
|||||||
case Vz:
|
case Vz:
|
||||||
triangle_kernel = gkernel_triangle2d_vz;
|
triangle_kernel = gkernel_triangle2d_vz;
|
||||||
break;
|
break;
|
||||||
|
case Vx:
|
||||||
|
triangle_kernel = gkernel_triangle2d_vx;
|
||||||
|
break;
|
||||||
case Tzx:
|
case Tzx:
|
||||||
triangle_kernel = gkernel_triangle2d_vzx;
|
triangle_kernel = gkernel_triangle2d_vzx;
|
||||||
break;
|
break;
|
||||||
@ -92,6 +97,8 @@ typedef void (*gobser_triangle2d_ptr)(gctl::array<double> &out_obs, const gctl::
|
|||||||
|
|
||||||
void gobser_triangle2d_vz(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
void gobser_triangle2d_vz(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
||||||
const gctl::array<gctl::point2dc> &obsp, const gctl::array<double> &rho, gctl::verbose_type_e verbose);
|
const gctl::array<gctl::point2dc> &obsp, const gctl::array<double> &rho, gctl::verbose_type_e verbose);
|
||||||
|
void gobser_triangle2d_vx(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
||||||
|
const gctl::array<gctl::point2dc> &obsp, const gctl::array<double> &rho, gctl::verbose_type_e verbose);
|
||||||
void gobser_triangle2d_vzx(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
void gobser_triangle2d_vzx(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
||||||
const gctl::array<gctl::point2dc> &obsp, const gctl::array<double> &rho, gctl::verbose_type_e verbose);
|
const gctl::array<gctl::point2dc> &obsp, const gctl::array<double> &rho, gctl::verbose_type_e verbose);
|
||||||
void gobser_triangle2d_vzz(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
void gobser_triangle2d_vzz(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
||||||
@ -116,6 +123,9 @@ void gctl::gobser(array<double> &out_obs, const array<triangle2d> &ele, const ar
|
|||||||
case Vz:
|
case Vz:
|
||||||
triangle_obser = gobser_triangle2d_vz;
|
triangle_obser = gobser_triangle2d_vz;
|
||||||
break;
|
break;
|
||||||
|
case Vx:
|
||||||
|
triangle_obser = gobser_triangle2d_vx;
|
||||||
|
break;
|
||||||
case Tzx:
|
case Tzx:
|
||||||
triangle_obser = gobser_triangle2d_vzx;
|
triangle_obser = gobser_triangle2d_vzx;
|
||||||
break;
|
break;
|
||||||
@ -130,6 +140,7 @@ void gctl::gobser(array<double> &out_obs, const array<triangle2d> &ele, const ar
|
|||||||
}
|
}
|
||||||
|
|
||||||
double gkernel_triangle2d_vz_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
double gkernel_triangle2d_vz_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
||||||
|
double gkernel_triangle2d_vx_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
||||||
double gkernel_triangle2d_vzx_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
double gkernel_triangle2d_vzx_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
||||||
double gkernel_triangle2d_vzz_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
double gkernel_triangle2d_vzz_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr);
|
||||||
|
|
||||||
@ -174,7 +185,31 @@ void gkernel_triangle2d_vz(gctl::matrix<double> &out_kernel, const gctl::array<g
|
|||||||
#pragma omp parallel for private (j) schedule(guided)
|
#pragma omp parallel for private (j) schedule(guided)
|
||||||
for (j = 0; j < e_size; j++)
|
for (j = 0; j < e_size; j++)
|
||||||
{
|
{
|
||||||
out_kernel.at(i, j) = gkernel_triangle2d_vz_sig(ele.get(j), obsp.get(i));
|
out_kernel[i][j] = gkernel_triangle2d_vz_sig(ele.get(j), obsp.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gkernel_triangle2d_vx(gctl::matrix<double> &out_kernel, const gctl::array<gctl::triangle2d> &ele,
|
||||||
|
const gctl::array<gctl::point2dc> &obsp, gctl::verbose_type_e verbose)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
int o_size = obsp.size();
|
||||||
|
int e_size = ele.size();
|
||||||
|
|
||||||
|
out_kernel.resize(o_size, e_size);
|
||||||
|
|
||||||
|
gctl::progress_bar bar(o_size, "gkernel_vx");
|
||||||
|
for (i = 0; i < o_size; i++)
|
||||||
|
{
|
||||||
|
if (verbose == gctl::FullMsg) bar.progressed(i);
|
||||||
|
else if (verbose == gctl::ShortMsg) bar.progressed_simple(i);
|
||||||
|
|
||||||
|
#pragma omp parallel for private (j) schedule(guided)
|
||||||
|
for (j = 0; j < e_size; j++)
|
||||||
|
{
|
||||||
|
out_kernel[i][j] = gkernel_triangle2d_vx_sig(ele.get(j), obsp.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -198,7 +233,7 @@ void gkernel_triangle2d_vzx(gctl::matrix<double> &out_kernel, const gctl::array<
|
|||||||
#pragma omp parallel for private (j) schedule(guided)
|
#pragma omp parallel for private (j) schedule(guided)
|
||||||
for (j = 0; j < e_size; j++)
|
for (j = 0; j < e_size; j++)
|
||||||
{
|
{
|
||||||
out_kernel.at(i, j) = gkernel_triangle2d_vzx_sig(ele.get(j), obsp.get(i));
|
out_kernel[i][j] = gkernel_triangle2d_vzx_sig(ele.get(j), obsp.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -222,7 +257,7 @@ void gkernel_triangle2d_vzz(gctl::matrix<double> &out_kernel, const gctl::array<
|
|||||||
#pragma omp parallel for private (j) schedule(guided)
|
#pragma omp parallel for private (j) schedule(guided)
|
||||||
for (j = 0; j < e_size; j++)
|
for (j = 0; j < e_size; j++)
|
||||||
{
|
{
|
||||||
out_kernel.at(i, j) = gkernel_triangle2d_vzz_sig(ele.get(j), obsp.get(i));
|
out_kernel[i][j] = gkernel_triangle2d_vzz_sig(ele.get(j), obsp.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -246,7 +281,31 @@ void gobser_triangle2d_vz(gctl::array<double> &out_obs, const gctl::array<gctl::
|
|||||||
#pragma omp parallel for private (i) schedule(guided)
|
#pragma omp parallel for private (i) schedule(guided)
|
||||||
for (i = 0; i < o_size; i++)
|
for (i = 0; i < o_size; i++)
|
||||||
{
|
{
|
||||||
out_obs.at(i) += gkernel_triangle2d_vz_sig(ele.get(j), obsp.get(i)) * rho[j];
|
out_obs[i] += gkernel_triangle2d_vz_sig(ele.get(j), obsp.get(i)) * rho[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gobser_triangle2d_vx(gctl::array<double> &out_obs, const gctl::array<gctl::triangle2d> &ele,
|
||||||
|
const gctl::array<gctl::point2dc> &obsp, const gctl::array<double> &rho, gctl::verbose_type_e verbose)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
int o_size = obsp.size();
|
||||||
|
int e_size = ele.size();
|
||||||
|
|
||||||
|
out_obs.resize(o_size, 0.0);
|
||||||
|
|
||||||
|
gctl::progress_bar bar(e_size, "gobser_vx");
|
||||||
|
for (j = 0; j < e_size; j++)
|
||||||
|
{
|
||||||
|
if (verbose == gctl::FullMsg) bar.progressed(j);
|
||||||
|
else if (verbose == gctl::ShortMsg) bar.progressed_simple(j);
|
||||||
|
|
||||||
|
#pragma omp parallel for private (i) schedule(guided)
|
||||||
|
for (i = 0; i < o_size; i++)
|
||||||
|
{
|
||||||
|
out_obs[i] += gkernel_triangle2d_vx_sig(ele.get(j), obsp.get(i)) * rho[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -270,7 +329,7 @@ void gobser_triangle2d_vzx(gctl::array<double> &out_obs, const gctl::array<gctl:
|
|||||||
#pragma omp parallel for private (i) schedule(guided)
|
#pragma omp parallel for private (i) schedule(guided)
|
||||||
for (i = 0; i < o_size; i++)
|
for (i = 0; i < o_size; i++)
|
||||||
{
|
{
|
||||||
out_obs.at(i) += gkernel_triangle2d_vzx_sig(ele.get(j), obsp.get(i)) * rho[j];
|
out_obs[i] += gkernel_triangle2d_vzx_sig(ele.get(j), obsp.get(i)) * rho[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -294,7 +353,7 @@ void gobser_triangle2d_vzz(gctl::array<double> &out_obs, const gctl::array<gctl:
|
|||||||
#pragma omp parallel for private (i) schedule(guided)
|
#pragma omp parallel for private (i) schedule(guided)
|
||||||
for (i = 0; i < o_size; i++)
|
for (i = 0; i < o_size; i++)
|
||||||
{
|
{
|
||||||
out_obs.at(i) += gkernel_triangle2d_vzz_sig(ele.get(j), obsp.get(i)) * rho[j];
|
out_obs[i] += gkernel_triangle2d_vzz_sig(ele.get(j), obsp.get(i)) * rho[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -328,6 +387,34 @@ double gkernel_triangle2d_vz_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_p
|
|||||||
return -2.0e+8*GCTL_G0*sum;
|
return -2.0e+8*GCTL_G0*sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double gkernel_triangle2d_vx_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr)
|
||||||
|
{
|
||||||
|
double sum;
|
||||||
|
double A, B, C;
|
||||||
|
double Aa, Ab, Ba, Bb, Ca, Cb;
|
||||||
|
|
||||||
|
sum = 0.0;
|
||||||
|
for (int n = 0; n < 3; n++)
|
||||||
|
{
|
||||||
|
Aa = (ele_ptr->vert[n]->y - op_ptr->y)*(ele_ptr->vert[(n+1)%3]->x - op_ptr->x) -
|
||||||
|
(ele_ptr->vert[(n+1)%3]->y - op_ptr->y)*(ele_ptr->vert[n]->x - op_ptr->x);
|
||||||
|
Ab = pow(ele_ptr->vert[(n+1)%3]->y - ele_ptr->vert[n]->y,2) +
|
||||||
|
pow(ele_ptr->vert[(n+1)%3]->x - ele_ptr->vert[n]->x,2);
|
||||||
|
A = Aa/Ab;
|
||||||
|
|
||||||
|
Ba = atan2(ele_ptr->vert[n]->y - op_ptr->y, ele_ptr->vert[n]->x - op_ptr->x);
|
||||||
|
Bb = atan2(ele_ptr->vert[(n+1)%3]->y - op_ptr->y, ele_ptr->vert[(n+1)%3]->x - op_ptr->x);
|
||||||
|
B = (ele_ptr->vert[(n+1)%3]->y - ele_ptr->vert[n]->y)*(Ba - Bb);
|
||||||
|
|
||||||
|
Ca = pow(ele_ptr->vert[(n+1)%3]->x - op_ptr->x,2) + pow(ele_ptr->vert[(n+1)%3]->y - op_ptr->y,2);
|
||||||
|
Cb = pow(ele_ptr->vert[n]->x - op_ptr->x,2) + pow(ele_ptr->vert[n]->y - op_ptr->y,2);
|
||||||
|
C = 0.5*(ele_ptr->vert[(n+1)%3]->x - ele_ptr->vert[n]->x)*(log(Ca) - log(Cb));
|
||||||
|
|
||||||
|
sum += A*(B+C);
|
||||||
|
}
|
||||||
|
return -2.0e+8*GCTL_G0*sum;
|
||||||
|
}
|
||||||
|
|
||||||
double gkernel_triangle2d_vzx_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr)
|
double gkernel_triangle2d_vzx_sig(gctl::triangle2d *ele_ptr, gctl::point2dc *op_ptr)
|
||||||
{
|
{
|
||||||
double sum;
|
double sum;
|
||||||
|
Loading…
Reference in New Issue
Block a user