chombo-discharge
Loading...
Searching...
No Matches
CD_EBGradient.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_EBGRADIENT_H
14#define CD_EBGRADIENT_H
15
16// Std includes
17#include <array>
18
19// Chombo includes
20#include <EBLevelGrid.H>
21#include <AggStencil.H>
22#include <FaceIterator.H>
23
24// Our includes
25#include <CD_Location.H>
26#include <CD_NamespaceHeader.H>
27
50{
51public:
56
60 EBGradient() = delete;
61
65 EBGradient(const EBGradient& a_other) = delete;
66
79 EBGradient(const EBLevelGrid& a_eblg,
80 const EBLevelGrid& a_eblgFine,
81 const EBLevelGrid& a_eblgFiCo,
82 const bool a_hasFine,
83 const Real a_dx,
84 const int a_refRat,
85 const int a_order,
86 const int a_weighting,
87 const IntVect a_ghostVector) noexcept;
88
92 virtual ~EBGradient() noexcept;
93
106 virtual void
107 define(const EBLevelGrid& a_eblg,
108 const EBLevelGrid& a_eblgFine,
109 const EBLevelGrid& a_eblgFiCo,
110 const bool a_hasFine,
111 const Real a_dx,
112 const int a_refRat,
113 const int a_order,
114 const int a_weighting,
115 const IntVect a_ghostVector) noexcept;
116
122 virtual void
123 computeLevelGradient(LevelData<EBCellFAB>& a_gradient, const LevelData<EBCellFAB>& a_phi) const noexcept;
124
133 virtual void
134 computeNormalDerivative(LevelData<EBFluxFAB>& a_gradient, const LevelData<EBCellFAB>& a_phi) const noexcept;
135
142 virtual void
143 computeAMRGradient(LevelData<EBCellFAB>& a_gradient,
144 const LevelData<EBCellFAB>& a_phi,
145 const LevelData<EBCellFAB>& a_phiFine) const noexcept;
146
147protected:
151 static constexpr int m_comp = 0;
152
156 static constexpr int m_nComp = 1;
157
162
166 EBLevelGrid m_eblg;
167
171 EBLevelGrid m_eblgFine;
172
176 EBLevelGrid m_eblgFiCo;
177
182
187
192
196 Real m_dx;
197
202
207
212
217
222
226 Copier m_copier;
227
232 LayoutData<BaseIVFAB<VoFStencil>> m_levelStencils;
233
237 LayoutData<BaseIVFAB<VoFStencil>> m_ebcfStencilsCoar;
238
242 LayoutData<BaseIVFAB<VoFStencil>> m_ebcfStencilsFine;
243
248 LayoutData<RefCountedPtr<AggStencil<EBCellFAB, EBCellFAB>>> m_aggLevelStencils[SpaceDim];
249
254 mutable LayoutData<VoFIterator> m_levelIterator;
255
260 mutable LayoutData<VoFIterator> m_ebcfIterator;
261
267 mutable LayoutData<std::array<FaceIterator, SpaceDim>> m_multiCutFaceIter;
268
272 virtual void
273 defineLevelStencils() noexcept;
274
280 virtual void
281 defineMasks(LevelData<FArrayBox>& a_coarMaskCF, LevelData<FArrayBox>& a_coarMaskInvalid) noexcept;
282
288 virtual void
289 defineIteratorsEBCF(const LevelData<FArrayBox>& a_coarMaskCF, const LevelData<FArrayBox>& a_coarMaskInvalid) noexcept;
290
295 virtual void
296 defineStencilsEBCF(const LevelData<FArrayBox>& a_coarMaskInvalid) noexcept;
297
301 virtual void
302 defineBuffers() noexcept;
303
313 virtual bool
314 getFiniteDifferenceStencil(VoFStencil& a_stencil,
315 const VolIndex& a_vof,
316 const EBISBox& a_ebisBox,
317 const DenseIntVectSet& a_validRegion,
318 const Real a_dx) const noexcept;
319
337 virtual bool
338 getLeastSquaresStencil(VoFStencil& a_stencilCoar,
339 VoFStencil& a_stencilFine,
340 const VolIndex& a_vofCoar,
341 const CellLocation& a_dataLocation,
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,
349 const int& a_order,
350 const int& a_weight) const noexcept;
351
360 virtual bool
361 isFiniteDifferenceStencilValid(const IntVect& a_ivCoar,
362 const EBISBox& a_ebisBox,
363 const FArrayBox& a_invalidRegion) const noexcept;
364
368 virtual void
369 makeAggStencils() noexcept;
370};
371
372#include <CD_NamespaceFooter.H>
373
374#endif
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