chombo-discharge
Loading...
Searching...
No Matches
CD_MFHelmholtzJumpBC.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_MFHELMHOLTZJUMPBC_H
14#define CD_MFHELMHOLTZJUMPBC_H
15
16// Chombo includes
17#include <MFCellFAB.H>
18#include <EBISBox.H>
19#include <LayoutData.H>
20#include <Stencils.H>
21#include <AggStencil.H>
22#include <EBCellFAB.H>
23#include <BaseIVFAB.H>
24
25// Our includes
26#include <CD_Location.H>
27#include <CD_MFLevelGrid.H>
28#include <CD_VofUtils.H>
29#include <CD_MFInterfaceFAB.H>
30#include <CD_MFBaseIVFAB.H>
31#include <CD_NamespaceHeader.H>
32
45{
46public:
50 using BcoefPtr = RefCountedPtr<LevelData<MFBaseIVFAB>>;
51
55 using AmrMask = RefCountedPtr<LevelData<BaseFab<bool>>>;
56
61
75 MFHelmholtzJumpBC(Location::Cell a_dataLocation,
76 const MFLevelGrid& a_mflg,
77 const BcoefPtr& a_Bcoef,
78 const AmrMask& a_validCells,
79 Real a_dx,
80 int a_order,
81 int a_weight,
82 int a_radius,
83 int a_ghostCF,
84 IntVect a_ghostPhi);
85
89 MFHelmholtzJumpBC(const MFHelmholtzJumpBC& a_other) = delete;
90
94 virtual ~MFHelmholtzJumpBC();
95
100 operator=(const MFHelmholtzJumpBC& a_other) = delete;
101
104 operator=(MFHelmholtzJumpBC&&) = delete;
105
110 void
111 setBco(const RefCountedPtr<LevelData<MFBaseIVFAB>>& a_Bcoef);
112
117 bool
118 isMultiPhase() const noexcept;
119
124 int
125 getOrder() const;
126
131 int
132 getWeight() const;
133
138 int
139 getRadius() const;
140
145 void
146 setCoarseGridDropOrder(bool a_dropOrder);
147
154 virtual void
155 matchBC(LevelData<BaseIVFAB<Real>>& a_jump, const LevelData<MFCellFAB>& a_phi, bool a_homogeneousPhysBC) const;
156
164 virtual void
165 matchBC(BaseIVFAB<Real>& a_jump, const MFCellFAB& a_phi, bool a_homogeneousPhysBC, const DataIndex& a_dit) const;
166
173 virtual const BaseIVFAB<Real>&
174 getBndryPhi(int a_phase, const DataIndex& a_dit) const;
175
182 virtual VoFIterator&
183 getSinglePhaseVofs(int a_phase, const DataIndex& a_dit) const;
184
191 virtual VoFIterator&
192 getMultiPhaseVofs(int a_phase, const DataIndex& a_dit) const;
193
198 virtual const LayoutData<MFInterfaceFAB<VoFStencil>>&
199 getGradPhiStencils() const noexcept;
200
205 virtual const LayoutData<MFInterfaceFAB<Real>>&
206 getGradPhiWeights() const noexcept;
207
211 virtual void
212 resetBC() const;
213
214protected:
218 static constexpr int m_comp = 0;
219
223 static constexpr int m_nComp = 1;
224
229
234
238 RefCountedPtr<LevelData<MFBaseIVFAB>> m_Bcoef;
239
243 RefCountedPtr<LevelData<BaseFab<bool>>> m_validCells;
244
248 Real m_dx;
249
254
259
264
269
274
278 IntVect m_ghostPhi;
279
284
289
293 mutable LayoutData<MFInterfaceFAB<Real>> m_boundaryPhi;
294
298 mutable std::map<int, std::shared_ptr<LayoutData<VoFIterator>>> m_singlePhaseVofs;
299
303 mutable std::map<int, std::shared_ptr<LayoutData<VoFIterator>>> m_multiPhaseVofs;
304
308 LayoutData<IntVectSet> m_ivs;
309
313 LayoutData<MFInterfaceFAB<VoFStencil>> m_gradPhiStencils;
314
319
323 LayoutData<MFInterfaceFAB<VoFStencil>> m_avgStencils;
324
328 LayoutData<MFInterfaceFAB<Vector<VolIndex>>> m_avgVoFs;
329
333 LayoutData<MFInterfaceFAB<Real>> m_denom;
334
338 LayoutData<MFInterfaceFAB<Real>> m_avgWeights;
339
343 LayoutData<RefCountedPtr<AggStencil<EBCellFAB, BaseIVFAB<Real>>>> m_aggStencils[2];
344
348 void
350
354 void
356
360 void
362
373 virtual bool
374 getLeastSquaresBoundaryGradStencil(std::pair<Real, VoFStencil>& a_stencil,
375 const VolIndex& a_vof,
376 const EBISBox& a_ebisbox,
377 VofUtils::Neighborhood a_neighborhood,
378 int a_order) const;
379
388 inline bool
389 isStencilValidCF(const VoFStencil& a_stencil, const DataIndex& a_dit) const;
390
397 inline Real
398 applyStencil(const VoFStencil& a_stencil, const EBCellFAB& a_phi) const;
399};
400
401#include <CD_NamespaceFooter.H>
402
403#include <CD_MFHelmholtzJumpBCImplem.H>
404
405#endif
Declaration of cell positions.
Declaration of a multiphase BaseIVFAB<Real>
Declaration of a class that allocates irregular data holders over the interface between two phases.
Declaration of a wrapper for wrapping multifluid EBLevelGrids.
Various functions for getting Vofs near cut-cells.
Multiphase BaseIVFAB<Real>.
Definition CD_MFBaseIVFAB.H:30
Class for computing "jump interface" boundary conditions for multifluid code.
Definition CD_MFHelmholtzJumpBC.H:45
static constexpr int m_comp
Component where stencils are stored.
Definition CD_MFHelmholtzJumpBC.H:218
Real m_dx
Grid resolution.
Definition CD_MFHelmholtzJumpBC.H:248
void setCoarseGridDropOrder(bool a_dropOrder)
Signal MFHelmholtzJumpBC that it should drop the stencil order if the cell is a coarsened cell.
Definition CD_MFHelmholtzJumpBC.cpp:86
LayoutData< MFInterfaceFAB< VoFStencil > > m_avgStencils
Average stencil.
Definition CD_MFHelmholtzJumpBC.H:323
LayoutData< MFInterfaceFAB< Real > > m_boundaryPhi
Value of phi on the boundary.
Definition CD_MFHelmholtzJumpBC.H:293
LayoutData< MFInterfaceFAB< Real > > m_denom
Denominator 1/(bp*wp + bq*wq) for all interface cells.
Definition CD_MFHelmholtzJumpBC.H:333
virtual bool getLeastSquaresBoundaryGradStencil(std::pair< Real, VoFStencil > &a_stencil, const VolIndex &a_vof, const EBISBox &a_ebisbox, VofUtils::Neighborhood a_neighborhood, int a_order) const
Get stencil with specified order.
Definition CD_MFHelmholtzJumpBC.cpp:506
int m_ghostCF
Number of grid cells that were filled over the CF.
Definition CD_MFHelmholtzJumpBC.H:268
virtual const BaseIVFAB< Real > & getBndryPhi(int a_phase, const DataIndex &a_dit) const
Get phi on the boundary.
Definition CD_MFHelmholtzJumpBC.cpp:92
virtual const LayoutData< MFInterfaceFAB< Real > > & getGradPhiWeights() const noexcept
Get constant weights involved when computing dphi/dn at the boundary.
Definition CD_MFHelmholtzJumpBC.cpp:116
LayoutData< MFInterfaceFAB< Real > > m_gradPhiWeights
Raw weights for dphi/dn.
Definition CD_MFHelmholtzJumpBC.H:318
Real applyStencil(const VoFStencil &a_stencil, const EBCellFAB &a_phi) const
Apply a stencil and return the result.
Definition CD_MFHelmholtzJumpBCImplem.H:70
RefCountedPtr< LevelData< MFBaseIVFAB > > m_Bcoef
B-coefficient.
Definition CD_MFHelmholtzJumpBC.H:238
bool isMultiPhase() const noexcept
Is multiphase or not.
Definition CD_MFHelmholtzJumpBC.cpp:133
int m_numPhases
Number of phases.
Definition CD_MFHelmholtzJumpBC.H:273
void setBco(const RefCountedPtr< LevelData< MFBaseIVFAB > > &a_Bcoef)
Set B-coefficient. This updates the stencils.
Definition CD_MFHelmholtzJumpBC.cpp:122
int m_order
Stencil order.
Definition CD_MFHelmholtzJumpBC.H:253
LayoutData< RefCountedPtr< AggStencil< EBCellFAB, BaseIVFAB< Real > > > > m_aggStencils[2]
Agg stencils for making matching go faster.
Definition CD_MFHelmholtzJumpBC.H:343
virtual const LayoutData< MFInterfaceFAB< VoFStencil > > & getGradPhiStencils() const noexcept
Get stencils for computing dphi/dn at the boundary.
Definition CD_MFHelmholtzJumpBC.cpp:110
MFHelmholtzJumpBC & operator=(const MFHelmholtzJumpBC &a_other)=delete
Disallowed assignment constructor.
int m_radius
Stencil order.
Definition CD_MFHelmholtzJumpBC.H:263
int getWeight() const
Return stencil weight (for least squares)
Definition CD_MFHelmholtzJumpBC.cpp:74
RefCountedPtr< LevelData< MFBaseIVFAB > > BcoefPtr
Alias to cut down on typing.
Definition CD_MFHelmholtzJumpBC.H:50
MFHelmholtzJumpBC(const MFHelmholtzJumpBC &a_other)=delete
Disallowed copy constructor.
LayoutData< MFInterfaceFAB< Real > > m_avgWeights
Average weights.
Definition CD_MFHelmholtzJumpBC.H:338
Location::Cell m_dataLocation
Data centering.
Definition CD_MFHelmholtzJumpBC.H:228
MFHelmholtzJumpBC()=delete
Disallowed weak construction.
IntVect m_ghostPhi
Number of ghost cells in phi (must be exact match in order to use AggStencil)
Definition CD_MFHelmholtzJumpBC.H:278
virtual VoFIterator & getMultiPhaseVofs(int a_phase, const DataIndex &a_dit) const
Return vof iterator which iterates over multi-phase cells on a specified phase and box.
Definition CD_MFHelmholtzJumpBC.cpp:104
void defineIterators()
Define function. Builds stencils.
Definition CD_MFHelmholtzJumpBC.cpp:449
bool isStencilValidCF(const VoFStencil &a_stencil, const DataIndex &a_dit) const
Check if stencil is valid.
Definition CD_MFHelmholtzJumpBCImplem.H:24
void defineStencils()
Define function. Builds stencils.
Definition CD_MFHelmholtzJumpBC.cpp:141
void buildAverageStencils()
Brief the average stencils.
Definition CD_MFHelmholtzJumpBC.cpp:305
virtual void resetBC() const
Set everything to zero. This is a debugging function.
Definition CD_MFHelmholtzJumpBC.cpp:558
static constexpr int m_nComp
Number of components in stencil.
Definition CD_MFHelmholtzJumpBC.H:223
int getRadius() const
Return stencil radius (for least squares)
Definition CD_MFHelmholtzJumpBC.cpp:80
RefCountedPtr< LevelData< BaseFab< bool > > > m_validCells
Valid grid cells.
Definition CD_MFHelmholtzJumpBC.H:243
LayoutData< IntVectSet > m_ivs
IntVectSet over which we run the "averaging".
Definition CD_MFHelmholtzJumpBC.H:308
MFLevelGrid m_mflg
Grids.
Definition CD_MFHelmholtzJumpBC.H:233
LayoutData< MFInterfaceFAB< VoFStencil > > m_gradPhiStencils
Raw stencils for dphi/dn.
Definition CD_MFHelmholtzJumpBC.H:313
virtual ~MFHelmholtzJumpBC()
Destructor. Does nothing.
Definition CD_MFHelmholtzJumpBC.cpp:62
bool m_dropOrder
Drop order or not.
Definition CD_MFHelmholtzJumpBC.H:288
virtual void matchBC(LevelData< BaseIVFAB< Real > > &a_jump, const LevelData< MFCellFAB > &a_phi, bool a_homogeneousPhysBC) const
Match the BC.
Definition CD_MFHelmholtzJumpBC.cpp:577
RefCountedPtr< LevelData< BaseFab< bool > > > AmrMask
Alias to cut down on typing.
Definition CD_MFHelmholtzJumpBC.H:55
std::map< int, std::shared_ptr< LayoutData< VoFIterator > > > m_multiPhaseVofs
Iterators for multi-phase cells. The integer index is the phase.
Definition CD_MFHelmholtzJumpBC.H:303
int getOrder() const
Return stencil order.
Definition CD_MFHelmholtzJumpBC.cpp:68
LayoutData< MFInterfaceFAB< Vector< VolIndex > > > m_avgVoFs
Target vofs for average stencils.
Definition CD_MFHelmholtzJumpBC.H:328
virtual VoFIterator & getSinglePhaseVofs(int a_phase, const DataIndex &a_dit) const
Return vof iterator which iterates over single-phase cells on a specific phase and box.
Definition CD_MFHelmholtzJumpBC.cpp:98
bool m_multiPhase
Multiphase or not.
Definition CD_MFHelmholtzJumpBC.H:283
int m_weight
Stencil order.
Definition CD_MFHelmholtzJumpBC.H:258
std::map< int, std::shared_ptr< LayoutData< VoFIterator > > > m_singlePhaseVofs
Iterators for single-phase cells. The integer index is the phase.
Definition CD_MFHelmholtzJumpBC.H:298
Class for holding BaseIVFAB<T> on the interface between two phases.
Definition CD_MFInterfaceFAB.H:31
Wrapper class for holding multifluid EBLevelGrids.
Definition CD_MFLevelGrid.H:30
Static class which contains some routines for fetching VoFs using various algorithms....
Definition CD_VofUtils.H:35
Namespace for encapsulating various data centerings.
Definition CD_Location.H:25
Cell
Enum for distinguishing between cell locations.
Definition CD_Location.H:31