chombo-discharge
Loading...
Searching...
No Matches
CD_EBCoarseToFineInterp.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_EBCOARSETOFINEINTERP_H
14#define CD_EBCOARSETOFINEINTERP_H
15
16// Chombo includes
17#include <EBLevelGrid.H>
18#include <LevelData.H>
19#include <EBCellFAB.H>
20#include <BaseIVFAB.H>
21
22// Our includes
23#include <CD_NamespaceHeader.H>
24
33{
34public:
42 enum Type
43 {
44 PWC,
45 ConservativePWC,
46 ConservativeMinMod,
47 ConservativeMonotonizedCentral,
48 ConservativeSuperbee,
49 };
50
54 EBCoarseToFineInterp() noexcept;
55
63 EBCoarseToFineInterp(const EBLevelGrid& a_eblgFine,
64 const EBLevelGrid& a_eblgCoFi,
65 const EBLevelGrid& a_eblgCoar,
66 const int& a_refRat) noexcept;
67
72
77
81 virtual ~EBCoarseToFineInterp() noexcept;
82
87 operator=(const EBCoarseToFineInterp&) = delete;
88
93 operator=(const EBCoarseToFineInterp&&) = delete;
94
102 virtual void
103 define(const EBLevelGrid& a_eblgFine,
104 const EBLevelGrid& a_eblgCoFi,
105 const EBLevelGrid& a_eblgCoar,
106 const int& a_refRat) noexcept;
107
115 virtual void
116 interpolate(LevelData<EBCellFAB>& a_fineData,
117 const LevelData<EBCellFAB>& a_coarData,
118 const Interval& a_variables,
119 const EBCoarseToFineInterp::Type& a_interpType) const noexcept;
120
128 virtual void
129 interpolate(LevelData<BaseIVFAB<Real>>& a_fineData,
130 const LevelData<BaseIVFAB<Real>>& a_coarData,
131 const Interval& a_variables,
132 const EBCoarseToFineInterp::Type& a_interpType) const noexcept;
133
134protected:
138 enum class SlopeLimiter
139 {
140 MinMod,
141 MonotonizedCentral,
142 Superbee
143 };
144
149
154
158 mutable Copier m_ebCopier;
159
163 mutable std::map<IntVect, Copier> m_cellCopiers;
164
168 EBLevelGrid m_eblgFine;
169
173 EBLevelGrid m_eblgCoar;
174
178 EBLevelGrid m_eblgCoFi;
179
184 LevelData<BaseIVFAB<Real>> m_volumeWeights;
185
190 LevelData<BaseIVFAB<Real>> m_areaWeights;
191
196 mutable LevelData<BaseIVFAB<Real>> m_irregCoFi;
197
202 mutable LayoutData<VoFIterator> m_fineVoFs;
203
207 mutable LayoutData<VoFIterator> m_coarVoFs;
208
212 virtual void
213 defineWeights() noexcept;
214
224 virtual void
225 interpolatePWC(EBCellFAB& a_fineData,
226 const EBCellFAB& a_coarData,
227 const DataIndex& a_dit,
228 const int& a_fineVar,
229 const int& a_coarVar) const noexcept;
230
239 virtual void
240 interpolateConservativePWC(EBCellFAB& a_fineData,
241 const EBCellFAB& a_coarData,
242 const DataIndex& a_dit,
243 const int& a_fineVar,
244 const int& a_coarVar) const noexcept;
245
255 virtual void
256 interpolateConservativeSlope(EBCellFAB& a_fineData,
257 const EBCellFAB& a_coarData,
258 const DataIndex& a_dit,
259 const int& a_fineVar,
260 const int& a_coarVar,
261 const SlopeLimiter& a_limiter) const noexcept;
262
272 virtual void
273 interpolatePWC(BaseIVFAB<Real>& a_fineData,
274 const BaseIVFAB<Real>& a_coarData,
275 const DataIndex& a_dit,
276 const int& a_fineVar,
277 const int& a_coarVar) const noexcept;
278
288 virtual void
289 interpolateConservativePWC(BaseIVFAB<Real>& a_fineData,
290 const BaseIVFAB<Real>& a_coarData,
291 const DataIndex& a_dit,
292 const int& a_fineVar,
293 const int& a_coarVar) const noexcept;
294
303 virtual void
304 checkConservation(const EBCellFAB& a_fineData,
305 const EBCellFAB& a_coarData,
306 const DataIndex& a_dit,
307 const int a_fineVar,
308 const int a_coarVar) const noexcept;
309
318 virtual void
319 checkConservation(const BaseIVFAB<Real>& a_fineData,
320 const BaseIVFAB<Real>& a_coarData,
321 const DataIndex& a_dit,
322 const int a_fineVar,
323 const int a_coarVar) const noexcept;
324};
325
326#include <CD_NamespaceFooter.H>
327
328#endif
Class for interpolating data to fine grids. Can use constant interpolation or include limiters.
Definition CD_EBCoarseToFineInterp.H:33
virtual void defineWeights() noexcept
Define weights for cut-cell conservative regridding.
Definition CD_EBCoarseToFineInterp.cpp:104
EBLevelGrid m_eblgCoar
Coarse grid.
Definition CD_EBCoarseToFineInterp.H:173
LevelData< BaseIVFAB< Real > > m_irregCoFi
Data holder for holding data on the coarsened fine grids.
Definition CD_EBCoarseToFineInterp.H:196
virtual void checkConservation(const EBCellFAB &a_fineData, const EBCellFAB &a_coarData, const DataIndex &a_dit, const int a_fineVar, const int a_coarVar) const noexcept
Check if the interpolation conserved. This will print an error message if it didn't.
Definition CD_EBCoarseToFineInterp.cpp:676
LayoutData< VoFIterator > m_coarVoFs
Iterator for coarse grid cells.
Definition CD_EBCoarseToFineInterp.H:207
LayoutData< VoFIterator > m_fineVoFs
Iterator for valid cut-cells.
Definition CD_EBCoarseToFineInterp.H:202
bool m_isDefined
Is defined or not.
Definition CD_EBCoarseToFineInterp.H:148
std::map< IntVect, Copier > m_cellCopiers
Map of Copiers that we need for going from valid+ghost -> valid+ghost.
Definition CD_EBCoarseToFineInterp.H:163
LevelData< BaseIVFAB< Real > > m_volumeWeights
Weights in cut-cells when regridding conservatively.
Definition CD_EBCoarseToFineInterp.H:184
EBLevelGrid m_eblgCoFi
Coarsened fine grid (i.e., has same ProblemDomain as m_eblgCoar);.
Definition CD_EBCoarseToFineInterp.H:178
virtual void interpolateConservativeSlope(EBCellFAB &a_fineData, const EBCellFAB &a_coarData, const DataIndex &a_dit, const int &a_fineVar, const int &a_coarVar, const SlopeLimiter &a_limiter) const noexcept
Sloped interpolation of an EBCellFAB. Uses specified input slope.
Definition CD_EBCoarseToFineInterp.cpp:415
virtual void interpolatePWC(EBCellFAB &a_fineData, const EBCellFAB &a_coarData, const DataIndex &a_dit, const int &a_fineVar, const int &a_coarVar) const noexcept
Piecewise constant interpolation of an EBCellFAB. This ignores the volume fraction....
Definition CD_EBCoarseToFineInterp.cpp:289
Copier m_ebCopier
Copier for making copying from m_eblg to m_eblgCoFi go faster.
Definition CD_EBCoarseToFineInterp.H:158
EBLevelGrid m_eblgFine
Fine grid.
Definition CD_EBCoarseToFineInterp.H:168
virtual void interpolate(LevelData< EBCellFAB > &a_fineData, const LevelData< EBCellFAB > &a_coarData, const Interval &a_variables, const EBCoarseToFineInterp::Type &a_interpType) const noexcept
Interpolate to the fine grid using the specified method.
Definition CD_EBCoarseToFineInterp.cpp:163
Type
Type of interpolation methods supported. PWC = Piecewise constant, ignoring the embedded boundary....
Definition CD_EBCoarseToFineInterp.H:43
virtual void define(const EBLevelGrid &a_eblgFine, const EBLevelGrid &a_eblgCoFi, const EBLevelGrid &a_eblgCoar, const int &a_refRat) noexcept
Define operation. Puts object in usable state.
Definition CD_EBCoarseToFineInterp.cpp:44
virtual void interpolateConservativePWC(EBCellFAB &a_fineData, const EBCellFAB &a_coarData, const DataIndex &a_dit, const int &a_fineVar, const int &a_coarVar) const noexcept
Piecewise constant interpolation of an EBCellFAB. Does not use slopes.
Definition CD_EBCoarseToFineInterp.cpp:357
LevelData< BaseIVFAB< Real > > m_areaWeights
Weights in cut-cells when regridding conservatively.
Definition CD_EBCoarseToFineInterp.H:190
int m_refRat
Refinement factor.
Definition CD_EBCoarseToFineInterp.H:153
SlopeLimiter
Supported slope limiters for conservative interpolation with slopes.
Definition CD_EBCoarseToFineInterp.H:139
EBCoarseToFineInterp() noexcept
Default constructor. Must subsequently call the define method.
Definition CD_EBCoarseToFineInterp.cpp:26