Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_EBFabFactory.H
Go to the documentation of this file.
1#ifndef AMREX_EBFABFACTORY_H_
2#define AMREX_EBFABFACTORY_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_FabFactory.H>
6
7#include <AMReX_EBData.H>
9#include <AMReX_Geometry.H>
10#include <AMReX_EBSupport.H>
11#include <AMReX_Array.H>
12#include <AMReX_MFIter.H>
13
20namespace amrex
21{
22
23namespace EB2 {
24 class Level;
25 class IndexSpace;
26}
27
31 : public FabFactory<FArrayBox>
32{
33public:
34
45 EBFArrayBoxFactory (const EB2::Level& a_level, const Geometry& a_geom,
46 const BoxArray& a_ba, const DistributionMapping& a_dm,
47 const Vector<int>& a_ngrow, EBSupport a_support);
48
60 EBFArrayBoxFactory (const EB2::Level& a_level, const Geometry& a_geom,
61 const BoxArray& a_ba, const DistributionMapping& a_dm,
62 const Vector<int>& a_ngrow, EBSupport a_support, int face_dir);
63 ~EBFArrayBoxFactory () override = default;
64
66 EBFArrayBoxFactory (EBFArrayBoxFactory&&) noexcept = default;
67
68 EBFArrayBoxFactory () = delete;
69 EBFArrayBoxFactory& operator= (const EBFArrayBoxFactory&) = delete;
70 EBFArrayBoxFactory& operator= (EBFArrayBoxFactory&&) = delete;
71
73 [[nodiscard]]
74 FArrayBox* create (const Box& box, int ncomps, const FabInfo& info, int box_index) const final;
75
77 [[nodiscard]]
78 FArrayBox* create_alias (FArrayBox const& rhs, int scomp, int ncomp) const final;
79
81 void destroy (FArrayBox* fab) const final;
82
84 [[nodiscard]]
85 EBFArrayBoxFactory* clone () const final;
86
88 [[nodiscard]] const FabArray<EBCellFlagFab>& getMultiEBCellFlagFab () const noexcept
89 { return m_ebdc->getMultiEBCellFlagFab(); }
90
92 [[nodiscard]] const MultiFab& getLevelSet () const noexcept { return m_ebdc->getLevelSet(); }
93
95 [[nodiscard]] const MultiFab& getVolFrac () const noexcept { return m_ebdc->getVolFrac(); }
96
98 [[nodiscard]] const MultiCutFab& getCentroid () const noexcept { return m_ebdc->getCentroid(); }
99
101 [[nodiscard]] const MultiCutFab& getBndryCent () const noexcept { return m_ebdc->getBndryCent(); }
102
104 [[nodiscard]] const MultiCutFab& getBndryNormal () const noexcept { return m_ebdc->getBndryNormal(); }
105
107 [[nodiscard]] const MultiCutFab& getBndryArea () const noexcept { return m_ebdc->getBndryArea(); }
108
111 return m_ebdc->getAreaFrac();
112 }
113
117 return m_ebdc->getFaceCent();
118 }
119
122 return m_ebdc->getEdgeCent();
123 }
124
126 [[nodiscard]] bool isAllRegular () const noexcept;
127
129 [[nodiscard]] EB2::Level const* getEBLevel () const noexcept { return m_parent; }
131 [[nodiscard]] EB2::IndexSpace const* getEBIndexSpace () const noexcept;
133 [[nodiscard]] int maxCoarseningLevel () const noexcept;
134
136 [[nodiscard]] const DistributionMapping& DistributionMap () const noexcept;
138 [[nodiscard]] const BoxArray& boxArray () const noexcept;
140 [[nodiscard]] const Geometry& Geom () const noexcept { return m_geom; }
142 [[nodiscard]] int faceDir () const noexcept { return m_face_dir; }
143
145 [[nodiscard]] bool hasEBInfo() const noexcept;
146
149 [[nodiscard]] iMultiFab const* getCutCellMask () const noexcept { return m_ebdc->getCutCellMask(); }
150
152 [[nodiscard]] EBData getEBData (MFIter const& mfi) const noexcept;
153
155 [[nodiscard]] EBDataArrays getEBDataArrays () const noexcept;
156
157private:
158
159 EBSupport m_support;
160 Geometry m_geom;
161 std::shared_ptr<EBDataCollection> m_ebdc;
162 EB2::Level const* m_parent = nullptr;
163 Gpu::DeviceVector<Array4<Real const>> m_eb_data;
164 int m_face_dir = -1;
165};
166
169std::unique_ptr<EBFArrayBoxFactory>
170makeEBFabFactory (const Geometry& a_geom,
171 const BoxArray& a_ba,
172 const DistributionMapping& a_dm,
173 const Vector<int>& a_ngrow, EBSupport a_support);
174
177std::unique_ptr<EBFArrayBoxFactory>
178makeEBFabFactory (const EB2::Level*,
179 const BoxArray& a_ba,
180 const DistributionMapping& a_dm,
181 const Vector<int>& a_ngrow, EBSupport a_support);
182
185std::unique_ptr<EBFArrayBoxFactory>
186makeEBFabFactory (const EB2::IndexSpace*, const Geometry& a_geom,
187 const BoxArray& a_ba,
188 const DistributionMapping& a_dm,
189 const Vector<int>& a_ngrow, EBSupport a_support);
190
191}
192
193#endif
Fixed-size array types for use on GPU and CPU.
Abstract factory interface for creating and destroying FAB objects.
Problem-domain geometry: maps between index space and physical space.
Reference-counted collection of Boxes.
Definition AMReX_BoxArray.H:676
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:51
Definition AMReX_EB2.H:28
Definition AMReX_EB2_Level.H:42
FAB storing EBCellFlag data per cell.
Definition AMReX_EBCellFlag.H:324
Aggregates the EB data required to build EB-aware MultiFabs/FabFactories.
Definition AMReX_EBDataCollection.H:27
Definition AMReX_EBFabFactory.H:32
const MultiCutFab & getBndryArea() const noexcept
Boundary area.
Definition AMReX_EBFabFactory.H:107
void destroy(FArrayBox *fab) const final
Destroy a FAB produced by this factory.
Definition AMReX_EBFabFactory.cpp:207
EBFArrayBoxFactory * clone() const final
Produce a deep copy of this factory (excluding EB level ownership).
Definition AMReX_EBFabFactory.cpp:222
int faceDir() const noexcept
Face direction if this is an FC factory (-1 for CC mode).
Definition AMReX_EBFabFactory.H:142
EB2::IndexSpace const * getEBIndexSpace() const noexcept
Definition AMReX_EBFabFactory.cpp:234
EB2::Level const * getEBLevel() const noexcept
Definition AMReX_EBFabFactory.H:129
const MultiCutFab & getBndryNormal() const noexcept
Boundary normals.
Definition AMReX_EBFabFactory.H:104
const FabArray< EBCellFlagFab > & getMultiEBCellFlagFab() const noexcept
EB cell flags for all boxes.
Definition AMReX_EBFabFactory.H:88
bool isAllRegular() const noexcept
Definition AMReX_EBFabFactory.cpp:228
const BoxArray & boxArray() const noexcept
BoxArray describing the FAB layout.
Definition AMReX_EBFabFactory.cpp:257
EBData getEBData(MFIter const &mfi) const noexcept
Convenience wrapper returning EBData views for the FAB referenced by mfi.
Definition AMReX_EBFabFactory.cpp:269
iMultiFab const * getCutCellMask() const noexcept
Definition AMReX_EBFabFactory.H:149
int maxCoarseningLevel() const noexcept
Maximum coarse level supported by the EB hierarchy.
Definition AMReX_EBFabFactory.cpp:240
const DistributionMapping & DistributionMap() const noexcept
Distribution mapping describing the FABs this factory allocates.
Definition AMReX_EBFabFactory.cpp:251
FArrayBox * create_alias(FArrayBox const &rhs, int scomp, int ncomp) const final
Create an alias view into an existing EB-aware FAB.
Definition AMReX_EBFabFactory.cpp:193
const MultiCutFab & getCentroid() const noexcept
Cell centroid.
Definition AMReX_EBFabFactory.H:98
Array< const MultiCutFab *, 3 > getEdgeCent() const noexcept
Edge centroids.
Definition AMReX_EBFabFactory.H:121
const MultiCutFab & getBndryCent() const noexcept
Boundary centroid.
Definition AMReX_EBFabFactory.H:101
EBFArrayBoxFactory(EBFArrayBoxFactory &&) noexcept=default
Array< const MultiCutFab *, 3 > getAreaFrac() const noexcept
Area fractions along each axis.
Definition AMReX_EBFabFactory.H:110
Array< const MultiCutFab *, 3 > getFaceCent() const noexcept
Definition AMReX_EBFabFactory.H:116
bool hasEBInfo() const noexcept
True if EB geometric data beyond flags is available.
Definition AMReX_EBFabFactory.cpp:263
~EBFArrayBoxFactory() override=default
const MultiFab & getLevelSet() const noexcept
Level set field.
Definition AMReX_EBFabFactory.H:92
const MultiFab & getVolFrac() const noexcept
Volume fraction.
Definition AMReX_EBFabFactory.H:95
const Geometry & Geom() const noexcept
Geometry inherited from the EB level.
Definition AMReX_EBFabFactory.H:140
FArrayBox * create(const Box &box, int ncomps, const FabInfo &info, int box_index) const final
Allocate an EB-aware FAB for box with ncomps components.
Definition AMReX_EBFabFactory.cpp:177
EBDataArrays getEBDataArrays() const noexcept
Return GPU-accessible array views for all FABs owned by this factory.
Definition AMReX_EBFabFactory.cpp:283
EBFArrayBoxFactory(const EBFArrayBoxFactory &)=default
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:237
An Array of FortranArrayBox(FAB)-like Objects.
Definition AMReX_FabArray.H:356
Abstract factory interface for creating, aliasing, and destroying FAB objects.
Definition AMReX_FabFactory.H:73
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:85
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:88
FabArray façade that only allocates cut-cell Fabs (skipping regular cells).
Definition AMReX_MultiCutFab.H:87
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
A Collection of IArrayBoxes.
Definition AMReX_iMultiFab.H:34
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
std::unique_ptr< EBFArrayBoxFactory > makeEBFabFactory(const Geometry &a_geom, const BoxArray &a_ba, const DistributionMapping &a_dm, const Vector< int > &a_ngrow, EBSupport a_support)
Definition AMReX_EBFabFactory.cpp:297
std::array< T, N > Array
Definition AMReX_Array.H:31
Definition AMReX_Amr.cpp:50
EBSupport
Requested EB metadata level for factories and utilities.
Definition AMReX_EBSupport.H:14
A multidimensional array accessor.
Definition AMReX_Array4.H:288
Views aggregating EBData for multiple boxes.
Definition AMReX_EBData.H:208
Set of Array4 views to EB data for a single box (plus helpers).
Definition AMReX_EBData.H:34
Construction hints passed to FabFactory::create.
Definition AMReX_FabFactory.H:41