Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_EBDataCollection.H
Go to the documentation of this file.
1#ifndef AMREX_EB_DATA_COLLECTION_H_
2#define AMREX_EB_DATA_COLLECTION_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_Geometry.H>
6#include <AMReX_EBCellFlag.H>
7#include <AMReX_EBSupport.H>
8#include <AMReX_Array.H>
9
16namespace amrex {
17
18class EBFArrayBoxFactory;
19template <class T> class FabArray;
20class MultiFab;
21class iMultiFab;
22class MultiCutFab;
23namespace EB2 { class Level; }
24
27{
28public:
29
30 friend class EBFArrayBoxFactory;
31
42 EBDataCollection (const EB2::Level& a_level, const Geometry& a_geom,
43 const BoxArray& a_ba, const DistributionMapping& a_dm,
44 Vector<int> a_ngrow, EBSupport a_support);
45
47
52
54 [[nodiscard]] const FabArray<EBCellFlagFab>& getMultiEBCellFlagFab () const;
56 [[nodiscard]] const MultiFab& getLevelSet () const;
58 [[nodiscard]] const MultiFab& getVolFrac () const;
60 [[nodiscard]] const MultiCutFab& getCentroid () const;
62 [[nodiscard]] const MultiCutFab& getBndryCent () const;
64 [[nodiscard]] const MultiCutFab& getBndryArea () const;
66 [[nodiscard]] const MultiCutFab& getBndryNormal () const;
74 [[nodiscard]] const iMultiFab* getCutCellMask () const;
75
76 // public for cuda
77 void extendDataOutsideDomain (IntVect const& level_ng);
78
79private:
80
81 Vector<int> m_ngrow;
82 EBSupport m_support;
83 Geometry m_geom;
84
85 // have to use pointer to break include loop
86
87 // EBSupport::basic
88 FabArray<EBCellFlagFab>* m_cellflags = nullptr;
89 MultiFab* m_levelset = nullptr;
90
91 // EBSupport::volume
92 MultiFab* m_volfrac = nullptr;
93 MultiCutFab* m_centroid = nullptr;
94
95 // EBSupport::full
96 MultiCutFab* m_bndrycent = nullptr;
97 MultiCutFab* m_bndryarea = nullptr;
98 MultiCutFab* m_bndrynorm = nullptr;
99 Array<MultiCutFab*,AMREX_SPACEDIM> m_areafrac {{AMREX_D_DECL(nullptr, nullptr, nullptr)}};
100 Array<MultiCutFab*,AMREX_SPACEDIM> m_facecent {{AMREX_D_DECL(nullptr, nullptr, nullptr)}};
101 Array<MultiCutFab*,AMREX_SPACEDIM> m_edgecent {{AMREX_D_DECL(nullptr, nullptr, nullptr)}};
102
103 // for levels created by addRegularCoarseLevels only
104 iMultiFab* m_cutcellmask = nullptr;
105};
106
107}
108
109#endif
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:568
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:43
Definition AMReX_EB2_Level.H:42
Aggregates the EB data required to build EB-aware MultiFabs/FabFactories.
Definition AMReX_EBDataCollection.H:27
const MultiCutFab & getCentroid() const
Cell-centroid MultiCutFab.
Definition AMReX_EBDataCollection.cpp:276
Array< const MultiCutFab *, 3 > getEdgeCent() const
Edge centroid MultiCutFabs.
Definition AMReX_EBDataCollection.cpp:311
EBDataCollection(EBDataCollection &&)=delete
void extendDataOutsideDomain(IntVect const &level_ng)
Definition AMReX_EBDataCollection.cpp:87
EBDataCollection & operator=(const EBDataCollection &)=delete
Array< const MultiCutFab *, 3 > getFaceCent() const
Face centroid MultiCutFabs.
Definition AMReX_EBDataCollection.cpp:304
const MultiFab & getLevelSet() const
Level set field of the EB (basic support and above).
Definition AMReX_EBDataCollection.cpp:262
const MultiCutFab & getBndryCent() const
Boundary centroid MultiCutFab.
Definition AMReX_EBDataCollection.cpp:283
Array< const MultiCutFab *, 3 > getAreaFrac() const
Area fractions for faces in each coordinate direction.
Definition AMReX_EBDataCollection.cpp:297
const MultiCutFab & getBndryArea() const
Boundary area MultiCutFab.
Definition AMReX_EBDataCollection.cpp:290
const iMultiFab * getCutCellMask() const
cut-cell mask. The returned pointer is nullptr for AllRegular EB.
Definition AMReX_EBDataCollection.cpp:325
const MultiFab & getVolFrac() const
Volume fraction (EBSupport::volume/full).
Definition AMReX_EBDataCollection.cpp:269
~EBDataCollection()
Definition AMReX_EBDataCollection.cpp:237
EBDataCollection(const EBDataCollection &)=delete
const FabArray< EBCellFlagFab > & getMultiEBCellFlagFab() const
Access the EBCellFlag data (always available at least for EBSupport::basic).
Definition AMReX_EBDataCollection.cpp:255
const MultiCutFab & getBndryNormal() const
Boundary normal MultiCutFab.
Definition AMReX_EBDataCollection.cpp:318
Definition AMReX_EBFabFactory.H:32
An Array of FortranArrayBox(FAB)-like Objects.
Definition AMReX_FabArray.H:350
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
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:28
A Collection of IArrayBoxes.
Definition AMReX_iMultiFab.H:34
std::array< T, N > Array
Definition AMReX_Array.H:26
Definition AMReX_Amr.cpp:49
EBSupport
Requested EB metadata level for factories and utilities.
Definition AMReX_EBSupport.H:14