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();
38 const auto n_xfaces = xfaces_d.size();
39 const auto n_yfaces = yfaces_d.size();
40 const auto n_zfaces = zfaces_d.size();
42 for (MFIter mfi(*wdist); mfi.isValid(); ++mfi) {
43 const Box& bx = mfi.validbox();
46 auto wd_arr = wdist->array(mfi);
49 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
54 for (std::size_t iface=0; iface < n_xfaces; ++iface) {
55 int ii = xfaces_d_ptr[iface][0];
56 int jj = xfaces_d_ptr[iface][1];
57 int kk = xfaces_d_ptr[iface][2];
65 Real wd2 = wd_arr(i, j, k) * wd_arr(i, j, k);
66 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + (yfc-yr)*(yfc-yr) + (zfc-zr)*(zfc-zr));
67 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y0-yr)*( y0-yr) + (
z0-zr)*(
z0-zr));
68 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y0-yr)*( y0-yr) + ( z1-zr)*( z1-zr));
69 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y1-yr)*( y1-yr) + (
z0-zr)*(
z0-zr));
70 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + ( y1-yr)*( y1-yr) + ( z1-zr)*( z1-zr));
71 wd_arr(i, j, k) = std::sqrt(wd2);
74 for (std::size_t iface=0; iface < n_yfaces; ++iface) {
75 int ii = yfaces_d_ptr[iface][0];
76 int jj = yfaces_d_ptr[iface][1];
77 int kk = yfaces_d_ptr[iface][2];
85 Real wd2 = wd_arr(i, j, k) * wd_arr(i, j, k);
86 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + (yfc-yr)*(yfc-yr) + (zfc-zr)*(zfc-zr));
87 wd2 = min(wd2, ( x0-xr)*( x0-xr) + (yfc-yr)*(yfc-yr) + (
z0-zr)*(
z0-zr));
88 wd2 = min(wd2, ( x0-xr)*( x0-xr) + (yfc-yr)*(yfc-yr) + ( z1-zr)*( z1-zr));
89 wd2 = min(wd2, ( x1-xr)*( x1-xr) + (yfc-yr)*(yfc-yr) + (
z0-zr)*(
z0-zr));
90 wd2 = min(wd2, ( x1-xr)*( x1-xr) + (yfc-yr)*(yfc-yr) + ( z1-zr)*( z1-zr));
91 wd_arr(i, j, k) = std::sqrt(wd2);
94 for (std::size_t iface=0; iface < n_zfaces; ++iface) {
95 int ii = zfaces_d_ptr[iface][0];
96 int jj = zfaces_d_ptr[iface][1];
97 int kk = zfaces_d_ptr[iface][2];
105 Real wd2 = wd_arr(i, j, k) * wd_arr(i, j, k);
106 wd2 = min(wd2, (xfc-xr)*(xfc-xr) + (yfc-yr)*(yfc-yr) + (zfc-zr)*(zfc-zr));
107 wd2 = min(wd2, ( x0-xr)*( x0-xr) + ( y0-yr)*( y0-yr) + (zfc-zr)*(zfc-zr));
108 wd2 = min(wd2, ( x0-xr)*( x0-xr) + ( y1-yr)*( y1-yr) + (zfc-zr)*(zfc-zr));
109 wd2 = min(wd2, ( x1-xr)*( x1-xr) + ( y1-yr)*( y1-yr) + (zfc-zr)*(zfc-zr));
110 wd2 = min(wd2, ( x1-xr)*( x1-xr) + ( y0-yr)*( y0-yr) + (zfc-zr)*(zfc-zr));
111 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:44
const GpuArray< Real, AMREX_SPACEDIM > prob_lo
Definition: ERF_InitCustomPert_CloudChamber.H:33
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19