558 const amrex::BoxArray m_pb_ba =
pb_ba[lev];
561 m_pb_mag[boxIdx] =
zero;
562 m_pb_dir[boxIdx] =
zero;
568 amrex::Vector<amrex::Real> avg_h(n_avg,
zero);
569 amrex::Gpu::DeviceVector<amrex::Real> avg_d(n_avg,
zero);
573 for (amrex::MFIter mfi(mf_cons,
TileNoZ()); mfi.isValid(); ++mfi) {
576 const amrex::Box& vbx = mfi.validbox();
579 auto ixtype_u = mf_xvel.boxArray().ixType();
580 amrex::Box vbx_u = amrex::convert(vbx,ixtype_u);
581 amrex::Box pbx_u = amrex::convert(m_pb_ba[boxIdx], ixtype_u);
582 amrex::Box ubx_u = pbx_u & vbx_u;
585 auto ixtype_v = mf_yvel.boxArray().ixType();
586 amrex::Box vbx_v = amrex::convert(vbx,ixtype_v);
587 amrex::Box pbx_v = amrex::convert(m_pb_ba[boxIdx], ixtype_v);
588 amrex::Box ubx_v = pbx_v & vbx_v;
592 const amrex::Array4<const amrex::Real>& xvel_arry = mf_xvel.const_array(mfi);
594 #ifdef USE_VOLUME_AVERAGE
596 ParallelFor(amrex::Gpu::KernelInfo().setReduction(
true), ubx_u, [=]
597 AMREX_GPU_DEVICE(
int i,
int j,
int k, amrex::Gpu::Handler
const& handler) noexcept {
598 amrex::Gpu::deviceReduceSum(&avg[0], xvel_arry(i,j,k)*norm, handler);
602 #ifdef USE_SLAB_AVERAGE
603 amrex::Box ubxSlab_lo = makeSlab(ubx_u,2,ubx_u.smallEnd(2));
604 amrex::Box ubxSlab_hi = makeSlab(ubx_u,2,ubx_u.bigEnd(2));
609 ParallelFor(amrex::Gpu::KernelInfo().setReduction(
true), ubxSlab_lo, [=]
610 AMREX_GPU_DEVICE(
int i,
int j,
int k, amrex::Gpu::Handler
const& handler) noexcept {
611 amrex::Gpu::deviceReduceSum(&avg[0], xvel_arry(i,j,k)*norm_lo, handler);
615 ParallelFor(amrex::Gpu::KernelInfo().setReduction(
true), ubxSlab_hi, [=]
616 AMREX_GPU_DEVICE(
int i,
int j,
int k, amrex::Gpu::Handler
const& handler) noexcept {
617 amrex::Gpu::deviceReduceSum(&avg[2], xvel_arry(i,j,k)*norm_hi, handler);
624 const amrex::Array4<const amrex::Real>& yvel_arry = mf_yvel.const_array(mfi);
626 #ifdef USE_VOLUME_AVERAGE
628 ParallelFor(amrex::Gpu::KernelInfo().setReduction(
true), ubx_v, [=]
629 AMREX_GPU_DEVICE(
int i,
int j,
int k, amrex::Gpu::Handler
const& handler) noexcept {
630 amrex::Gpu::deviceReduceSum(&avg[1], yvel_arry(i,j,k)*norm, handler);
634 #ifdef USE_SLAB_AVERAGE
635 amrex::Box ubxSlab_lo = makeSlab(ubx_v,2,ubx_v.smallEnd(2));
636 amrex::Box ubxSlab_hi = makeSlab(ubx_v,2,ubx_v.bigEnd(2));
641 ParallelFor(amrex::Gpu::KernelInfo().setReduction(
true), ubxSlab_lo, [=]
642 AMREX_GPU_DEVICE(
int i,
int j,
int k, amrex::Gpu::Handler
const& handler) noexcept {
643 amrex::Gpu::deviceReduceSum(&avg[1], yvel_arry(i,j,k)*norm_lo, handler);
647 ParallelFor(amrex::Gpu::KernelInfo().setReduction(
true), ubxSlab_hi, [=]
648 AMREX_GPU_DEVICE(
int i,
int j,
int k, amrex::Gpu::Handler
const& handler) noexcept {
649 amrex::Gpu::deviceReduceSum(&avg[3], yvel_arry(i,j,k)*norm_hi, handler);
656 amrex::Gpu::copy(amrex::Gpu::deviceToHost, avg_d.begin(), avg_d.end(), avg_h.begin());
659 #ifdef USE_VOLUME_AVERAGE
660 m_pb_mag[boxIdx] = std::sqrt(avg_h[0]*avg_h[0] + avg_h[1]*avg_h[1]);
664 #ifdef USE_SLAB_AVERAGE
665 m_pb_mag[boxIdx] =
myhalf*( std::sqrt(avg_h[0]*avg_h[0] + avg_h[1]*avg_h[1])
666 + std::sqrt(avg_h[2]*avg_h[2] + avg_h[3]*avg_h[3]));
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12
amrex::Vector< amrex::Vector< amrex::Real > > pb_dir
Definition: ERF_TurbPertStruct.H:695