429 Print() <<
"Asking for index " <<
idx <<
" but m_in_timesteps only has size " <<
m_in_timesteps.size() << std::endl;
433 const std::string chkname1 =
m_filename + Concatenate(
"/bndry_output", t_step);
435 const std::string level_prefix =
"Level_";
438 const Box& domain =
m_geom.Domain();
440 DistributionMapping dm{ba};
442 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>, AMREX_SPACEDIM+
NBCVAR_max> l_bc_extdir_vals_d;
446 for (OrientationIter oit; oit !=
nullptr; ++oit) {
448 l_bc_extdir_vals_d[i][ori] = m_bc_extdir_vals[i][ori];
452 int n_for_density = -1;
455 if (
m_var_names[i] ==
"density") n_for_density = i;
461 for (OrientationIter oit; oit !=
nullptr; ++oit) {
463 if (ori.coordDir() < 2) {
464 FArrayBox& d = (*data_to_fill[ori])[lev];
465 const auto& bx = d.box();
466 Array4<Real> d_arr = d.array();
468 bx, ncomp_for_bc, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
469 d_arr(i,j,k,n) =
zero;
475 std::string filenamer = MultiFabFileFullPrefix(lev, chkname1, level_prefix,
"density");
478 for (OrientationIter oit; oit !=
nullptr; ++oit) {
480 if (ori.coordDir() < 2) {
481 std::string facenamer = Concatenate(filenamer +
'_', ori, 1);
482 bndry_r[ori].read(facenamer);
489 for (
int ivar = 0; ivar <
m_var_names.size(); ivar++)
493 std::string filename1 = MultiFabFileFullPrefix(lev, chkname1, level_prefix, var_name);
496 if (var_name ==
"velocity") {
497 ncomp = AMREX_SPACEDIM;
520 for (OrientationIter oit; oit !=
nullptr; ++oit) {
522 if (ori.coordDir() < 2) {
524 std::string facename1 = Concatenate(filename1 +
'_', ori, 1);
525 bndry[ori].read(facename1);
527 int normal = ori.coordDir();
528 IntVect v_offset =
offset(ori.faceDir(), normal);
529 if (real_bcs) { v_offset = IntVect(0); }
531 const auto& bbx = (*data_to_fill[ori])[lev].box();
538 bndry[ori].boxArray(), bndry[ori].DistributionMap(),
541 for (MFIter mfi(bndryMF); mfi.isValid(); ++mfi) {
543 const auto& vbx = mfi.validbox();
544 const auto& bndry_read_arr = bndry[ori].array(mfi);
545 const auto& bndry_read_r_arr = bndry_r[ori].array(mfi);
546 const auto& bndry_mf_arr = bndryMF.array(mfi);
548 const auto& bx = bbx & vbx;
560 bx_ghost.setBig (normal, domain.smallEnd(normal) - 1);
561 bx_int .setSmall(normal, domain.smallEnd(normal));
563 bx_ghost.setSmall(normal, domain.bigEnd(normal) + 1);
564 bx_int .setBig (normal, domain.bigEnd(normal));
566 const IntVect v_offset_int = -v_offset;
574 if (n_for_density >= 0) {
575 if (var_name ==
"temperature") {
577 bx_ghost, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
578 Real R1 = bndry_read_r_arr(i, j, k, 0);
579 Real R2 = bndry_read_r_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
580 Real T1 = bndry_read_arr(i, j, k, 0);
581 Real T2 = bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
584 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
585 myhalf * (R1*Th1 + R2*Th2);
587 }
else if (var_name ==
"theta" || var_name ==
"ke" || var_name ==
"scalar" ||
588 var_name ==
"qv" || var_name ==
"qc") {
590 bx_ghost, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
591 Real R1 = bndry_read_r_arr(i, j, k, 0);
592 Real R2 = bndry_read_r_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
593 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
594 myhalf * ( R1 * bndry_read_arr(i, j, k, 0) +
595 R2 * bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
597 }
else if (var_name ==
"density") {
599 bx_ghost, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
600 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
601 myhalf * ( bndry_read_arr(i, j, k, 0) +
602 bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
606 if (var_name ==
"temperature") {
608 bx_ghost, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
611 Real T1 = bndry_read_arr(i, j, k, 0);
612 Real T2 = bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0);
615 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
616 myhalf * (R1*Th1 + R2*Th2);
618 }
else if (var_name ==
"theta" || var_name ==
"ke" || var_name ==
"scalar" ||
619 var_name ==
"qv" || var_name ==
"qc") {
621 bx_ghost, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
624 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
625 myhalf * (R1 * bndry_read_arr(i, j, k, 0) +
626 R2 * bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
632 if (var_name ==
"velocity") {
634 bx_ghost, ncomp, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
635 bndry_mf_arr(i, j, k, n) = (real_bcs) ? bndry_read_arr(i, j, k, n) :
636 myhalf * (bndry_read_arr(i, j, k, n) +
637 bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], n));
644 if (n_for_density >= 0) {
645 if (var_name ==
"temperature") {
647 bx_int, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
648 Real R1 = bndry_read_r_arr(i, j, k, 0);
649 Real R2 = bndry_read_r_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2],0);
650 Real T1 = bndry_read_arr(i, j, k, 0);
651 Real T2 = bndry_read_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2],0);
654 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
655 myhalf * (R1*Th1 + R2*Th2);
657 }
else if (var_name ==
"theta" || var_name ==
"ke" || var_name ==
"scalar" ||
658 var_name ==
"qv" || var_name ==
"qc") {
660 bx_int, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
661 Real R1 = bndry_read_r_arr(i, j, k, 0);
662 Real R2 = bndry_read_r_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2],0);
663 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
664 myhalf * ( R1 * bndry_read_arr(i, j, k, 0) +
665 R2 * bndry_read_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2], 0));
667 }
else if (var_name ==
"density") {
669 bx_int, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
670 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
671 myhalf * ( bndry_read_arr(i, j, k, 0) +
672 bndry_read_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2], 0));
676 if (var_name ==
"temperature") {
678 bx_int, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
681 Real T1 = bndry_read_arr(i, j, k, 0);
682 Real T2 = bndry_read_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2], 0);
685 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
686 myhalf * (R1*Th1 + R2*Th2);
688 }
else if (var_name ==
"theta" || var_name ==
"ke" || var_name ==
"scalar" ||
689 var_name ==
"qv" || var_name ==
"qc") {
691 bx_int, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
694 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
695 myhalf * (R1 * bndry_read_arr(i, j, k, 0) +
696 R2 * bndry_read_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2], 0));
701 if (var_name ==
"velocity") {
703 bx_int, ncomp, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
704 bndry_mf_arr(i, j, k, n) = (real_bcs) ? bndry_read_arr(i, j, k, n) :
705 myhalf * (bndry_read_arr(i, j, k, n) +
706 bndry_read_arr(i+v_offset_int[0],j+v_offset_int[1],k+v_offset_int[2], n));
711 bndryMF.copyTo((*data_to_fill[ori])[lev], 0, n_offset, ncomp);
constexpr amrex::Real bogus_large_value
Definition: ERF_Constants.H:17
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenRandT(const amrex::Real rho, const amrex::Real T, const amrex::Real rdOcp, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:64
#define NBCVAR_max
Definition: ERF_IndexDefines.H:32
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:396
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:34
AMREX_FORCE_INLINE IntVect offset(const int face_dir, const int normal)
Definition: ERF_ReadBndryPlanes.cpp:32
amrex::Vector< int > m_in_timesteps
Definition: ERF_ReadBndryPlanes.H:91
int ingested_density() const
Definition: ERF_ReadBndryPlanes.H:49
const int m_extent_rad
Definition: ERF_ReadBndryPlanes.H:99
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:93
@ RhoQ1_bc_comp
Definition: ERF_IndexDefines.H:94
@ RhoKE_bc_comp
Definition: ERF_IndexDefines.H:92
@ RhoTheta_bc_comp
Definition: ERF_IndexDefines.H:91
@ RhoQ2_bc_comp
Definition: ERF_IndexDefines.H:95
@ Rho_bc_comp
Definition: ERF_IndexDefines.H:90
@ xvel_bc
Definition: ERF_IndexDefines.H:105