8 #include <AMReX_Geometry.H>
9 #include <AMReX_DistributionMapping.H>
10 #include <AMReX_BoxArray.H>
12 #include <AMReX_EB2.H>
13 #include <AMReX_EBFabFactory.H>
14 #include <AMReX_Dim3.H>
15 #include <AMReX_GpuContainers.H>
42 eb_ (amrex::Geometry
const& a_geom,
43 amrex::FArrayBox
const& terrain_fab,
44 amrex::Gpu::DeviceVector<amrex::Real>& a_dz_stretched,
57 amrex::Geometry
const& a_geom,
58 amrex::EB2::Level
const* a_eb_level,
70 amrex::Geometry
const& a_geom,
71 amrex::BoxArray
const& ba,
72 amrex::DistributionMapping
const& dm,
73 amrex::EB2::Level
const& a_eb_level);
84 amrex::Geometry
const& a_geom,
85 amrex::BoxArray
const& ba,
86 amrex::DistributionMapping
const& dm,
87 amrex::EB2::Level
const& a_eb_level);
97 #ifndef USE_FC_FACTORY
102 #define USE_FC_FACTORY 1
139 const amrex::EBFArrayBoxFactory* cc_factory,
175 std::unique_ptr<amrex::EBFArrayBoxFactory>
m_factory =
nullptr;
193 amrex::FabArray<amrex::EBCellFlagFab>
const& flags,
194 amrex::Vector<CutCellList>& cut_cells);
210 amrex::EB2::GeometryShop<F> a_gshop)
212 int const req_lev(0);
213 int const max_lev(2);
215 amrex::EB2::Build(a_gshop, a_geom, req_lev, max_lev);
216 const amrex::EB2::IndexSpace& ebis = amrex::EB2::IndexSpace::top();
221 inline amrex::FabArray<amrex::EBCellFlagFab>&
224 const amrex::FabArray<amrex::EBCellFlagFab>& flags_const = ebfact.getMultiEBCellFlagFab();
225 return const_cast<amrex::FabArray<amrex::EBCellFlagFab>&
>(flags_const);
229 inline amrex::MultiFab&
232 const amrex::MultiFab& vfrac_const = ebfact.getVolFrac();
233 return const_cast<amrex::MultiFab&
>(vfrac_const);
237 inline amrex::MultiCutFab&
240 const amrex::MultiCutFab& vcent_const = ebfact.getCentroid();
241 return const_cast<amrex::MultiCutFab&
>(vcent_const);
245 inline amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM>
248 auto afrac_const = ebfact.getAreaFrac();
249 amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM> afrac;
250 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
251 afrac[dir] =
const_cast<amrex::MultiCutFab*
>(afrac_const[dir]);
257 inline amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM>
260 auto fcent_const = ebfact.getFaceCent();
261 amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM> fcent;
262 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
263 fcent[dir] =
const_cast<amrex::MultiCutFab*
>(fcent_const[dir]);
Declares auxiliary EB factories for face-centered data.
Owns and exposes cell-centered and face-centered EB factories.
Definition: ERF_EB.H:26
amrex::FabArray< amrex::EBCellFlagFab > & getNonConstEBCellFlags(const amrex::EBFArrayBoxFactory &ebfact)
Return mutable EB cell flags from an AMReX factory.
Definition: ERF_EB.H:222
CutCellList const & get_u_cut_cells(int grid_index) const noexcept
Return cut x-faces owned by a grid, cached when the EB factories are built.
Definition: ERF_EB.H:106
eb_()
Construct an empty EB factory manager.
Definition: ERF_EB.cpp:60
void define(int level, amrex::Geometry const &a_geom, amrex::EB2::Level const *a_eb_level, bool is_anelastic)
Define the EB level metadata used by this factory manager.
amrex::Vector< CutCellList > m_w_cut_cells
Definition: ERF_EB.H:190
void make_terrain(amrex::Geometry const &a_geom)
Build terrain EB geometry for the supplied Geometry.
CutCellList const & get_v_cut_cells(int grid_index) const noexcept
Return cut y-faces owned by a grid, cached when the EB factories are built.
Definition: ERF_EB.H:112
void build_level(amrex::Geometry const &a_geom, amrex::EB2::GeometryShop< F > a_gshop)
Construct EB levels from an AMReX GeometryShop.
Definition: ERF_EB.H:209
amrex::Array< amrex::MultiCutFab *, AMREX_SPACEDIM > getNonConstAreaFrac(const amrex::EBFArrayBoxFactory &ebfact)
Return mutable area-fraction arrays from an AMReX factory.
Definition: ERF_EB.H:246
CutCellList const & get_w_cut_cells(int grid_index) const noexcept
Return cut z-faces owned by a grid, cached when the EB factories are built.
Definition: ERF_EB.H:118
void build_cut_cell_lists(amrex::FabArray< amrex::EBCellFlagFab > const &flags, amrex::Vector< CutCellList > &cut_cells)
Definition: ERF_EB.cpp:179
amrex::Vector< CutCellList > m_v_cut_cells
Definition: ERF_EB.H:189
void mask_fc_from_cc(amrex::EBFArrayBoxFactory *fc_factory, const amrex::EBFArrayBoxFactory *cc_factory, int idim)
Enforce FC-CC consistency by marking FC faces as covered when both CC neighbors are covered.
Definition: ERF_EB.cpp:260
amrex::EB2::Level const * m_eb_level
EB level constructed from building GeometryShop.
Definition: ERF_EB.H:173
void make_all_factories(int level, amrex::Geometry const &a_geom, amrex::BoxArray const &ba, amrex::DistributionMapping const &dm, amrex::EB2::Level const &a_eb_level)
Build cell-centered and staggered EB factories for the level.
Definition: ERF_EB.cpp:67
amrex::Vector< CutCellList > m_u_cut_cells
Definition: ERF_EB.H:188
amrex::FabArray< amrex::EBCellFlagFab > * m_cellflags
Definition: ERF_EB.H:170
const std::unique_ptr< amrex::EBFArrayBoxFactory > & get_const_factory() const noexcept
Return the cell-centered EB factory.
Definition: ERF_EB.H:124
amrex::MultiFab & getNonConstVolFrac(const amrex::EBFArrayBoxFactory &ebfact)
Return mutable volume fractions from an AMReX factory.
Definition: ERF_EB.H:230
eb_aux_ m_w_factory
Definition: ERF_EB.H:180
std::unique_ptr< amrex::EBFArrayBoxFactory > m_factory
Definition: ERF_EB.H:175
amrex::EBSupport m_support_level
Definition: ERF_EB.H:166
amrex::EBFArrayBoxFactory const * get_w_const_factory() const noexcept
Return the native AMReX z-face EB factory.
Definition: ERF_EB.H:148
amrex::EBFArrayBoxFactory const * get_u_const_factory() const noexcept
Return the native AMReX x-face EB factory.
Definition: ERF_EB.H:144
int nghost_volume() const
Number of ghost cells needed for EB volume data.
Definition: ERF_EB.H:92
amrex::Array< amrex::MultiCutFab *, AMREX_SPACEDIM > getNonConstFaceCent(const amrex::EBFArrayBoxFactory &ebfact)
Return mutable face-centroid arrays from an AMReX factory.
Definition: ERF_EB.H:258
void make_cc_factory(int level, amrex::Geometry const &a_geom, amrex::BoxArray const &ba, amrex::DistributionMapping const &dm, amrex::EB2::Level const &a_eb_level)
Build only the cell-centered EB factory for the level.
Definition: ERF_EB.cpp:158
amrex::Gpu::DeviceVector< amrex::Dim3 > CutCellList
Definition: ERF_EB.H:30
amrex::EBFArrayBoxFactory const * get_v_const_factory() const noexcept
Return the native AMReX y-face EB factory.
Definition: ERF_EB.H:146
amrex::MultiCutFab & getNonConstCentroid(const amrex::EBFArrayBoxFactory &ebfact)
Return mutable cell centroids from an AMReX factory.
Definition: ERF_EB.H:238
eb_aux_ m_u_factory
Definition: ERF_EB.H:178
~eb_()
Destroy the EB factory manager.
Definition: ERF_EB.cpp:55
std::unique_ptr< amrex::EBFArrayBoxFactory > m_w_factory_fc
Definition: ERF_EB.H:185
eb_(amrex::Geometry const &a_geom, amrex::FArrayBox const &terrain_fab, amrex::Gpu::DeviceVector< amrex::Real > &a_dz_stretched, bool is_anelastic)
Construct an EB description from terrain data.
eb_aux_ m_v_factory
Definition: ERF_EB.H:179
std::unique_ptr< amrex::EBFArrayBoxFactory > m_v_factory_fc
Definition: ERF_EB.H:184
int m_has_eb
Definition: ERF_EB.H:159
int nghost_full() const
Number of ghost cells needed for full EB geometric data.
Definition: ERF_EB.H:94
int nghost_basic() const
Number of ghost cells needed for basic EB flags.
Definition: ERF_EB.H:90
int m_write_eb_surface
Definition: ERF_EB.H:168
std::unique_ptr< amrex::EBFArrayBoxFactory > m_u_factory_fc
Definition: ERF_EB.H:183
std::string m_type
Definition: ERF_EB.H:164
void set_connection_flags(amrex::EBFArrayBoxFactory *factory)
Disconnect covered neighbors in an EB factory's cell flags.
Definition: ERF_EB.cpp:216
Stores face-centered EB geometry reconstructed from a cell-centered factory.
Definition: ERF_EBAux.H:24