347 const std::string chkname1 =
m_filename + Concatenate(
"/bndry_output", t_step);
349 const std::string level_prefix =
"Level_";
352 const Box& domain =
m_geom.Domain();
354 DistributionMapping dm{ba};
356 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>, AMREX_SPACEDIM+
NVAR_max> l_bc_extdir_vals_d;
360 for (OrientationIter oit; oit !=
nullptr; ++oit) {
362 l_bc_extdir_vals_d[i][ori] = m_bc_extdir_vals[i][ori];
366 int n_for_density = -1;
369 if (
m_var_names[i] ==
"density") n_for_density = i;
375 for (OrientationIter oit; oit !=
nullptr; ++oit) {
377 if (ori.coordDir() < 2) {
378 FArrayBox& d = (*data_to_fill[ori])[lev];
379 const auto& bx = d.box();
380 Array4<Real> d_arr = d.array();
382 bx, ncomp_for_bc, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
389 std::string filenamer = MultiFabFileFullPrefix(lev, chkname1, level_prefix,
"density");
391 bndry_r.setVal(1.0e13);
392 for (OrientationIter oit; oit !=
nullptr; ++oit) {
394 if (ori.coordDir() < 2) {
395 std::string facenamer = Concatenate(filenamer +
'_', ori, 1);
396 bndry_r[ori].read(facenamer);
400 for (
int ivar = 0; ivar <
m_var_names.size(); ivar++)
404 std::string filename1 = MultiFabFileFullPrefix(lev, chkname1, level_prefix, var_name);
407 if (var_name ==
"velocity") {
408 ncomp = AMREX_SPACEDIM;
427 bndry.setVal(1.0e13);
432 for (OrientationIter oit; oit !=
nullptr; ++oit) {
434 if (ori.coordDir() < 2) {
436 std::string facename1 = Concatenate(filename1 +
'_', ori, 1);
437 bndry[ori].read(facename1);
439 const int normal = ori.coordDir();
440 const IntVect v_offset =
offset(ori.faceDir(), normal);
442 const auto& bbx = (*data_to_fill[ori])[lev].box();
449 bndry[ori].boxArray(), bndry[ori].DistributionMap(),
452 for (MFIter mfi(bndryMF); mfi.isValid(); ++mfi) {
454 const auto& vbx = mfi.validbox();
455 const auto& bndry_read_arr = bndry[ori].array(mfi);
456 const auto& bndry_read_r_arr = bndry_r[ori].array(mfi);
457 const auto& bndry_mf_arr = bndryMF.array(mfi);
459 const auto& bx = bbx & vbx;
470 if (n_for_density >= 0) {
471 if (var_name ==
"temperature") {
473 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
474 Real R1 = bndry_read_r_arr(i, j, k, 0);
475 Real R2 = bndry_read_r_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
476 Real T1 = bndry_read_arr(i, j, k, 0);
477 Real T2 = bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
480 bndry_mf_arr(i, j, k, 0) = 0.5 * (R1*Th1 + R2*Th2);
482 }
else if (var_name ==
"scalar" || var_name ==
"qv" || var_name ==
"qc" ||
483 var_name ==
"ke" || var_name ==
"qke") {
485 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
486 Real R1 = bndry_read_r_arr(i, j, k, 0);
487 Real R2 = bndry_read_r_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2],0);
488 bndry_mf_arr(i, j, k, 0) = 0.5 *
489 ( R1 * bndry_read_arr(i, j, k, 0) +
490 R2 * bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
492 }
else if (var_name ==
"density") {
494 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
495 bndry_mf_arr(i, j, k, 0) = 0.5 *
496 ( bndry_read_arr(i, j, k, 0) +
497 bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
501 if (var_name ==
"temperature") {
503 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
506 Real T1 = bndry_read_arr(i, j, k, 0);
507 Real T2 = bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0);
510 bndry_mf_arr(i, j, k, 0) = 0.5 * (R1*Th1 + R2*Th2);
512 }
else if (var_name ==
"scalar" || var_name ==
"qv" || var_name ==
"qc" ||
513 var_name ==
"ke" || var_name ==
"qke") {
515 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
518 bndry_mf_arr(i, j, k, 0) = 0.5 *
519 (R1 * bndry_read_arr(i, j, k, 0) +
520 R2 * bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], 0));
526 if (var_name ==
"velocity") {
528 bx, ncomp, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k,
int n) noexcept {
529 bndry_mf_arr(i, j, k, n) = 0.5 *
530 (bndry_read_arr(i, j, k, n) +
531 bndry_read_arr(i+v_offset[0],j+v_offset[1],k+v_offset[2], n));
536 bndryMF.copyTo((*data_to_fill[ori])[lev], 0, n_offset, ncomp);
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=0.0)
Definition: EOS.H:47
AMREX_FORCE_INLINE IntVect offset(const int face_dir, const int normal)
Definition: ERF_ReadBndryPlanes.cpp:28
#define NVAR_max
Definition: IndexDefines.H:27
amrex::Vector< int > m_in_timesteps
Definition: ERF_ReadBndryPlanes.H:83
const int m_in_rad
controls extents on native bndry output
Definition: ERF_ReadBndryPlanes.H:89
int ingested_density() const
Definition: ERF_ReadBndryPlanes.H:43
const int m_out_rad
Definition: ERF_ReadBndryPlanes.H:90
const int m_extent_rad
Definition: ERF_ReadBndryPlanes.H:91
@ RhoScalar_bc_comp
Definition: IndexDefines.H:52
@ RhoQ1_bc_comp
Definition: IndexDefines.H:53
@ RhoKE_bc_comp
Definition: IndexDefines.H:50
@ RhoQKE_bc_comp
Definition: IndexDefines.H:51
@ RhoTheta_bc_comp
Definition: IndexDefines.H:49
@ RhoQ2_bc_comp
Definition: IndexDefines.H:54
@ Rho_bc_comp
Definition: IndexDefines.H:48
@ xvel_bc
Definition: IndexDefines.H:55