298 const amrex::Vector<amrex::MultiFab*>& tau23_lev = {},
299 const amrex::Vector<amrex::MultiFab*>& hfx3_lev = {},
300 const amrex::Vector<int>& prognostic_tke_available = {})
302 int nlev =
static_cast<int>(vars_new.size());
303 int nline =
static_cast<int>(
m_bnd_bx.size());
304 int ncomp =
static_cast<int>(
m_varnames.size());
309 for (
int iline(0); iline<nline; ++iline) {
310 int dir =
m_dir[iline];
313 for (
int ilev(nlev-1); ilev>=0; --ilev) {
317 amrex::IntVect cell = bnd_bx.smallEnd();
320 amrex::MultiFab mf_cc_vel;
321 auto ba = vars_new[ilev][
Vars::cons].boxArray();
322 auto dm = vars_new[ilev][
Vars::cons].DistributionMap();
323 mf_cc_vel.define(ba, dm, AMREX_SPACEDIM, amrex::IntVect(1,1,1));
324 average_face_to_cellcenter(mf_cc_vel,0,
325 amrex::Array<const amrex::MultiFab*,3>{&vars_new[ilev][
Vars::xvel],
330 amrex::MultiFab mf_cc_data;
331 mf_cc_data.define(ba, dm, ncomp, 1);
336 amrex::MultiFab::Copy(mf_cc_data, vars_new[ilev][
Vars::cons],
Rho_comp, mf_comp, 1, 0);
341 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 0, mf_comp, 1, 0);
345 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 1, mf_comp, 1, 0);
349 amrex::MultiFab::Copy(mf_cc_data, mf_cc_vel, 2, mf_comp, 1, 0);
355 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
357 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
358 const amrex::Box& tbx = mfi.tilebox();
359 auto const& dfab = mf_cc_data.array(mfi);
360 auto const& vfab = mf_cc_vel.array(mfi);
364 dfab(i,j,k,mf_comp) = std::sqrt(vfab(i,j,k,0)*vfab(i,j,k,0)
365 + vfab(i,j,k,1)*vfab(i,j,k,1)
366 + vfab(i,j,k,2)*vfab(i,j,k,2)) ;
374 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
376 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
377 const amrex::Box& tbx = mfi.tilebox();
378 auto const& dfab = mf_cc_data.array(mfi);
379 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
391 "qv sampling requested but moisture components not present in state");
395 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
397 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
398 const amrex::Box& tbx = mfi.tilebox();
399 auto const& dfab = mf_cc_data.array(mfi);
400 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
411 "qc sampling requested but moisture components not present in state");
413 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
415 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
416 const amrex::Box& tbx = mfi.tilebox();
417 auto const& dfab = mf_cc_data.array(mfi);
418 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
432 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
434 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
435 const amrex::Box& tbx = mfi.tilebox();
436 auto const& dfab = mf_cc_data.array(mfi);
437 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
441 amrex::Real qv_val = (qv_comp >= 0) ? dfab(i,j,k,qv_comp)
449 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
451 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
452 const amrex::Box& tbx = mfi.tilebox();
453 auto const& dfab = mf_cc_data.array(mfi);
454 auto const& cfab = vars_new[ilev][
Vars::cons].array(mfi);
466 const bool tke_available =
467 ilev < static_cast<int>(prognostic_tke_available.size()) &&
468 prognostic_tke_available[ilev] != 0;
469 if (!tke_available) {
470 mf_cc_data.setVal(
amrex::Real(0.0), mf_comp, 1, 0);
473 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
475 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
476 const amrex::Box& tbx = mfi.tilebox();
477 const auto& out = mf_cc_data.array(mfi);
478 const auto& state = vars_new[ilev][
Vars::cons].const_array(mfi);
488 amrex::MultiFab*
tau13 = ilev < static_cast<int>(tau13_lev.size())
489 ? tau13_lev[ilev] :
nullptr;
490 if (
tau13 !=
nullptr) {
492 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
494 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
495 const amrex::Box& tbx = mfi.tilebox();
496 const auto& out = mf_cc_data.array(mfi);
497 const auto& tau =
tau13->const_array(mfi);
500 (tau(i,j,k) + tau(i+1,j,k) +
501 tau(i,j,k+1) + tau(i+1,j,k+1));
505 mf_cc_data.setVal(0.0, mf_comp, 1, 0);
511 amrex::MultiFab*
tau23 = ilev < static_cast<int>(tau23_lev.size())
512 ? tau23_lev[ilev] :
nullptr;
513 if (
tau23 !=
nullptr) {
515 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
517 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
518 const amrex::Box& tbx = mfi.tilebox();
519 const auto& out = mf_cc_data.array(mfi);
520 const auto& tau =
tau23->const_array(mfi);
523 (tau(i,j,k) + tau(i,j+1,k) +
524 tau(i,j,k+1) + tau(i,j+1,k+1));
528 mf_cc_data.setVal(0.0, mf_comp, 1, 0);
534 amrex::MultiFab* hfx3 = ilev < static_cast<int>(hfx3_lev.size())
535 ? hfx3_lev[ilev] :
nullptr;
536 if (hfx3 !=
nullptr) {
538 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
540 for (amrex::MFIter mfi(mf_cc_data, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi) {
541 const amrex::Box& tbx = mfi.tilebox();
542 const auto& out = mf_cc_data.array(mfi);
543 const auto& hfx = hfx3->const_array(mfi);
545 out(i,j,k,mf_comp) =
amrex::Real(0.5) * (hfx(i,j,k) + hfx(i,j,k+1));
549 mf_cc_data.setVal(0.0, mf_comp, 1, 0);
555 m_ls_mf[iline] = get_line_data(mf_cc_data, dir, cell, bnd_bx);
558 auto min_bnd_bx =
m_ls_mf[iline].boxArray().minimalBox();
559 if (bnd_bx == min_bnd_bx) {
break; }
@ tau23
Definition: ERF_DataStruct.H:39
@ tau13
Definition: ERF_DataStruct.H:39
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
#define RhoKE_comp
Definition: ERF_IndexDefines.H:41
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:226