13#ifndef CD_EBGRADIENT_H
14#define CD_EBGRADIENT_H
20#include <EBLevelGrid.H>
21#include <AggStencil.H>
22#include <FaceIterator.H>
26#include <CD_NamespaceHeader.H>
80 const EBLevelGrid& a_eblgFine,
81 const EBLevelGrid& a_eblgFiCo,
86 const int a_weighting,
87 const IntVect a_ghostVector)
noexcept;
107 define(const EBLevelGrid& a_eblg,
108 const EBLevelGrid& a_eblgFine,
109 const EBLevelGrid& a_eblgFiCo,
110 const
bool a_hasFine,
114 const
int a_weighting,
115 const IntVect a_ghostVector) noexcept;
123 computeLevelGradient(LevelData<EBCellFAB>& a_gradient, const LevelData<EBCellFAB>& a_phi) const noexcept;
144 const LevelData<EBCellFAB>& a_phi,
145 const LevelData<EBCellFAB>& a_phiFine) const noexcept;
281 defineMasks(LevelData<FArrayBox>& a_coarMaskCF, LevelData<FArrayBox>& a_coarMaskInvalid) noexcept;
289 defineIteratorsEBCF(const LevelData<FArrayBox>& a_coarMaskCF, const LevelData<FArrayBox>& a_coarMaskInvalid) noexcept;
315 const VolIndex& a_vof,
316 const EBISBox& a_ebisBox,
317 const DenseIntVectSet& a_validRegion,
318 const Real a_dx) const noexcept;
339 VoFStencil& a_stencilFine,
340 const VolIndex& a_vofCoar,
342 const EBISLayout& a_ebislCoar,
343 const EBISLayout& a_ebislFine,
344 const DataIndex& a_dit,
345 const DenseIntVectSet& a_validCellsCoar,
346 const DenseIntVectSet& a_validCellsFine,
347 const Real& a_dxCoar,
348 const Real& a_dxFine,
350 const
int& a_weight) const noexcept;
362 const EBISBox& a_ebisBox,
363 const FArrayBox& a_invalidRegion) const noexcept;
372#include <CD_NamespaceFooter.H>
Declaration of cell positions.
Class for computing gradients in an EBAMR context.
Definition CD_EBGradient.H:50
virtual ~EBGradient() noexcept
Destructor (does nothing)
Definition CD_EBGradient.cpp:123
EBGradient(const EBGradient &a_other)=delete
Disallowed copy constructor.
virtual void makeAggStencils() noexcept
Turn raw stencils into optimized AggStencils.
Definition CD_EBGradient.cpp:1097
virtual bool isFiniteDifferenceStencilValid(const IntVect &a_ivCoar, const EBISBox &a_ebisBox, const FArrayBox &a_invalidRegion) const noexcept
Check if a cell can produce valid finite difference stencils.
Definition CD_EBGradient.cpp:514
bool m_hasEBCF
True if we have EBCF crossings that require special stencils.
Definition CD_EBGradient.H:191
virtual void computeLevelGradient(LevelData< EBCellFAB > &a_gradient, const LevelData< EBCellFAB > &a_phi) const noexcept
Compute gradient using data on the input level only.
Definition CD_EBGradient.cpp:129
EBLevelGrid m_eblgFine
Fine grids.
Definition CD_EBGradient.H:171
virtual void define(const EBLevelGrid &a_eblg, const EBLevelGrid &a_eblgFine, const EBLevelGrid &a_eblgFiCo, const bool a_hasFine, const Real a_dx, const int a_refRat, const int a_order, const int a_weighting, const IntVect a_ghostVector) noexcept
Define function.
Definition CD_EBGradient.cpp:50
EBLevelGrid m_eblgFiCo
Refined coarse grids.
Definition CD_EBGradient.H:176
Real m_dxFine
Resolution on finer level.
Definition CD_EBGradient.H:201
virtual void computeAMRGradient(LevelData< EBCellFAB > &a_gradient, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiFine) const noexcept
Compute gradient using two-level stencils (matching at EBCF).
Definition CD_EBGradient.cpp:266
bool m_isDefined
Is defined or not.
Definition CD_EBGradient.H:181
virtual void defineStencilsEBCF(const LevelData< FArrayBox > &a_coarMaskInvalid) noexcept
Define stencils for interpolation across the EBCF refinement boundary.
Definition CD_EBGradient.cpp:657
Real m_dx
Resolution on this level.
Definition CD_EBGradient.H:196
virtual bool getLeastSquaresStencil(VoFStencil &a_stencilCoar, VoFStencil &a_stencilFine, const VolIndex &a_vofCoar, const CellLocation &a_dataLocation, const EBISLayout &a_ebislCoar, const EBISLayout &a_ebislFine, const DataIndex &a_dit, const DenseIntVectSet &a_validCellsCoar, const DenseIntVectSet &a_validCellsFine, const Real &a_dxCoar, const Real &a_dxFine, const int &a_order, const int &a_weight) const noexcept
Build a gradient stencil using least squares.
Definition CD_EBGradient.cpp:867
int m_weighting
Weight (for least squares)
Definition CD_EBGradient.H:211
LayoutData< BaseIVFAB< VoFStencil > > m_ebcfStencilsFine
Part of EBCF gradient stencil which reaches into the coarse level.
Definition CD_EBGradient.H:242
bool m_hasFine
True if we have a finer level (m_eblgFine is defined)
Definition CD_EBGradient.H:186
LayoutData< BaseIVFAB< VoFStencil > > m_levelStencils
Stencils for boundaries and cut-cells.
Definition CD_EBGradient.H:232
LayoutData< RefCountedPtr< AggStencil< EBCellFAB, EBCellFAB > > > m_aggLevelStencils[SpaceDim]
AggStencils for boundaries and cut-cells. Provides faster application of m_levelStencils.
Definition CD_EBGradient.H:248
Copier m_copier
Pre-built copier for making copying from m_eblg to m_eblgFiCo go faster.
Definition CD_EBGradient.H:226
virtual void defineIteratorsEBCF(const LevelData< FArrayBox > &a_coarMaskCF, const LevelData< FArrayBox > &a_coarMaskInvalid) noexcept
Define iterators and cells that need modified stencils.
Definition CD_EBGradient.cpp:559
int m_refRat
Refinement factor between fine and coarse level.
Definition CD_EBGradient.H:216
int m_order
Desired order for least squares stencils.
Definition CD_EBGradient.H:206
EBLevelGrid m_eblg
Grids.
Definition CD_EBGradient.H:166
static constexpr int m_comp
Scalar component to reach into.
Definition CD_EBGradient.H:151
IntVect m_ghostVector
Number of ghost cells in incoming data holders.
Definition CD_EBGradient.H:221
virtual void defineBuffers() noexcept
Define buffer data.
Definition CD_EBGradient.cpp:773
virtual void computeNormalDerivative(LevelData< EBFluxFAB > &a_gradient, const LevelData< EBCellFAB > &a_phi) const noexcept
Compute the gradient component which is normal to the face, using centered differencing.
Definition CD_EBGradient.cpp:194
EBGradient()=delete
Disallowed constructor.
virtual void defineMasks(LevelData< FArrayBox > &a_coarMaskCF, LevelData< FArrayBox > &a_coarMaskInvalid) noexcept
Make masks.
Definition CD_EBGradient.cpp:422
virtual bool getFiniteDifferenceStencil(VoFStencil &a_stencil, const VolIndex &a_vof, const EBISBox &a_ebisBox, const DenseIntVectSet &a_validRegion, const Real a_dx) const noexcept
Get a finite difference stencil, assuming that the data is cell-centered.
Definition CD_EBGradient.cpp:781
LayoutData< VoFIterator > m_ebcfIterator
Iterator for EBCF cells.
Definition CD_EBGradient.H:260
LayoutData< std::array< FaceIterator, SpaceDim > > m_multiCutFaceIter
Face iterators restricted to multiply-cut faces per direction (valid box, SurroundingNoBoundary).
Definition CD_EBGradient.H:267
CellLocation m_dataLocation
How to interpret data locations.
Definition CD_EBGradient.H:161
LayoutData< BaseIVFAB< VoFStencil > > m_ebcfStencilsCoar
Part of EBCF gradient stencil which reaches into the coarse level.
Definition CD_EBGradient.H:237
LayoutData< VoFIterator > m_levelIterator
Iterator for boundary cells (either domain or EB)
Definition CD_EBGradient.H:254
virtual void defineLevelStencils() noexcept
Define level stencils.
Definition CD_EBGradient.cpp:341
static constexpr int m_nComp
Number of components that are supported.
Definition CD_EBGradient.H:156
Cell
Enum for distinguishing between cell locations.
Definition CD_Location.H:31