Skip to content

Commit

Permalink
Update for many scalars (erf-model#1782)
Browse files Browse the repository at this point in the history
* update so passive scalars use same bcs

* fix

* missed a fix

* fix bc access in diffusion operations

* fix to BC_cons

* more fixes for N scalars

* fix typo
  • Loading branch information
asalmgren authored Sep 3, 2024
1 parent 88ecfd7 commit 83e7a36
Show file tree
Hide file tree
Showing 14 changed files with 842 additions and 690 deletions.
16 changes: 12 additions & 4 deletions Source/BoundaryConditions/BoundaryConditions_bndryreg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,18 @@ ERF::fill_from_bndryregs (const Vector<MultiFab*>& mfs, const Real time)

ParallelFor(
bx_xlo, ncomp, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) {
if (bc_ptr[icomp+n].lo(0) == ERFBCType::ext_dir_ingested) {
int bc_comp = (icomp+n >= RhoScalar_comp && icomp+n < RhoScalar_comp+NSCALARS) ?
BCVars::RhoScalar_bc_comp : icomp+n;
if (bc_ptr[bc_comp].lo(0) == ERFBCType::ext_dir_ingested) {
int jb = std::min(std::max(j,dom_lo.y),dom_hi.y);
int kb = std::min(std::max(k,dom_lo.z),dom_hi.z);
dest_arr(i,j,k,icomp+n) = bdatxlo(dom_lo.x-1,jb,kb,bccomp+n);
}
},
bx_xhi, ncomp, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) {
if (bc_ptr[icomp+n].hi(0) == ERFBCType::ext_dir_ingested) {
int bc_comp = (icomp+n >= RhoScalar_comp && icomp+n < RhoScalar_comp+NSCALARS) ?
BCVars::RhoScalar_bc_comp : icomp+n;
if (bc_ptr[bc_comp].hi(0) == ERFBCType::ext_dir_ingested) {
int jb = std::min(std::max(j,dom_lo.y),dom_hi.y);
int kb = std::min(std::max(k,dom_lo.z),dom_hi.z);
dest_arr(i,j,k,icomp+n) = bdatxhi(dom_hi.x+1,jb,kb,bccomp+n);
Expand All @@ -100,14 +104,18 @@ ERF::fill_from_bndryregs (const Vector<MultiFab*>& mfs, const Real time)

ParallelFor(
bx_ylo, ncomp, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) {
if (bc_ptr[icomp+n].lo(1) == ERFBCType::ext_dir_ingested) {
int bc_comp = (icomp+n >= RhoScalar_comp && icomp+n < RhoScalar_comp+NSCALARS) ?
BCVars::RhoScalar_bc_comp : icomp+n;
if (bc_ptr[bc_comp].lo(1) == ERFBCType::ext_dir_ingested) {
int ib = std::min(std::max(i,dom_lo.x),dom_hi.x);
int kb = std::min(std::max(k,dom_lo.z),dom_hi.z);
dest_arr(i,j,k,icomp+n) = bdatylo(ib,dom_lo.y-1,kb,bccomp+n);
}
},
bx_yhi, ncomp, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) {
if (bc_ptr[icomp+n].hi(1) == ERFBCType::ext_dir_ingested) {
int bc_comp = (icomp+n >= RhoScalar_comp && icomp+n < RhoScalar_comp+NSCALARS) ?
BCVars::RhoScalar_bc_comp : icomp+n;
if (bc_ptr[bc_comp].hi(1) == ERFBCType::ext_dir_ingested) {
int ib = std::min(std::max(i,dom_lo.x),dom_hi.x);
int kb = std::min(std::max(k,dom_lo.z),dom_hi.z);
dest_arr(i,j,k,icomp+n) = bdatyhi(ib,dom_hi.y+1,kb,bccomp+n);
Expand Down
354 changes: 209 additions & 145 deletions Source/BoundaryConditions/BoundaryConditions_cons.cpp

Large diffs are not rendered by default.

232 changes: 115 additions & 117 deletions Source/BoundaryConditions/BoundaryConditions_xvel.cpp

Large diffs are not rendered by default.

246 changes: 122 additions & 124 deletions Source/BoundaryConditions/BoundaryConditions_yvel.cpp

Large diffs are not rendered by default.

219 changes: 106 additions & 113 deletions Source/BoundaryConditions/BoundaryConditions_zvel.cpp

Large diffs are not rendered by default.

44 changes: 22 additions & 22 deletions Source/BoundaryConditions/ERF_PhysBCFunct.H
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public:
ERFPhysBCFunct_cons (const int lev,
const amrex::Geometry& geom, const amrex::Vector<amrex::BCRec>& domain_bcs_type,
const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_neumann_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_neumann_vals,
std::unique_ptr<amrex::MultiFab>& z_phys_nd,
const bool use_real_bcs)
: m_lev(lev), m_geom(geom),
Expand Down Expand Up @@ -56,20 +56,20 @@ public:

void impose_lateral_cons_bcs (const amrex::Array4<amrex::Real>& dest_arr,
const amrex::Box& bx, const amrex::Box& domain,
int icomp, int ncomp, int bccomp, int ngz);
int icomp, int ncomp, int ngz);
void impose_vertical_cons_bcs (const amrex::Array4<amrex::Real>& dest_arr,
const amrex::Box& bx, const amrex::Box& domain,
const amrex::Array4<amrex::Real const>& z_nd,
const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
int icomp, int ncomp, int bccomp);
int icomp, int ncomp);

private:
int m_lev;
amrex::Geometry m_geom;
amrex::Vector<amrex::BCRec> m_domain_bcs_type;
amrex::Gpu::DeviceVector<amrex::BCRec> m_domain_bcs_type_d;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_neumann_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_neumann_vals;
amrex::MultiFab* m_z_phys_nd;
bool m_use_real_bcs;
};
Expand All @@ -80,8 +80,8 @@ public:
ERFPhysBCFunct_u (const int lev, const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_neumann_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_neumann_vals,
std::unique_ptr<amrex::MultiFab>& z_phys_nd,
const bool use_real_bcs,
amrex::Real* u_bc_data)
Expand Down Expand Up @@ -123,8 +123,8 @@ private:
amrex::Geometry m_geom;
amrex::Vector<amrex::BCRec> m_domain_bcs_type;
amrex::Gpu::DeviceVector<amrex::BCRec> m_domain_bcs_type_d;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_neumann_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_neumann_vals;
amrex::MultiFab* m_z_phys_nd;
bool m_use_real_bcs;
amrex::Real* m_u_bc_data;
Expand All @@ -136,8 +136,8 @@ public:
ERFPhysBCFunct_v (const int lev, const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_neumann_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_neumann_vals,
std::unique_ptr<amrex::MultiFab>& z_phys_nd,
const bool use_real_bcs,
amrex::Real* v_bc_data)
Expand Down Expand Up @@ -180,8 +180,8 @@ private:
amrex::Geometry m_geom;
amrex::Vector<amrex::BCRec> m_domain_bcs_type;
amrex::Gpu::DeviceVector<amrex::BCRec> m_domain_bcs_type_d;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_neumann_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_neumann_vals;
amrex::MultiFab* m_z_phys_nd;
bool m_use_real_bcs;
amrex::Real* m_v_bc_data;
Expand All @@ -193,8 +193,8 @@ public:
ERFPhysBCFunct_w (const int lev, const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_neumann_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_neumann_vals,
const TerrainType& terrain_type, std::unique_ptr<amrex::MultiFab>& z_phys_nd,
const bool use_real_bcs,
amrex::Real* w_bc_data)
Expand Down Expand Up @@ -245,8 +245,8 @@ private:
amrex::Geometry m_geom;
amrex::Vector<amrex::BCRec> m_domain_bcs_type;
amrex::Gpu::DeviceVector<amrex::BCRec> m_domain_bcs_type_d;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_neumann_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_neumann_vals;
TerrainType m_terrain_type;
amrex::MultiFab* m_z_phys_nd;
bool m_use_real_bcs;
Expand All @@ -260,8 +260,8 @@ public:
const int lev, const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> bc_neumann_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_extdir_vals,
amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> bc_neumann_vals,
const bool use_real_bcs,
amrex::Real* w_bc_data)
: m_lev(lev),
Expand Down Expand Up @@ -300,8 +300,8 @@ private:
amrex::Geometry m_geom;
amrex::Vector<amrex::BCRec> m_domain_bcs_type;
amrex::Gpu::DeviceVector<amrex::BCRec> m_domain_bcs_type_d;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NVAR_max> m_bc_neumann_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals;
amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> m_bc_neumann_vals;
bool m_use_real_bcs;
amrex::Real* m_w_bc_data;
};
Expand Down
6 changes: 3 additions & 3 deletions Source/BoundaryConditions/ERF_PhysBCFunct.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ using namespace amrex;
*/

void ERFPhysBCFunct_cons::operator() (MultiFab& mf, int icomp, int ncomp,
IntVect const& nghost, const Real /*time*/, int bccomp)
IntVect const& nghost, const Real /*time*/, int /*bccomp*/)
{
BL_PROFILE("ERFPhysBCFunct_cons::()");

Expand Down Expand Up @@ -80,10 +80,10 @@ void ERFPhysBCFunct_cons::operator() (MultiFab& mf, int icomp, int ncomp,

if (!m_use_real_bcs)
{
impose_lateral_cons_bcs(cons_arr,cbx1,domain,icomp,ncomp,bccomp,nghost[2]);
impose_lateral_cons_bcs(cons_arr,cbx1,domain,icomp,ncomp,nghost[2]);
}

impose_vertical_cons_bcs(cons_arr,cbx2,domain,z_nd_arr,dxInv,icomp,ncomp,bccomp);
impose_vertical_cons_bcs(cons_arr,cbx2,domain,z_nd_arr,dxInv,icomp,ncomp);
}

} // MFIter
Expand Down
Loading

0 comments on commit 83e7a36

Please sign in to comment.