Block-Structured AMR Software Framework
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
14namespace amrex
15{
16
17namespace EB2 {
18 class Level;
19 class IndexSpace;
20}
21
23 : public FabFactory<FArrayBox>
24{
25public:
26
27 EBFArrayBoxFactory (const EB2::Level& a_level, const Geometry& a_geom,
28 const BoxArray& a_ba, const DistributionMapping& a_dm,
29 const Vector<int>& a_ngrow, EBSupport a_support);
30 ~EBFArrayBoxFactory () override = default;
31
33 EBFArrayBoxFactory (EBFArrayBoxFactory&&) noexcept = default;
34
35 EBFArrayBoxFactory () = delete;
36 EBFArrayBoxFactory& operator= (const EBFArrayBoxFactory&) = delete;
37 EBFArrayBoxFactory& operator= (EBFArrayBoxFactory&&) = delete;
38
40 FArrayBox* create (const Box& box, int ncomps, const FabInfo& info, int box_index) const final;
41
43 FArrayBox* create_alias (FArrayBox const& rhs, int scomp, int ncomp) const final;
44
45 void destroy (FArrayBox* fab) const final;
46
48 EBFArrayBoxFactory* clone () const final;
49
50 [[nodiscard]] const FabArray<EBCellFlagFab>& getMultiEBCellFlagFab () const noexcept
51 { return m_ebdc->getMultiEBCellFlagFab(); }
52
53 [[nodiscard]] const MultiFab& getLevelSet () const noexcept { return m_ebdc->getLevelSet(); }
54
55 [[nodiscard]] const MultiFab& getVolFrac () const noexcept { return m_ebdc->getVolFrac(); }
56
57 [[nodiscard]] const MultiCutFab& getCentroid () const noexcept { return m_ebdc->getCentroid(); }
58
59 [[nodiscard]] const MultiCutFab& getBndryCent () const noexcept { return m_ebdc->getBndryCent(); }
60
61 [[nodiscard]] const MultiCutFab& getBndryNormal () const noexcept { return m_ebdc->getBndryNormal(); }
62
63 [[nodiscard]] const MultiCutFab& getBndryArea () const noexcept { return m_ebdc->getBndryArea(); }
64
65 [[nodiscard]] Array<const MultiCutFab*,AMREX_SPACEDIM> getAreaFrac () const noexcept {
66 return m_ebdc->getAreaFrac();
67 }
68
69 // For y-face-centroid, the two components are for x and then z-directions, respectively.
70 [[nodiscard]] Array<const MultiCutFab*,AMREX_SPACEDIM> getFaceCent () const noexcept {
71 return m_ebdc->getFaceCent();
72 }
73
74 [[nodiscard]] Array<const MultiCutFab*,AMREX_SPACEDIM> getEdgeCent () const noexcept {
75 return m_ebdc->getEdgeCent();
76 }
77
78 [[nodiscard]] bool isAllRegular () const noexcept;
79
80 [[nodiscard]] EB2::Level const* getEBLevel () const noexcept { return m_parent; }
81 [[nodiscard]] EB2::IndexSpace const* getEBIndexSpace () const noexcept;
82 [[nodiscard]] int maxCoarseningLevel () const noexcept;
83
84 [[nodiscard]] const DistributionMapping& DistributionMap () const noexcept;
85 [[nodiscard]] const BoxArray& boxArray () const noexcept;
86 [[nodiscard]] const Geometry& Geom () const noexcept { return m_geom; }
87
88 [[nodiscard]] bool hasEBInfo() const noexcept;
89
92 [[nodiscard]] iMultiFab const* getCutCellMask () const noexcept { return m_ebdc->getCutCellMask(); }
93
94 [[nodiscard]] EBData getEBData (MFIter const& mfi) const noexcept;
95
96private:
97
100 std::shared_ptr<EBDataCollection> m_ebdc;
101 EB2::Level const* m_parent = nullptr;
103};
104
105std::unique_ptr<EBFArrayBoxFactory>
106makeEBFabFactory (const Geometry& a_geom,
107 const BoxArray& a_ba,
108 const DistributionMapping& a_dm,
109 const Vector<int>& a_ngrow, EBSupport a_support);
110
111std::unique_ptr<EBFArrayBoxFactory>
113 const BoxArray& a_ba,
114 const DistributionMapping& a_dm,
115 const Vector<int>& a_ngrow, EBSupport a_support);
116
117std::unique_ptr<EBFArrayBoxFactory>
118makeEBFabFactory (const EB2::IndexSpace*, const Geometry& a_geom,
119 const BoxArray& a_ba,
120 const DistributionMapping& a_dm,
121 const Vector<int>& a_ngrow, EBSupport a_support);
122
123}
124
125#endif
#define AMREX_NODISCARD
Definition AMReX_Extension.H:251
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:550
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:41
Definition AMReX_EB2.H:26
Definition AMReX_EB2_Level.H:33
Definition AMReX_EBCellFlag.H:287
Definition AMReX_EBFabFactory.H:24
EBSupport m_support
Definition AMReX_EBFabFactory.H:98
AMREX_NODISCARD FArrayBox * create(const Box &box, int ncomps, const FabInfo &info, int box_index) const final
Definition AMReX_EBFabFactory.cpp:97
std::shared_ptr< EBDataCollection > m_ebdc
Definition AMReX_EBFabFactory.H:100
Geometry m_geom
Definition AMReX_EBFabFactory.H:99
const MultiCutFab & getBndryArea() const noexcept
Definition AMReX_EBFabFactory.H:63
Array< const MultiCutFab *, AMREX_SPACEDIM > getEdgeCent() const noexcept
Definition AMReX_EBFabFactory.H:74
void destroy(FArrayBox *fab) const final
Definition AMReX_EBFabFactory.cpp:127
Array< const MultiCutFab *, AMREX_SPACEDIM > getFaceCent() const noexcept
Definition AMReX_EBFabFactory.H:70
EB2::IndexSpace const * getEBIndexSpace() const noexcept
Definition AMReX_EBFabFactory.cpp:154
EB2::Level const * getEBLevel() const noexcept
Definition AMReX_EBFabFactory.H:80
const MultiCutFab & getBndryNormal() const noexcept
Definition AMReX_EBFabFactory.H:61
const FabArray< EBCellFlagFab > & getMultiEBCellFlagFab() const noexcept
Definition AMReX_EBFabFactory.H:50
bool isAllRegular() const noexcept
Definition AMReX_EBFabFactory.cpp:148
const BoxArray & boxArray() const noexcept
Definition AMReX_EBFabFactory.cpp:177
EBData getEBData(MFIter const &mfi) const noexcept
Definition AMReX_EBFabFactory.cpp:189
iMultiFab const * getCutCellMask() const noexcept
Definition AMReX_EBFabFactory.H:92
int maxCoarseningLevel() const noexcept
Definition AMReX_EBFabFactory.cpp:160
Array< const MultiCutFab *, AMREX_SPACEDIM > getAreaFrac() const noexcept
Definition AMReX_EBFabFactory.H:65
const DistributionMapping & DistributionMap() const noexcept
Definition AMReX_EBFabFactory.cpp:171
EB2::Level const * m_parent
Definition AMReX_EBFabFactory.H:101
const MultiCutFab & getCentroid() const noexcept
Definition AMReX_EBFabFactory.H:57
const MultiCutFab & getBndryCent() const noexcept
Definition AMReX_EBFabFactory.H:59
EBFArrayBoxFactory(EBFArrayBoxFactory &&) noexcept=default
Gpu::DeviceVector< Array4< Real const > > m_eb_data
Definition AMReX_EBFabFactory.H:102
AMREX_NODISCARD FArrayBox * create_alias(FArrayBox const &rhs, int scomp, int ncomp) const final
Definition AMReX_EBFabFactory.cpp:113
bool hasEBInfo() const noexcept
Definition AMReX_EBFabFactory.cpp:183
~EBFArrayBoxFactory() override=default
const MultiFab & getLevelSet() const noexcept
Definition AMReX_EBFabFactory.H:53
AMREX_NODISCARD EBFArrayBoxFactory * clone() const final
Definition AMReX_EBFabFactory.cpp:142
const MultiFab & getVolFrac() const noexcept
Definition AMReX_EBFabFactory.H:55
const Geometry & Geom() const noexcept
Definition AMReX_EBFabFactory.H:86
EBFArrayBoxFactory(const EBFArrayBoxFactory &)=default
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:229
An Array of FortranArrayBox(FAB)-like Objects.
Definition AMReX_FabArray.H:344
Definition AMReX_FabFactory.H:50
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:73
Definition AMReX_MFIter.H:57
Definition AMReX_MultiCutFab.H:81
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:38
Definition AMReX_PODVector.H:262
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:27
Definition AMReX_iMultiFab.H:32
Definition AMReX_Amr.cpp:49
EBSupport
Definition AMReX_EBSupport.H:7
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:202
std::array< T, N > Array
Definition AMReX_Array.H:24
Definition AMReX_EBData.H:26
Definition AMReX_FabFactory.H:27