816 int nlev =
static_cast<int>(vars_new.size());
817 int nplane =
static_cast<int>(
m_bnd_rbx.size());
818 int ncomp =
static_cast<int>(
m_varnames.size());
819 bool interpolate =
true;
824 for (
int iplane(0); iplane<nplane; ++iplane) {
825 int dir =
m_dir[iplane];
826 amrex::RealBox bnd_rbx =
m_bnd_rbx[iplane];
833 for (
int ilev(0); ilev<=lev_cap; ++ilev) {
837 amrex::Box plane_bx =
getIndexBox(bnd_rbx, geom[ilev]);
838 int k_l =
static_cast<int>(std::floor((point - geom[ilev].ProbLo(dir))
839 / geom[ilev].CellSize(dir)));
840 plane_bx.setSmall(dir, k_l); plane_bx.setBig(dir, k_l);
841 if (!vars_new[ilev][
Vars::cons].boxArray().intersects(plane_bx)) {
break; }
845 amrex::MultiFab mf_cc_vel;
846 auto ba = vars_new[ilev][
Vars::cons].boxArray();
847 auto dm = vars_new[ilev][
Vars::cons].DistributionMap();
848 mf_cc_vel.define(ba, dm, AMREX_SPACEDIM, amrex::IntVect(1,1,1));
849 average_face_to_cellcenter(mf_cc_vel,0,
850 amrex::Array<const amrex::MultiFab*,3>{&vars_new[ilev][
Vars::xvel],
855 amrex::MultiFab mf_cc_data;
856 mf_cc_data.define(ba, dm, ncomp, 1);
861 amrex::MultiFab::Copy(mf_cc_data, vars_new[ilev][
Vars::cons],
Rho_comp, mf_comp, 1, 0);
866 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 0, mf_comp, 1, 0);
870 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 1, mf_comp, 1, 0);
874 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 2, mf_comp, 1, 0);
880 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
882 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
883 const amrex::Box& tbx = mfi.tilebox();
884 auto const& dfab = mf_cc_data.array(mfi);
885 auto const& vfab = mf_cc_vel.array(mfi);
889 dfab(i,j,k,mf_comp) = std::sqrt(vfab(i,j,k,0)*vfab(i,j,k,0)
890 + vfab(i,j,k,1)*vfab(i,j,k,1)
891 + vfab(i,j,k,2)*vfab(i,j,k,2));
899 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
901 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
902 const amrex::Box& tbx = mfi.tilebox();
903 auto const& dfab = mf_cc_data.array(mfi);
904 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
916 "qv sampling requested but moisture components not present in state");
920 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
922 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
923 const amrex::Box& tbx = mfi.tilebox();
924 auto const& dfab = mf_cc_data.array(mfi);
925 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
936 "qc sampling requested but moisture components not present in state");
938 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
940 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
941 const amrex::Box& tbx = mfi.tilebox();
942 auto const& dfab = mf_cc_data.array(mfi);
943 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
957 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
959 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
960 const amrex::Box& tbx = mfi.tilebox();
961 auto const& dfab = mf_cc_data.array(mfi);
962 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
966 amrex::Real qv_val = (qv_comp >= 0) ? dfab(i,j,k,qv_comp)
974 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
976 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
977 const amrex::Box& tbx = mfi.tilebox();
978 auto const& dfab = mf_cc_data.array(mfi);
979 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
990 auto slice = get_slice_data(dir, point, mf_cc_data, geom[ilev],
991 0, ncomp, interpolate, bnd_rbx);
994 if (!slice || slice->boxArray().size() == 0) {
break; }
1000 const int rr_l = 1 << ilev;
1001 const int k_slice = slice->boxArray().minimalBox().smallEnd(dir);
1002 const int l_dir = dir;
1005 const amrex::BoxArray& slice_ba = slice->boxArray();
1006 for (
int ib(0); ib<static_cast<int>(slice_ba.size()); ++ib) {
1007 amrex::Box b = slice_ba[ib];
1009 b.setBig(dir, rr_l - 1);
1012 amrex::BoxArray out_ba(std::move(bl));
1013 auto out_mf = std::make_unique<amrex::MultiFab>(out_ba, slice->DistributionMap(),
1016 for (amrex::MFIter mfi(*out_mf); mfi.isValid(); ++mfi) {
1017 const amrex::Box& obx = mfi.validbox();
1018 auto const& ofab = out_mf->array(mfi);
1019 auto const& sfab = slice->array(mfi);
1020 amrex::ParallelFor(obx, ncomp, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept
1022 int si = i, sj = j, sk = k;
1023 if (l_dir == 0) { si = k_slice; }
1024 else if (l_dir == 1) { sj = k_slice; }
1025 else { sk = k_slice; }
1026 ofab(i,j,k,n) = sfab(si,sj,sk,n);
1030 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:39
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:46
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
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:215
@ cons
Definition: ERF_IndexDefines.H:214
@ zvel
Definition: ERF_IndexDefines.H:217
@ yvel
Definition: ERF_IndexDefines.H:216
amrex::Box getIndexBox(const amrex::RealBox &real_box, const amrex::Geometry &geom)
Definition: ERF_SampleData.H:797