4 #ifndef ERF_SOLVER_UTILS_H_
5 #define ERF_SOLVER_UTILS_H_
7 #include "AMReX_LO_BCTYPES.H"
19 inline Array<LinOpBCType,AMREX_SPACEDIM>
21 Array<std::string,2*AMREX_SPACEDIM> l_domain_bc_type)
23 amrex::Array<amrex::LinOpBCType,AMREX_SPACEDIM> r;
24 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
25 if ( lev_geom.isPeriodic(dir) )
27 r[dir] = LinOpBCType::Periodic;
29 auto bc_type = l_domain_bc_type[Orientation(dir,Orientation::low)];
30 if (bc_type ==
"Outflow" || bc_type ==
"Open") {
31 r[dir] = LinOpBCType::Dirichlet;
33 r[dir] = LinOpBCType::Neumann;
47 inline Array<LinOpBCType,AMREX_SPACEDIM>
49 Array<std::string,2*AMREX_SPACEDIM> l_domain_bc_type)
51 amrex::Array<amrex::LinOpBCType,AMREX_SPACEDIM> r;
52 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
53 if ( lev_geom.isPeriodic(dir) )
55 r[dir] = LinOpBCType::Periodic;
57 auto bc_type = l_domain_bc_type[Orientation(dir,Orientation::high)];
58 if (bc_type ==
"Outflow" || bc_type ==
"Open") {
59 r[dir] = LinOpBCType::Dirichlet;
61 r[dir] = LinOpBCType::Neumann;
79 inline Array<std::pair<FFT::Boundary,FFT::Boundary>,AMREX_SPACEDIM>
80 get_fft_bc (Geometry
const& lev_geom,
81 Array<std::string,2*AMREX_SPACEDIM> l_domain_bc_type,
82 Box
const& bounding_box,
bool use_real_bcs) noexcept
84 Array<std::pair<FFT::Boundary,FFT::Boundary>,AMREX_SPACEDIM> r;
88 for (
int dir = 0; dir <= 2; dir++)
90 auto bc_type_lo = l_domain_bc_type[Orientation(dir,Orientation::low)];
91 if ( lev_geom.isPeriodic(dir) &&
92 (lev_geom.Domain().smallEnd(dir) == bounding_box.smallEnd(dir)) )
94 first = FFT::Boundary::periodic;
98 else if ( (lev_geom.Domain().smallEnd(dir) == bounding_box.smallEnd(dir)) &&
99 (bc_type_lo ==
"Outflow" || bc_type_lo ==
"Open") && (dir == 2 || !use_real_bcs) )
101 first = FFT::Boundary::odd;
107 first = FFT::Boundary::even;
111 auto bc_type_hi = l_domain_bc_type[Orientation(dir,Orientation::high)];
112 if ( lev_geom.isPeriodic(dir) &&
113 (lev_geom.Domain().bigEnd(dir) == bounding_box.bigEnd(dir)) )
115 second = FFT::Boundary::periodic;
119 else if ( (lev_geom.Domain().bigEnd(dir) == bounding_box.bigEnd(dir)) &&
120 (bc_type_hi ==
"Outflow" || bc_type_hi ==
"Open") && (dir == 2 || !use_real_bcs) )
122 second = FFT::Boundary::odd;
128 second = FFT::Boundary::even;
132 r[dir] = std::make_pair(first,second);
Array< LinOpBCType, AMREX_SPACEDIM > get_lo_projection_bc(Geometry const &lev_geom, Array< std::string, 2 *AMREX_SPACEDIM > l_domain_bc_type)
Definition: ERF_SolverUtils.H:20
Array< LinOpBCType, AMREX_SPACEDIM > get_hi_projection_bc(Geometry const &lev_geom, Array< std::string, 2 *AMREX_SPACEDIM > l_domain_bc_type)
Definition: ERF_SolverUtils.H:48
Definition: ERF_ConsoleIO.cpp:15
amrex::GpuArray< Face, 2 *AMREX_SPACEDIM > Boundary
Definition: ERF_WallThermodynamics.H:34