707 int nlev =
static_cast<int>(vars_new.size());
708 int nplane =
static_cast<int>(
m_bnd_rbx.size());
709 int ncomp =
static_cast<int>(
m_varnames.size());
710 bool interpolate =
true;
715 for (
int iplane(0); iplane<nplane; ++iplane) {
716 int dir =
m_dir[iplane];
717 amrex::RealBox bnd_rbx =
m_bnd_rbx[iplane];
724 for (
int ilev(0); ilev<=lev_cap; ++ilev) {
728 amrex::Box plane_bx =
getIndexBox(bnd_rbx, geom[ilev]);
729 int k_l =
static_cast<int>(std::floor((point - geom[ilev].ProbLo(dir))
730 / geom[ilev].CellSize(dir)));
731 plane_bx.setSmall(dir, k_l); plane_bx.setBig(dir, k_l);
732 if (!vars_new[ilev][
Vars::cons].boxArray().intersects(plane_bx)) {
break; }
736 amrex::MultiFab mf_cc_vel;
737 auto ba = vars_new[ilev][
Vars::cons].boxArray();
738 auto dm = vars_new[ilev][
Vars::cons].DistributionMap();
739 mf_cc_vel.define(ba, dm, AMREX_SPACEDIM, amrex::IntVect(1,1,1));
740 average_face_to_cellcenter(mf_cc_vel,0,
741 amrex::Array<const amrex::MultiFab*,3>{&vars_new[ilev][
Vars::xvel],
746 amrex::MultiFab mf_cc_data;
747 mf_cc_data.define(ba, dm, ncomp, 1);
752 amrex::MultiFab::Copy(mf_cc_data, vars_new[ilev][
Vars::cons],
Rho_comp, mf_comp, 1, 0);
757 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 0, mf_comp, 1, 0);
761 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 1, mf_comp, 1, 0);
765 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 2, mf_comp, 1, 0);
771 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
773 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
774 const amrex::Box& tbx = mfi.tilebox();
775 auto const& dfab = mf_cc_data.array(mfi);
776 auto const& vfab = mf_cc_vel.array(mfi);
780 dfab(i,j,k,mf_comp) = std::sqrt(vfab(i,j,k,0)*vfab(i,j,k,0)
781 + vfab(i,j,k,1)*vfab(i,j,k,1)
782 + vfab(i,j,k,2)*vfab(i,j,k,2));
790 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
792 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
793 const amrex::Box& tbx = mfi.tilebox();
794 auto const& dfab = mf_cc_data.array(mfi);
795 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
807 "qv sampling requested but moisture components not present in state");
811 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
813 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
814 const amrex::Box& tbx = mfi.tilebox();
815 auto const& dfab = mf_cc_data.array(mfi);
816 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
827 "qc sampling requested but moisture components not present in state");
829 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
831 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
832 const amrex::Box& tbx = mfi.tilebox();
833 auto const& dfab = mf_cc_data.array(mfi);
834 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
848 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
850 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
851 const amrex::Box& tbx = mfi.tilebox();
852 auto const& dfab = mf_cc_data.array(mfi);
853 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
857 amrex::Real qv_val = (qv_comp >= 0) ? dfab(i,j,k,qv_comp)
865 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
867 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
868 const amrex::Box& tbx = mfi.tilebox();
869 auto const& dfab = mf_cc_data.array(mfi);
870 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
881 auto slice = get_slice_data(dir, point, mf_cc_data, geom[ilev],
882 0, ncomp, interpolate, bnd_rbx);
885 if (!slice || slice->boxArray().size() == 0) {
break; }
891 const int rr_l = 1 << ilev;
892 const int k_slice = slice->boxArray().minimalBox().smallEnd(dir);
893 const int l_dir = dir;
896 const amrex::BoxArray& slice_ba = slice->boxArray();
897 for (
int ib(0); ib<static_cast<int>(slice_ba.size()); ++ib) {
898 amrex::Box b = slice_ba[ib];
900 b.setBig(dir, rr_l - 1);
903 amrex::BoxArray out_ba(std::move(bl));
904 auto out_mf = std::make_unique<amrex::MultiFab>(out_ba, slice->DistributionMap(),
907 for (amrex::MFIter mfi(*out_mf); mfi.isValid(); ++mfi) {
908 const amrex::Box& obx = mfi.validbox();
909 auto const& ofab = out_mf->array(mfi);
910 auto const& sfab = slice->array(mfi);
911 amrex::ParallelFor(obx, ncomp, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept
913 int si = i, sj = j, sk = k;
914 if (l_dir == 0) { si = k_slice; }
915 else if (l_dir == 1) { sj = k_slice; }
916 else { sk = k_slice; }
917 ofab(i,j,k,n) = sfab(si,sj,sk,n);
921 m_ps_mf[iplane].push_back(std::move(out_mf));
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:81
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:43
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
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
@ xvel
Definition: ERF_IndexDefines.H:177
@ cons
Definition: ERF_IndexDefines.H:176
@ zvel
Definition: ERF_IndexDefines.H:179
@ yvel
Definition: ERF_IndexDefines.H:178
amrex::Box getIndexBox(const amrex::RealBox &real_box, const amrex::Geometry &geom)
Definition: ERF_SampleData.H:688