343 const auto problo_f = geom_fine.ProbLoArray();
344 const auto dx_f = geom_fine.CellSizeArray();
347 amrex::Gpu::DeviceVector<Real> d_rho(data_rho.size());
348 amrex::Gpu::DeviceVector<Real> d_theta(data_theta.size());
349 amrex::Gpu::DeviceVector<Real> d_xvel(data_xvel.size());
350 amrex::Gpu::DeviceVector<Real> d_yvel(data_yvel.size());
351 amrex::Gpu::DeviceVector<Real> d_zvel(data_zvel.size());
354 amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
355 data_rho.begin(), data_rho.end(),
358 amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
359 data_theta.begin(), data_theta.end(),
362 amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
363 data_xvel.begin(), data_xvel.end(),
366 amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
367 data_yvel.begin(), data_yvel.end(),
370 amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
371 data_zvel.begin(), data_zvel.end(),
374 const Real* rho_ptr = d_rho.data();
375 const Real* theta_ptr = d_theta.data();
376 const Real* xvel_ptr = d_xvel.data();
377 const Real* yvel_ptr = d_yvel.data();
378 const Real* zvel_ptr = d_zvel.data();
382 for (MFIter mfi(mf_fine); mfi.isValid(); ++mfi)
384 const Box& bx = mfi.validbox();
385 auto arr = mf_fine.array(mfi);
388 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
391 Real x = problo_f[0] + (i + 0.5) * dx_f[0];
392 Real y = problo_f[1] + (j + 0.5) * dx_f[1];
393 Real z = problo_f[2] + (k + 0.5) * dx_f[2];
400 int ic =
static_cast<int>(floor(rx));
401 int jc =
static_cast<int>(floor(ry));
402 int kc =
static_cast<int>(floor(rz));
409 ic = amrex::max(0, amrex::min(ic, nx-1));
410 jc = amrex::max(0, amrex::min(jc, ny-1));
411 kc = amrex::max(0, amrex::min(kc, nz-1));
416 arr(i,j,k,0) =
interp_trilinear(rho_ptr, ic,jc,kc, tx,ty,tz, nx,ny,nz);
417 arr(i,j,k,1) =
interp_trilinear(theta_ptr, ic,jc,kc, tx,ty,tz, nx,ny,nz);
418 arr(i,j,k,2) =
interp_trilinear(xvel_ptr, ic,jc,kc, tx,ty,tz, nx,ny,nz);
419 arr(i,j,k,3) =
interp_trilinear(yvel_ptr, ic,jc,kc, tx,ty,tz, nx,ny,nz);
420 arr(i,j,k,4) =
interp_trilinear(zvel_ptr, ic,jc,kc, tx,ty,tz, nx,ny,nz);
auto probhi
Definition: ERF_InitCustomPertVels_ABL.H:21
auto problo
Definition: ERF_InitCustomPertVels_ABL.H:20
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real interp_trilinear(const Real *f, int i, int j, int k, Real tx, Real ty, Real tz, int nx, int ny, int nz)
Definition: ERF_InitForEnsemble.cpp:294