19 BL_PROFILE(
"thinbody_wall_dist()");
22 const Real*
dx = geomdata.CellSize();
26 Error(
"Thinbody wall dist calc not implemented for terrain yet");
29 Gpu::DeviceVector<IntVect> xfaces_d(xfaces.size());
30 Gpu::DeviceVector<IntVect> yfaces_d(yfaces.size());
31 Gpu::DeviceVector<IntVect> zfaces_d(zfaces.size());
32 Gpu::copyAsync(Gpu::hostToDevice, xfaces.begin(), xfaces.end(), xfaces_d.begin());
33 Gpu::copyAsync(Gpu::hostToDevice, yfaces.begin(), yfaces.end(), yfaces_d.begin());
34 Gpu::copyAsync(Gpu::hostToDevice, zfaces.begin(), zfaces.end(), zfaces_d.begin());
35 auto const* xfaces_d_ptr = xfaces_d.data();
36 auto const* yfaces_d_ptr = yfaces_d.data();
37 auto const* zfaces_d_ptr = zfaces_d.data();
39 for (MFIter mfi(*wdist); mfi.isValid(); ++mfi) {
40 const Box& bx = mfi.validbox();
43 auto wd_arr = wdist->array(mfi);
46 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
51 for (std::size_t iface=0; iface < xfaces_d_ptr->size(); ++iface) {
52 int ii = xfaces_d_ptr[iface][0];
53 int jj = xfaces_d_ptr[iface][1];
54 int kk = xfaces_d_ptr[iface][2];
62 Real wd2 = wd_arr(i, j, k) * wd_arr(i, j, k);
63 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + (yfc-yr)*(yfc-yr) + (zfc-zr)*(zfc-zr));
64 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y0-yr)*( y0-yr) + (
z0-zr)*(
z0-zr));
65 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y0-yr)*( y0-yr) + ( z1-zr)*( z1-zr));
66 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y1-yr)*( y1-yr) + (
z0-zr)*(
z0-zr));
67 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y1-yr)*( y1-yr) + ( z1-zr)*( z1-zr));
68 wd_arr(i, j, k) = std::sqrt(wd2);
71 for (std::size_t iface=0; iface < yfaces_d_ptr->size(); ++iface) {
72 int ii = yfaces_d_ptr[iface][0];
73 int jj = yfaces_d_ptr[iface][1];
74 int kk = yfaces_d_ptr[iface][2];
82 Real wd2 = wd_arr(i, j, k) * wd_arr(i, j, k);
83 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + (yfc-yr)*(yfc-yr) + (zfc-zr)*(zfc-zr));
84 wd2 = min(wd2, ( x0-xr)*( x0-xr) + (yfc-yr)*(yfc-yr) + (
z0-zr)*(
z0-zr));
85 wd2 = min(wd2, ( x0-xr)*( x0-xr) + (yfc-yr)*(yfc-yr) + ( z1-zr)*( z1-zr));
86 wd2 = min(wd2, ( x1-xr)*( x1-xr) + (yfc-yr)*(yfc-yr) + (
z0-zr)*(
z0-zr));
87 wd2 = min(wd2, ( x1-xr)*( x1-xr) + (yfc-yr)*(yfc-yr) + ( z1-zr)*( z1-zr));
88 wd_arr(i, j, k) = std::sqrt(wd2);
91 for (std::size_t iface=0; iface < zfaces_d_ptr->size(); ++iface) {
92 int ii = zfaces_d_ptr[iface][0];
93 int jj = zfaces_d_ptr[iface][1];
94 int kk = zfaces_d_ptr[iface][2];
102 Real wd2 = wd_arr(i, j, k) * wd_arr(i, j, k);
103 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + (yfc-yr)*(yfc-yr) + (zfc-zr)*(zfc-zr));
104 wd2 = min(wd2, ( x0-xr)*( x0-xr) + ( y0-yr)*( y0-yr) + (zfc-zr)*(zfc-zr));
105 wd2 = min(wd2, ( x0-xr)*( x0-xr) + ( y0-yr)*( y0-yr) + (zfc-zr)*(zfc-zr));
106 wd2 = min(wd2, ( x1-xr)*( x1-xr) + ( y1-yr)*( y1-yr) + (zfc-zr)*(zfc-zr));
107 wd2 = min(wd2, ( x1-xr)*( x1-xr) + ( y1-yr)*( y1-yr) + (zfc-zr)*(zfc-zr));
108 wd_arr(i, j, k) = std::sqrt(wd2);
Real z0
Definition: ERF_InitCustomPertVels_ScalarAdvDiff.H:8
const bool use_terrain
Definition: ERF_InitCustomPertVels_Terrain3DHemisphere.H:26
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
const amrex::Real * prob_lo
Definition: ERF_InitCustomPert_DataAssimilation_ISV.H:16
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const Real *dx=geomdata.CellSize();const Real x=(i+0.5) *dx[0];const Real y=(j+0.5) *dx[1];const Real Omg=erf_vortex_Gaussian(x, y, xc, yc, R, beta, sigma);const Real deltaT=-(gamma - 1.0)/(2.0 *sigma *sigma) *Omg *Omg;const Real rho_norm=std::pow(1.0+deltaT, inv_gm1);const Real T=(1.0+deltaT) *T_inf;const Real p=std::pow(rho_norm, Gamma)/Gamma *rho_0 *a_inf *a_inf;const Real rho_theta=rho_0 *rho_norm *(T *std::pow(p_0/p, rdOcp));state_pert(i, j, k, RhoTheta_comp)=rho_theta - getRhoThetagivenP(p_hse(i, j, k));const Real r2d_xy=std::sqrt((x-xc) *(x-xc)+(y-yc) *(y-yc));state_pert(i, j, k, RhoScalar_comp)=0.25 *(1.0+std::cos(PI *std::min(r2d_xy, R)/R));})
amrex::Real Real
Definition: ERF_ShocInterface.H:19