chombo-discharge
Loading...
Searching...
No Matches
CD_EBFluxRedistribution.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_EBFLUXREDISTRIBUTION_H
14#define CD_EBFLUXREDISTRIBUTION_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
47{
48public:
52 EBFluxRedistribution() noexcept;
53
58
72 EBFluxRedistribution(const EBLevelGrid& a_eblgCoar,
73 const EBLevelGrid& a_eblgCoarsened,
74 const EBLevelGrid& a_eblg,
75 const EBLevelGrid& a_eblgRefined,
76 const EBLevelGrid& a_eblgFine,
77 const int a_refToCoar,
78 const int a_refToFine,
79 const bool a_redistributeOutside) noexcept;
80
84 virtual ~EBFluxRedistribution() noexcept;
85
99 virtual void
100 define(const EBLevelGrid& a_eblgCoar,
101 const EBLevelGrid& a_eblgCoarsened,
102 const EBLevelGrid& a_eblg,
103 const EBLevelGrid& a_eblgRefined,
104 const EBLevelGrid& a_eblgFine,
105 const int a_refToCoar,
106 const int a_refToFine,
107 const bool a_redistributeOutside) noexcept;
108
122 virtual void
123 redistributeAMR(LevelData<EBCellFAB>* a_phiCoar,
124 LevelData<EBCellFAB>* a_phi,
125 LevelData<EBCellFAB>* a_phiFine,
126 const LevelData<BaseIVFAB<Real>>& a_deltaM,
127 const Real a_scaleCoar,
128 const Real a_scale,
129 const Real a_scaleFine,
130 const Interval& a_variables) const noexcept;
131
139 virtual void
140 redistributeCoar(LevelData<EBCellFAB>& a_phiCoar,
141 const LevelData<BaseIVFAB<Real>>& a_deltaM,
142 const Real& a_scaleCoar,
143 const Interval& a_variables) const noexcept;
144
152 virtual void
153 redistributeLevel(LevelData<EBCellFAB>& a_phi,
154 const LevelData<BaseIVFAB<Real>>& a_deltaM,
155 const Real& a_scale,
156 const Interval& a_variables) const noexcept;
157
165 virtual void
166 redistributeFine(LevelData<EBCellFAB>& a_phiFine,
167 const LevelData<BaseIVFAB<Real>>& a_deltaM,
168 const Real& a_scaleFine,
169 const Interval& a_variables) const noexcept;
170
171protected:
176
181
186
191
196
201
206
210 EBLevelGrid m_eblgCoar;
211
215 EBLevelGrid m_eblgCoarsened;
216
220 EBLevelGrid m_eblg;
221
225 EBLevelGrid m_eblgRefined;
226
230 EBLevelGrid m_eblgFine;
231
236
241
246
251 LayoutData<BaseIVFAB<VoFStencil>> m_redistStencilsCoar;
252
257 LayoutData<BaseIVFAB<VoFStencil>> m_redistStencilsLevel;
258
263 LayoutData<BaseIVFAB<VoFStencil>> m_redistStencilsFine;
264
268 mutable LayoutData<VoFIterator> m_vofit;
269
273 virtual void
274 defineStencils() noexcept;
275
279 virtual void
280 defineBuffers() noexcept;
281
286 virtual void
287 defineValidCells(LevelData<BaseFab<bool>>& a_validCells) const noexcept;
288
293 virtual void
294 defineInterfaceCells(LevelData<BaseFab<bool>>& a_interfaceCells) const noexcept;
295};
296
297#include <CD_NamespaceFooter.H>
298
299#endif
Class for redistribution ala Chombo's flux redistribution.
Definition CD_EBFluxRedistribution.H:47
virtual void redistributeFine(LevelData< EBCellFAB > &a_phiFine, const LevelData< BaseIVFAB< Real > > &a_deltaM, const Real &a_scaleFine, const Interval &a_variables) const noexcept
Redistribute the input quantity to the coarse level.
Definition CD_EBFluxRedistribution.cpp:595
int m_refToCoar
Refinement factor between this level and the coarse level.
Definition CD_EBFluxRedistribution.H:195
bool m_hasCoar
Has coarse level or not.
Definition CD_EBFluxRedistribution.H:185
EBFluxRedistribution() noexcept
Weak constructor. Need to call define afterwards.
Definition CD_EBFluxRedistribution.cpp:26
bool m_hasFine
Has fine level or not.
Definition CD_EBFluxRedistribution.H:190
int m_refToFine
Refinement factor between this level and the fine level.
Definition CD_EBFluxRedistribution.H:200
LayoutData< BaseIVFAB< VoFStencil > > m_redistStencilsFine
Stencils for redistribution into valid grid cells on the fine level.
Definition CD_EBFluxRedistribution.H:263
bool m_redistributeOutside
If true, redistribute to the outside. Otherwise, do interior redistribution.
Definition CD_EBFluxRedistribution.H:180
virtual void defineBuffers() noexcept
Define buffer storages.
Definition CD_EBFluxRedistribution.cpp:416
virtual void defineValidCells(LevelData< BaseFab< bool > > &a_validCells) const noexcept
Define the valid region of this level.
Definition CD_EBFluxRedistribution.cpp:302
virtual void defineInterfaceCells(LevelData< BaseFab< bool > > &a_interfaceCells) const noexcept
Define the cells on the coarse side of the CF interface that we would redistribute to.
Definition CD_EBFluxRedistribution.cpp:372
virtual void defineStencils() noexcept
Define redistribution stencils.
Definition CD_EBFluxRedistribution.cpp:124
EBLevelGrid m_eblgFine
Fine grids.
Definition CD_EBFluxRedistribution.H:230
virtual ~EBFluxRedistribution() noexcept
Destructor (does nothing)
Definition CD_EBFluxRedistribution.cpp:52
int m_redistRadius
Redistribution radius. Always one.
Definition CD_EBFluxRedistribution.H:205
bool m_isDefined
Is defined or not.
Definition CD_EBFluxRedistribution.H:175
Copier m_fineCopier
Copier for copying from the refinement of this level to the fine level.
Definition CD_EBFluxRedistribution.H:245
LayoutData< BaseIVFAB< VoFStencil > > m_redistStencilsCoar
Stencils for redistribution into valid grid cells on the coarse level.
Definition CD_EBFluxRedistribution.H:251
Copier m_levelCopier
Copier for adding data from this level to this level (yes, really).
Definition CD_EBFluxRedistribution.H:240
virtual void define(const EBLevelGrid &a_eblgCoar, const EBLevelGrid &a_eblgCoarsened, const EBLevelGrid &a_eblg, const EBLevelGrid &a_eblgRefined, const EBLevelGrid &a_eblgFine, const int a_refToCoar, const int a_refToFine, const bool a_redistributeOutside) noexcept
Define function. Puts object in usable state.
Definition CD_EBFluxRedistribution.cpp:58
EBLevelGrid m_eblgCoar
Grids on coarser level.
Definition CD_EBFluxRedistribution.H:210
virtual void redistributeLevel(LevelData< EBCellFAB > &a_phi, const LevelData< BaseIVFAB< Real > > &a_deltaM, const Real &a_scale, const Interval &a_variables) const noexcept
Redistribute the input quantity to this level.
Definition CD_EBFluxRedistribution.cpp:536
LayoutData< VoFIterator > m_vofit
Iterator for going through all cells on this level that we redistribute from.
Definition CD_EBFluxRedistribution.H:268
Copier m_coarCopier
Copier for copying from the coarsening of this level to the coarse level.
Definition CD_EBFluxRedistribution.H:235
EBLevelGrid m_eblgCoarsened
Grids on this level that are a refinement of the coarser level.
Definition CD_EBFluxRedistribution.H:215
virtual void redistributeAMR(LevelData< EBCellFAB > *a_phiCoar, LevelData< EBCellFAB > *a_phi, LevelData< EBCellFAB > *a_phiFine, const LevelData< BaseIVFAB< Real > > &a_deltaM, const Real a_scaleCoar, const Real a_scale, const Real a_scaleFine, const Interval &a_variables) const noexcept
Redistribute the input quantity into the coarse level, this level, and the fine level.
Definition CD_EBFluxRedistribution.cpp:447
EBFluxRedistribution(const EBFluxRedistribution &a_other)=delete
Copy constructor is not allowed.
EBLevelGrid m_eblgRefined
Grids on this level that are a coarsening of the fine level.
Definition CD_EBFluxRedistribution.H:225
LayoutData< BaseIVFAB< VoFStencil > > m_redistStencilsLevel
Stencils for redistribution into valid grid cells on this level.
Definition CD_EBFluxRedistribution.H:257
EBLevelGrid m_eblg
Grids on this level.
Definition CD_EBFluxRedistribution.H:220
virtual void redistributeCoar(LevelData< EBCellFAB > &a_phiCoar, const LevelData< BaseIVFAB< Real > > &a_deltaM, const Real &a_scaleCoar, const Interval &a_variables) const noexcept
Redistribute the input quantity to the coarse level.
Definition CD_EBFluxRedistribution.cpp:477