413 const std::string chkname1 =
m_filename + Concatenate(
"/bndry_output", t_step);
415 const std::string level_prefix =
"Level_";
418 const Box& domain =
m_geom.Domain();
420 DistributionMapping dm{ba};
422 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>, AMREX_SPACEDIM+
NBCVAR_max> l_bc_extdir_vals_d;
426 for (OrientationIter oit; oit !=
nullptr; ++oit) {
428 l_bc_extdir_vals_d[i][ori] = m_bc_extdir_vals[i][ori];
432 int n_for_density = -1;
435 if (
m_var_names[i] ==
"density") n_for_density = i;
441 for (OrientationIter oit; oit !=
nullptr; ++oit) {
443 if (ori.coordDir() < 2) {
444 FArrayBox& d = (*data_to_fill[ori])[lev];
445 const auto& bx = d.box();
446 Array4<Real> d_arr = d.array();
448 bx, ncomp_for_bc, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
449 d_arr(i,j,k,n) =
zero;
455 std::string filenamer = MultiFabFileFullPrefix(lev, chkname1, level_prefix,
"density");
457 bndry_r.setVal(
Real(1.e13));
458 for (OrientationIter oit; oit !=
nullptr; ++oit) {
460 if (ori.coordDir() < 2) {
461 std::string facenamer = Concatenate(filenamer +
'_', ori, 1);
462 bndry_r[ori].read(facenamer);
469 for (
int ivar = 0; ivar <
m_var_names.size(); ivar++)
473 std::string filename1 = MultiFabFileFullPrefix(lev, chkname1, level_prefix, var_name);
476 if (var_name ==
"velocity") {
477 ncomp = AMREX_SPACEDIM;
495 bndry.setVal(
Real(1.e13));
500 for (OrientationIter oit; oit !=
nullptr; ++oit) {
502 if (ori.coordDir() < 2) {
504 std::string facename1 = Concatenate(filename1 +
'_', ori, 1);
505 bndry[ori].read(facename1);
507 int normal = ori.coordDir();
508 IntVect v_offset =
offset(ori.faceDir(), normal);
509 if (real_bcs) { v_offset = IntVect(0); }
511 const auto& bbx = (*data_to_fill[ori])[lev].box();
518 bndry[ori].boxArray(), bndry[ori].DistributionMap(),
521 for (MFIter mfi(bndryMF); mfi.isValid(); ++mfi) {
523 const auto& vbx = mfi.validbox();
524 const auto& bndry_read_arr = bndry[ori].array(mfi);
525 const auto& bndry_read_r_arr = bndry_r[ori].array(mfi);
526 const auto& bndry_mf_arr = bndryMF.array(mfi);
528 const auto& bx = bbx & vbx;
539 if (n_for_density >= 0) {
540 if (var_name ==
"temperature") {
542 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
543 Real R1 = bndry_read_r_arr(i, j, k, 0);
544 Real R2 = bndry_read_r_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
545 Real T1 = bndry_read_arr(i, j, k, 0);
546 Real T2 = bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
549 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
550 myhalf * (R1*Th1 + R2*Th2);
552 }
else if (var_name ==
"theta" || var_name ==
"ke" || var_name ==
"scalar" ||
553 var_name ==
"qv" || var_name ==
"qc") {
555 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
556 Real R1 = bndry_read_r_arr(i, j, k, 0);
557 Real R2 = bndry_read_r_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
558 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
559 myhalf * ( R1 * bndry_read_arr(i, j, k, 0) +
560 R2 * bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
562 }
else if (var_name ==
"density") {
564 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
565 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
566 myhalf * ( bndry_read_arr(i, j, k, 0) +
567 bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
571 if (var_name ==
"temperature") {
573 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
576 Real T1 = bndry_read_arr(i, j, k, 0);
577 Real T2 = bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0);
580 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
581 myhalf * (R1*Th1 + R2*Th2);
583 }
else if (var_name ==
"theta" || var_name ==
"ke" || var_name ==
"scalar" ||
584 var_name ==
"qv" || var_name ==
"qc") {
586 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
589 bndry_mf_arr(i, j, k, 0) = (real_bcs) ? bndry_read_arr(i, j, k, 0) :
590 myhalf * (R1 * bndry_read_arr(i, j, k, 0) +
591 R2 * bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
597 if (var_name ==
"velocity") {
599 bx, ncomp, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
600 bndry_mf_arr(i, j, k, n) = (real_bcs) ? bndry_read_arr(i, j, k, n) :
601 myhalf * (bndry_read_arr(i, j, k, n) +
602 bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], n));
607 bndryMF.copyTo((*data_to_fill[ori])[lev], 0, n_offset, ncomp);
constexpr amrex::Real zero
Definition: ERF_Constants.H:6
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:11
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:29
const Real rdOcp
Definition: ERF_InitCustomPert_Bomex.H:16
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:287
AMREX_FORCE_INLINE IntVect offset(const int face_dir, const int normal)
Definition: ERF_ReadBndryPlanes.cpp:28
amrex::Vector< int > m_in_timesteps
Definition: ERF_ReadBndryPlanes.H:88
int ingested_density() const
Definition: ERF_ReadBndryPlanes.H:46
const int m_extent_rad
Definition: ERF_ReadBndryPlanes.H:96
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:90
@ RhoQ1_bc_comp
Definition: ERF_IndexDefines.H:91
@ RhoKE_bc_comp
Definition: ERF_IndexDefines.H:89
@ RhoTheta_bc_comp
Definition: ERF_IndexDefines.H:88
@ RhoQ2_bc_comp
Definition: ERF_IndexDefines.H:92
@ Rho_bc_comp
Definition: ERF_IndexDefines.H:87
@ xvel_bc
Definition: ERF_IndexDefines.H:102