chombo-discharge
Loading...
Searching...
No Matches
CD_EBLeastSquaresMultigridInterpolator.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_EBLEASTSQUARESMULTIGRIDINTERPOLATOR_H
14#define CD_EBLEASTSQUARESMULTIGRIDINTERPOLATOR_H
15
16// Std includes
17#include <map>
18
19// Chombo includes
20#include <EBLevelGrid.H>
21#include <QuadCFInterp.H>
22#include <AggStencil.H>
23
24// Our includes
25#include <CD_Location.H>
28#include <CD_NamespaceHeader.H>
29
54{
55public:
60
65
70
86 EBLeastSquaresMultigridInterpolator(const EBLevelGrid& a_eblgFine,
87 const EBLevelGrid& a_eblgCoFi,
88 const EBLevelGrid& a_eblgCoar,
89 const CellLocation a_dataLocation,
90 const IntVect& a_ghostVector,
91 const int a_refRat,
92 const int a_ghostCF,
93 const int a_order,
94 const int a_weighting = 0) noexcept;
95
99 virtual ~EBLeastSquaresMultigridInterpolator() noexcept;
100
105 virtual int
106 getGhostCF() const noexcept override;
107
119 virtual std::pair<DerivStencil, DerivStencil>
120 getInterpolationStencilRegular(const IntVect& a_fineGhost,
121 const DataIndex& a_din,
122 const int a_dir,
123 const Side::LoHiSide a_side) const noexcept override;
124
134 virtual std::pair<VoFStencil, VoFStencil>
135 getInterpolationStencilEB(const VolIndex& a_fineGhost, const DataIndex& a_din) const noexcept override;
136
143 virtual void
144 coarseFineInterp(LevelData<EBCellFAB>& a_phiFine,
145 const LevelData<EBCellFAB>& a_phiCoar,
146 const Interval a_variables) const noexcept override;
147
153 virtual void
154 coarseFineInterpH(LevelData<EBCellFAB>& a_phiFine, const Interval a_variables) const noexcept override;
155
166 virtual void
167 coarseFineInterpH(EBCellFAB& a_phiFine, const Interval a_variables, const DataIndex& a_din) const noexcept override;
168
169protected:
173 static constexpr int m_stenComp = 0;
174
178 static constexpr int m_numStenComp = 1;
179
184 static constexpr int m_comp = 0;
185
190
194 EBLevelGrid m_eblgFine;
195
199 EBLevelGrid m_eblgCoar;
200
204 EBLevelGrid m_eblgCoFi;
205
209 Copier m_copier;
210
220 mutable LevelData<EBCellFAB> m_coarsenedFineData;
221
225 mutable LayoutData<VoFIterator> m_ghostIterFine;
226
231
236
242
247
253
258
263
268 LayoutData<IntVectSet> m_ghostCells;
269
273 LayoutData<BaseIVFAB<VoFStencil>> m_fineStencils;
274
278 LayoutData<BaseIVFAB<VoFStencil>> m_coarStencils;
279
286 LayoutData<RefCountedPtr<AggStencil<EBCellFAB, EBCellFAB>>> m_aggFineStencils;
287
293 LayoutData<RefCountedPtr<AggStencil<EBCellFAB, EBCellFAB>>> m_aggCoarStencils;
294
300 LayoutData<std::map<std::pair<int, Side::LoHiSide>, Box>> m_cfivs;
301
306
311
315 virtual void
316 defineGhostRegions() noexcept;
317
321 virtual void
322 defineBuffers() noexcept;
323
327 virtual void
328 defineCoarseInterp() noexcept;
329
333 virtual void
334 defineStencilsEBCF() noexcept;
335
339 virtual void
340 makeAggStencils() noexcept;
341
359 virtual bool
360 getStencil(VoFStencil& a_stencilFine,
361 VoFStencil& a_stencilCoar,
362 const CellLocation& a_dataLocation,
363 const VolIndex& a_ghostVofFine,
364 const VolIndex& a_ghostVofCoar,
365 const EBISBox& a_ebisboxFine,
366 const EBISBox& a_ebisboxCoar,
367 const DenseIntVectSet& a_validFineCells,
368 const DenseIntVectSet& a_validCoarCells,
369 const Real& a_dxFine,
370 const Real& a_dxCoar,
371 const int& a_order,
372 const int& a_weight) const noexcept;
373
381 virtual void
382 regularCoarseFineInterp(LevelData<EBCellFAB>& a_finePhi,
383 const LevelData<EBCellFAB>& a_coarPhi,
384 const int a_fineVar,
385 const int a_coarVar) const noexcept;
386};
387
388#include <CD_NamespaceFooter.H>
389
390#endif
Supporting class for doing the coarse-side interpolation for multigrid.
Parent base class for multigrid interpolation.
Declaration of cell positions.
Class for computing the required Taylor terms for doing the orthogonal extrapolation to the ghost cel...
Definition CD_CoarseInterpQuadCF.H:36
Multigrid interpolator class.
Definition CD_EBLeastSquaresMultigridInterpolator.H:54
virtual void coarseFineInterpH(LevelData< EBCellFAB > &a_phiFine, const Interval a_variables) const noexcept override
Do homogeneous interpolation.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:260
virtual void defineGhostRegions() noexcept
Define ghost cells to be filled in range m_ghostCF from each cut-cell.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:343
static constexpr int m_numStenComp
Number of variables in stencil data layouts.
Definition CD_EBLeastSquaresMultigridInterpolator.H:178
Copier m_copier
Copier for making copying into m_grownCoarData go faster.
Definition CD_EBLeastSquaresMultigridInterpolator.H:209
virtual int getGhostCF() const noexcept override
Return number of ghost cells across CF interface.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:94
LayoutData< RefCountedPtr< AggStencil< EBCellFAB, EBCellFAB > > > m_aggFineStencils
Fine grid interpolation stencils.
Definition CD_EBLeastSquaresMultigridInterpolator.H:286
EBLevelGrid m_eblgFine
Fine grids.
Definition CD_EBLeastSquaresMultigridInterpolator.H:194
IntVect m_ghostVectorCoFi
Number of ghost cells on the coarsened-fine grids. Needed because the fine grids need some of the coa...
Definition CD_EBLeastSquaresMultigridInterpolator.H:241
LayoutData< std::map< std::pair< int, Side::LoHiSide >, Box > > m_cfivs
Regular coarse-fine interface boxes.
Definition CD_EBLeastSquaresMultigridInterpolator.H:300
EBLeastSquaresMultigridInterpolator(const EBLeastSquaresMultigridInterpolator &a_other)=delete
Disallowed copy constructor.
LayoutData< BaseIVFAB< VoFStencil > > m_coarStencils
Coarse-grid interpolation stencils.
Definition CD_EBLeastSquaresMultigridInterpolator.H:278
virtual void coarseFineInterp(LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phiCoar, const Interval a_variables) const noexcept override
Do inhomogeneous interpolation.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:190
virtual void regularCoarseFineInterp(LevelData< EBCellFAB > &a_finePhi, const LevelData< EBCellFAB > &a_coarPhi, const int a_fineVar, const int a_coarVar) const noexcept
Do regular coarse-fine interpolation as if the EB is not there.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:822
LayoutData< IntVectSet > m_ghostCells
Ghost cells that will be interpolated near the cut-cells.
Definition CD_EBLeastSquaresMultigridInterpolator.H:268
int m_refRat
Refinement factor between fine and coarse level.
Definition CD_EBLeastSquaresMultigridInterpolator.H:246
bool m_isDefined
Is defined or not.
Definition CD_EBLeastSquaresMultigridInterpolator.H:230
virtual std::pair< DerivStencil, DerivStencil > getInterpolationStencilRegular(const IntVect &a_fineGhost, const DataIndex &a_din, const int a_dir, const Side::LoHiSide a_side) const noexcept override
Get the interpolation stencil near the refinement boundary.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:100
EBLevelGrid m_eblgCoFi
Coarsened fine grids.
Definition CD_EBLeastSquaresMultigridInterpolator.H:204
int m_order
Interpolation order.
Definition CD_EBLeastSquaresMultigridInterpolator.H:257
LayoutData< CoarseInterpQuadCF > m_loCoarseInterpCF[SpaceDim]
For doing the coarse-side interpolation near the AMR interface.
Definition CD_EBLeastSquaresMultigridInterpolator.H:305
virtual bool getStencil(VoFStencil &a_stencilFine, VoFStencil &a_stencilCoar, const CellLocation &a_dataLocation, const VolIndex &a_ghostVofFine, const VolIndex &a_ghostVofCoar, const EBISBox &a_ebisboxFine, const EBISBox &a_ebisboxCoar, const DenseIntVectSet &a_validFineCells, const DenseIntVectSet &a_validCoarCells, const Real &a_dxFine, const Real &a_dxCoar, const int &a_order, const int &a_weight) const noexcept
Build an interpolation stencil.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:617
LayoutData< CoarseInterpQuadCF > m_hiCoarseInterpCF[SpaceDim]
For doing the coarse-side interpolation near the AMR interface.
Definition CD_EBLeastSquaresMultigridInterpolator.H:310
LayoutData< VoFIterator > m_ghostIterFine
Iterator over ghost cells.
Definition CD_EBLeastSquaresMultigridInterpolator.H:225
virtual void makeAggStencils() noexcept
Build the AggStencil objects for faster stencil aggregation.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:774
LayoutData< BaseIVFAB< VoFStencil > > m_fineStencils
Fine-grid interpolation stencils.
Definition CD_EBLeastSquaresMultigridInterpolator.H:273
IntVect m_ghostVectorFine
Minimum number of ghost cells in input data.
Definition CD_EBLeastSquaresMultigridInterpolator.H:235
EBLeastSquaresMultigridInterpolator()=delete
Disallowed constructor.
virtual void defineStencilsEBCF() noexcept
Define stencils for interpolation across the EBCF refinement boundary.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:462
virtual std::pair< VoFStencil, VoFStencil > getInterpolationStencilEB(const VolIndex &a_fineGhost, const DataIndex &a_din) const noexcept override
Get an explicit stencil for a ghost cell near the refinement boundary.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:170
CellLocation m_dataLocation
How to interpret data locations.
Definition CD_EBLeastSquaresMultigridInterpolator.H:189
LevelData< EBCellFAB > m_coarsenedFineData
Buffer holding the coarse-grid data on the coarsened fine grids.
Definition CD_EBLeastSquaresMultigridInterpolator.H:220
virtual void defineBuffers() noexcept
Define buffer data holder.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:420
int m_weight
Least squares weighting factor.
Definition CD_EBLeastSquaresMultigridInterpolator.H:262
static constexpr int m_stenComp
Component that interpolation stencil is stored at.
Definition CD_EBLeastSquaresMultigridInterpolator.H:173
EBLevelGrid m_eblgCoar
Coarse grids.
Definition CD_EBLeastSquaresMultigridInterpolator.H:199
LayoutData< RefCountedPtr< AggStencil< EBCellFAB, EBCellFAB > > > m_aggCoarStencils
Coarse-grid interpolation stencils.
Definition CD_EBLeastSquaresMultigridInterpolator.H:293
int m_ghostCF
Number of ghost cells to fill across coarse-fine interface.
Definition CD_EBLeastSquaresMultigridInterpolator.H:252
static constexpr int m_comp
Component number. Used for setting interval when data is copied into EBLeastSquaresMultigridInterpola...
Definition CD_EBLeastSquaresMultigridInterpolator.H:184
virtual void defineCoarseInterp() noexcept
Define the coarse-sided interpolation stencils for doing the orthogonal derivatives.
Definition CD_EBLeastSquaresMultigridInterpolator.cpp:432
Multigrid interpolator class.
Definition CD_EBMGLeastSquaresInterpolator.H:55
Cell
Enum for distinguishing between cell locations.
Definition CD_Location.H:31