chombo-discharge
Loading...
Searching...
No Matches
CD_PhaseRealm.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_PHASEREALM_H
14#define CD_PHASEREALM_H
15
16// Std includes
17#include <array>
18
19// Chombo includes
20#include <DisjointBoxLayout.H>
21#include <ProblemDomain.H>
22
23// Our includes
26#include <CD_LoadBalancing.H>
27#include <CD_MFLevelGrid.H>
28#include <CD_EBCoarAve.H>
29#include <CD_EBReflux.H>
30#include <CD_DomainFluxIFFAB.H>
34#include <CD_EBGradient.H>
43#include <CD_NamespaceHeader.H>
44
45// These are operators that can be defined.
46static const std::string s_outer_cf_region = "outer_cf_region"; // Outside coarse-fine region
47static const std::string s_inner_cf_region = "inner_cf_region"; // Inside coarse-fine region
48static const std::string s_outer_particle_halo = "outer_particle_halo"; // Outside particle halo region
49static const std::string s_inner_particle_halo = "inner_particle_halo"; // Inside particle halo region
50static const std::string s_cfivs = "cfivs"; // Coarse-fine interface
51static const std::string s_eb_gradient = "eb_gradient"; // For computing gradients
52static const std::string s_eb_irreg_interp = "eb_irreg_interp"; // For data recentering
53static const std::string s_eb_coar_ave = "eb_coar_ave"; // For coarsening
54static const std::string s_eb_fill_patch = "eb_fill_patch"; // For regridding data
55static const std::string s_eb_fine_interp = "eb_fine_interp"; // For linearly filling ghost cells
56static const std::string s_eb_flux_reg = "eb_flux_reg"; // For flux registration
57static const std::string s_eb_redist = "eb_redist"; // For redistribution
58static const std::string s_noncons_div = "eb_non_cons_div"; // For computing non-conservative divergences
59static const std::string s_eb_multigrid = "eb_multigrid"; // For multigrid interpolation
60static const std::string s_levelset = "levelset"; // For putting level-set on mesh
61static const std::string s_particle_mesh = "particle_mesh"; // For doing particle-mesh operations.
62
74{
75public:
79 PhaseRealm();
80
85 PhaseRealm(const PhaseRealm& a_other) = delete;
86
91 PhaseRealm(const PhaseRealm&& a_other) = delete;
92
98 operator=(const PhaseRealm& a_other) = delete;
99
105 operator=(const PhaseRealm&& a_other) = delete;
106
110 virtual ~PhaseRealm();
111
132 void
135 const Vector<int>& a_refRat,
136 const Vector<Real>& a_dx,
137 const RealVect& a_probLo,
138 const int a_finestLevel,
139 const int a_ebGhost,
140 const int a_numGhost,
141 const int a_lsfGhost,
142 const int a_redistRad,
143 const int a_mgInterpOrder,
144 const int a_mgInterpRadius,
145 const int a_mgInterpWeight,
150
157 void
159
163 void
164 preRegrid();
165
171 void
172 regridBase(const int a_lmin);
173
179 void
180 regridOperators(const int a_lmin);
181
187 void
189
195 bool
197
203 getEBIndexSpace() const;
204
209 const Vector<int>&
210 getRefinementRatios() const;
211
216 const Vector<Real>&
217 getDx() const;
218
224 getGrids() const;
225
231 getDomains() const;
232
237 const Vector<EBISLayout>&
238 getEBISLayout() const;
239
245 getEBLevelGrid() const;
246
252 getEBLevelGridCoFi() const;
253
259 getEBLevelGridFiCo() const;
260
267 getVofIterator() const;
268
275
284 getFaceIterator() const;
285
295
307
318
325
332
339
345 getGradientOp() const;
346
352 getParticleMesh() const;
353
359 getSurfaceDeposition() const;
360
366 getCoarseAverage() const;
367
374
381
388
394 getFineInterp() const;
395
401 getFluxRegister() const;
402
408 getRedistributionOp() const;
409
414 const EBAMRFAB&
415 getLevelset() const;
416
421 const EBAMRCellData&
422 getRegularCells() const;
423
428 const EBAMRCellData&
429 getCoveredCells() const;
430
435 const EBAMRCellData&
436 getNotCoveredCells() const;
437
442 const EBAMRCellData&
443 getIrregularCells() const;
444
445protected:
450
455
460
465
470
475
480
485
490
495
500
505
510
515
520
525
530
535
540
545
550
555
560
565
571
577
582
587
592
597
602
607
612
617
624
632
637
642
647
652
657
662
667
672
677
682
687
692
697
702 void
703 defineEBLevelGrid(const int a_lmin);
704
709 void
710 defineVofIterator(const int a_lmin);
711
716 void
717 defineEBCoarAve(const int a_lmin);
718
723 void
724 defineEBMultigrid(const int a_lmin);
725
730 void
731 defineFillPatch(const int a_lmin);
732
737 void
739
744 void
746
752 void
753 defineFluxReg(const int a_lmin, const int a_regsize);
754
760 void
761 defineRedistOper(const int a_lmin, const int a_regsize);
762
768 void
770
776 void
778
784 void
786
790 void
792
797 void
798 defineGradSten(const int a_lmin);
799
803 void
805
810 void
812
818 void
819 defineLevelSet(const int a_lmin, const int a_numGhost);
820
829 void
830 defineMasks(const int a_lmin, const int a_numGhost);
831};
832
833#include <CD_NamespaceFooter.H>
834
835#endif
Declaration of class for interpolating cell-centered data to cell centroids.
Declaration of base class for defining geometries.
Declaration of factory class for DomainFluxIFFAB.
Declaration of a BaseIFFAB wrapper that holds domain fluxes.
Declaration of a class for handling particle-mesh operations with AMR.
Declaration of a class for handling surface deposition of particles with EB and AMR.
Declaration of class for interpolating cell-centered data to cell centroids.
Declaration of conservative coarsening utility.
Declaration of an aggregated class for regrid operations.
Declaration of a class which can perform redistribution in an EB-AMR context.
Declaration of a class which interpolates ghost cells across the coarse-fine interface.
Declaration of a class which computes gradients in an EBAMR context.
Parent base class for multigrid interpolation.
Declaration of a class for computing non-conservative divergences.
Declaration of a class which can reflux over the coarse-fine interface.
Declaration of a static class for various load balancing operations.
Declaration of a wrapper for wrapping multifluid EBLevelGrids.
Multi-fluid index space.
Declaration of a class for holding particles on an AMR hierarchy.
Type
Supported interpolation types.
Definition CD_CellCentroidInterpolation.H:44
Class for handling particle-mesh operations with AMR.
Definition CD_EBAMRParticleMesh.H:53
class for handling surface deposition of particles with EB and AMR.
Definition CD_EBAMRSurfaceDeposition.H:30
Type
Supported interpolation types.
Definition CD_EBCentroidInterpolation.H:44
Class that holds important things for doing AMR over a specific phase and processor distribution.
Definition CD_PhaseRealm.H:74
PhaseRealm & operator=(const PhaseRealm &&a_other)=delete
Disallowed move assignment operator.
Vector< RefCountedPtr< EBLevelGrid > > m_eblgFiCo
Coarsened fine-level EB grids.
Definition CD_PhaseRealm.H:576
Vector< RefCountedPtr< EBCoarseToFineInterp > > & getFineInterp() const
Get piecewise linear ghost cell interpolation utility.
Definition CD_PhaseRealm.cpp:1148
void defineNonConservativeDivergence(const int a_lmin)
Define non-conservative divergence stencils.
Definition CD_PhaseRealm.cpp:968
virtual ~PhaseRealm()
Destructor.
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > m_faceIterNoBoundary
Face iterators over cut-cell faces in the valid box (FaceStop::SurroundingNoBoundary).
Definition CD_PhaseRealm.H:623
int m_finestLevel
Finest grid level.
Definition CD_PhaseRealm.H:469
EBAMRSurfaceDeposition m_surfaceDeposition
For doing particle deposition onto surfaces.
Definition CD_PhaseRealm.H:681
Vector< RefCountedPtr< EBMultigridInterpolator > > m_multigridInterpolator
Multigrid interpolation utility.
Definition CD_PhaseRealm.H:646
const Vector< EBISLayout > & getEBISLayout() const
Get EBIS layout.
Definition CD_PhaseRealm.cpp:1018
const Vector< RefCountedPtr< EBNonConservativeDivergence > > & getNonConservativeDivergence() const
Get objects for computing non-conservative divergences.
Definition CD_PhaseRealm.cpp:1108
std::map< std::string, bool > m_operatorMap
Operator map for checking which ones are registered.
Definition CD_PhaseRealm.H:544
Vector< RefCountedPtr< EBCoarseFineParticleMesh > > & getEBCoarseFineParticleMesh() const
Get deposition operator.
Vector< RefCountedPtr< EBGhostCellInterpolator > > m_ghostCellInterpolator
Ghost cell interpolation utility.
Definition CD_PhaseRealm.H:651
Vector< RefCountedPtr< EBCoarAve > > m_coarAve
Coarsening operator.
Definition CD_PhaseRealm.H:641
bool queryOperator(const std::string &a_operator) const
Query if an AMR operator has been registered.
Definition CD_PhaseRealm.cpp:376
Vector< RefCountedPtr< EBCoarseToFineInterp > > m_ebFineInterp
Regridding utility (for filling new grid patches)
Definition CD_PhaseRealm.H:656
Vector< RefCountedPtr< EBLevelGrid > > m_eblgCoFi
Coarsened fine-level EB grids.
Definition CD_PhaseRealm.H:570
Vector< DisjointBoxLayout > m_grids
AMR grids.
Definition CD_PhaseRealm.H:549
void defineIrregSten()
Define data recentering stencils.
Definition CD_PhaseRealm.cpp:944
PhaseRealm()
Default constructor. Must subsequently call define.
Definition CD_PhaseRealm.cpp:29
const Vector< DisjointBoxLayout > & getGrids() const
Get AMR grids.
Definition CD_PhaseRealm.cpp:1006
Vector< RefCountedPtr< EBFluxRedistribution > > & getRedistributionOp() const
Get the redistribution operators.
Definition CD_PhaseRealm.cpp:1168
void defineEBCoarAve(const int a_lmin)
Define coarsening utility.
Definition CD_PhaseRealm.cpp:665
EBCentroidInterpolation::Type m_ebCentroidInterpolationType
Cell-center to cell-centroid interpolation method.
Definition CD_PhaseRealm.H:519
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > & getFaceIteratorNoBoundary() const
Return face iterators over cut-cell faces in each valid grid box (FaceStop::SurroundingNoBoundary).
Definition CD_PhaseRealm.cpp:1060
void defineCoarToFineRedistOper(const int a_lmin, const int a_regsize)
Define operator redistribution utility.
EBAMRFAB m_levelset
Level-set function.
Definition CD_PhaseRealm.H:581
Vector< int > m_refinementRatios
Refinement ratios between levels.
Definition CD_PhaseRealm.H:529
const Vector< RefCountedPtr< CellCentroidInterpolation > > & getCellCentroidInterpolation() const
Get objects for interpolation from cell centers to centroids.
Definition CD_PhaseRealm.cpp:1088
void defineRedistOper(const int a_lmin, const int a_regsize)
Define operator redistribution utility.
Definition CD_PhaseRealm.cpp:820
Vector< RefCountedPtr< EBCoarAve > > & getCoarseAverage() const
Get coarsening operators.
Definition CD_PhaseRealm.cpp:1118
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > & getMultiCutFaceIterator() const
Return face iterators restricted to multiply-cut faces in each valid grid box.
Definition CD_PhaseRealm.cpp:1072
const Vector< RefCountedPtr< EBLevelGrid > > & getEBLevelGridCoFi() const
Get coarsened fine grids.
Definition CD_PhaseRealm.cpp:1030
void defineEBMultigrid(const int a_lmin)
Define multigrid interpolation utility.
Definition CD_PhaseRealm.cpp:690
PhaseRealm(const PhaseRealm &&a_other)=delete
Disallowed move ctor.
Vector< RefCountedPtr< EBReflux > > & getFluxRegister() const
Get flux register utility.
Definition CD_PhaseRealm.cpp:1158
Vector< RefCountedPtr< EBFluxRedistribution > > m_redistributionOp
Redistribution utilities.
Definition CD_PhaseRealm.H:666
Vector< RefCountedPtr< EBLevelGrid > > m_eblg
EB level grids.
Definition CD_PhaseRealm.H:564
EBAMRCellData m_coveredCells
Cell mask with value 1 in covered cells and 0 elsewhere.
Definition CD_PhaseRealm.H:591
const EBAMRCellData & getIrregularCells() const
Get the irregular-cell mask (value 1 in irregular/cut cells, 0 elsewhere).
Definition CD_PhaseRealm.cpp:1226
EBAMRParticleMesh & getParticleMesh() const
Get particle-mesh operator.
Definition CD_PhaseRealm.cpp:1178
Vector< RefCountedPtr< CellCentroidInterpolation > > m_cellCentroidInterpolation
For interpolating data from cell centers to cell centroids.
Definition CD_PhaseRealm.H:686
Vector< RefCountedPtr< LayoutData< VoFIterator > > > & getVofIterator() const
Return VoF iterators covering all cut-cells (singly- and multiply-cut) in each grid patch.
Definition CD_PhaseRealm.cpp:1042
Vector< EBISLayout > m_ebisl
EBIS layouts.
Definition CD_PhaseRealm.H:559
void defineCoarToCoarRedistOper(const int a_lmin, const int a_regsize)
Define operator redistribution utility.
Vector< RefCountedPtr< LayoutData< VoFIterator > > > m_multiCutVofIter
Cut-cell iterator restricted to multiply-cut cells (cells with more than one VoF)
Definition CD_PhaseRealm.H:611
void defineEBLevelGrid(const int a_lmin)
Define EBLevelGrids.
Definition CD_PhaseRealm.cpp:397
int m_multigridInterpolationWeight
Multigrid interpolator weight (for least squares)
Definition CD_PhaseRealm.H:504
Vector< Real > m_dx
Grid resolutions.
Definition CD_PhaseRealm.H:524
void defineLevelSet(const int a_lmin, const int a_numGhost)
Put the level-set on the mesh.
Definition CD_PhaseRealm.cpp:529
RefCountedPtr< BaseIF > m_baseif
Implicit/SD function.
Definition CD_PhaseRealm.H:539
void registerOperator(const std::string &a_operator)
Register an AMR operator.
Definition CD_PhaseRealm.cpp:353
void defineMasks(const int a_lmin, const int a_numGhost)
Define the regular/covered/irregular cell masks.
Definition CD_PhaseRealm.cpp:584
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > m_multiCutFaceIter
Face iterators over multiply-cut faces in each valid grid box (SurroundingNoBoundary stop criterion)
Definition CD_PhaseRealm.H:636
void setGrids(const Vector< DisjointBoxLayout > &a_grids, const int a_finestLevel)
Set grid method.
Definition CD_PhaseRealm.cpp:98
int m_multigridInterpolationOrder
Multigrid interpolator order.
Definition CD_PhaseRealm.H:494
void defineFluxReg(const int a_lmin, const int a_regsize)
Define flux register utility.
Definition CD_PhaseRealm.cpp:789
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > & getFaceIterator() const
Return face iterators over cut-cell faces in each valid grid box (FaceStop::SurroundingWithBoundary).
Definition CD_PhaseRealm.cpp:1054
void defineMultigridInjection(const int a_lmin)
Define multigrid injection utility.
EBAMRSurfaceDeposition & getSurfaceDeposition() const
Get the surface deposition operator.
Definition CD_PhaseRealm.cpp:1188
bool m_verbose
Verbose or not.
Definition CD_PhaseRealm.H:464
Vector< RefCountedPtr< LayoutData< VoFIterator > > > m_vofIter
Cut-cell iterator (all irregular cells)
Definition CD_PhaseRealm.H:606
Vector< RefCountedPtr< EBMultigridInterpolator > > & getMultigridInterpolator() const
Get multigrid interpolator.
Definition CD_PhaseRealm.cpp:1128
EBAMRParticleMesh m_particleMesh
For doing particle-mesh operations.
Definition CD_PhaseRealm.H:676
PhaseRealm(const PhaseRealm &a_other)=delete
Disallowed copy ctor.
const Vector< Real > & getDx() const
Returns resolutions.
Definition CD_PhaseRealm.cpp:1000
CellCentroidInterpolation::Type m_cellCentroidInterpolationType
Cell-center to cell-centroid interpolation method.
Definition CD_PhaseRealm.H:514
RealVect m_probLo
Lower-left corner of computational domain.
Definition CD_PhaseRealm.H:509
Vector< RefCountedPtr< EBCentroidInterpolation > > m_ebCentroidInterpolation
For interpolating data from cell centers to EB centroids.
Definition CD_PhaseRealm.H:691
const EBAMRFAB & getLevelset() const
Get level-set function.
Definition CD_PhaseRealm.cpp:1198
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > m_faceIter
Face iterators over cut-cell faces in the valid box (FaceStop::SurroundingWithBoundary).
Definition CD_PhaseRealm.H:616
int m_numGhostCells
Number of ghost cells in data holders.
Definition CD_PhaseRealm.H:474
const EBAMRCellData & getRegularCells() const
Get the regular-cell mask (value 1 in regular cells, 0 elsewhere).
Definition CD_PhaseRealm.cpp:1208
Vector< RefCountedPtr< EBNonConservativeDivergence > > m_nonConservativeDivergence
For computing non-conservative divergences.
Definition CD_PhaseRealm.H:696
void regridBase(const int a_lmin)
Regrid method for EBAMR base.
Definition CD_PhaseRealm.cpp:147
Vector< RefCountedPtr< EBGhostCellInterpolator > > & getGhostCellInterpolator() const
Get ghost cell interpolation utility.
Definition CD_PhaseRealm.cpp:1138
void defineEBCoarseToFineInterp(const int a_lmin)
Define ghost cell interpolation utility.
Definition CD_PhaseRealm.cpp:763
const Vector< RefCountedPtr< EBCentroidInterpolation > > & getEBCentroidInterpolation() const
Get objects for interpolation from cell centers to EB centroids.
Definition CD_PhaseRealm.cpp:1098
void defineGradSten(const int a_lmin)
Define gradient stencils.
Definition CD_PhaseRealm.cpp:891
PhaseRealm & operator=(const PhaseRealm &a_other)=delete
Disallowed copy assignment operator.
Vector< RefCountedPtr< EBReflux > > m_ebReflux
Flux register utility.
Definition CD_PhaseRealm.H:661
const Vector< RefCountedPtr< EBLevelGrid > > & getEBLevelGrid() const
Get EBLevelGrids.
Definition CD_PhaseRealm.cpp:1024
const Vector< RefCountedPtr< EBGradient > > & getGradientOp() const
Get gradient object.
Definition CD_PhaseRealm.cpp:1078
EBAMRCellData m_irregularCells
Cell mask with value 1 in irregular (cut) cells and 0 elsewhere.
Definition CD_PhaseRealm.H:601
const Vector< RefCountedPtr< EBLevelGrid > > & getEBLevelGridFiCo() const
Get refined grids.
Definition CD_PhaseRealm.cpp:1036
const Vector< int > & getRefinementRatios() const
Get refinement ratios.
Definition CD_PhaseRealm.cpp:994
void defineFillPatch(const int a_lmin)
Define regrid utility.
Definition CD_PhaseRealm.cpp:729
bool m_hasEbCf
Relic of an ancient past. Always true.
Definition CD_PhaseRealm.H:454
void defineParticleMesh()
Define particle mesh operator.
Definition CD_PhaseRealm.cpp:879
Vector< RefCountedPtr< LayoutData< VoFIterator > > > & getMultiCutVofIterator() const
Return vof iterator for iterating over multiply-cut cells only (cells with more than one VoF)
Definition CD_PhaseRealm.cpp:1048
int m_multigridInterpolationRadius
Multigrid interpolator radius.
Definition CD_PhaseRealm.H:499
EBAMRCellData m_regularCells
Cell mask with value 1 in regular cells and 0 elsewhere.
Definition CD_PhaseRealm.H:586
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > & getFaceIteratorWithTangentialGhosts() const
Return per-direction face iterators covering cut-cell faces that reach into the tangential ghost laye...
Definition CD_PhaseRealm.cpp:1066
const RefCountedPtr< EBIndexSpace > & getEBIndexSpace() const
Return the EB index space.
Definition CD_PhaseRealm.cpp:988
void defineFineToCoarRedistOper(const int a_lmin, const int a_regsize)
Define operator redistribution utility.
bool m_isDefined
True if things on this phase can be defined. False otherwise. Only used internally.
Definition CD_PhaseRealm.H:449
Vector< RefCountedPtr< EBGradient > > m_gradientOp
Gradient operator.
Definition CD_PhaseRealm.H:671
void preRegrid()
Perform pre-regrid operations.
Definition CD_PhaseRealm.cpp:112
void define(const Vector< DisjointBoxLayout > &a_grids, const Vector< ProblemDomain > &a_domains, const Vector< int > &a_refRat, const Vector< Real > &a_dx, const RealVect &a_probLo, const int a_finestLevel, const int a_ebGhost, const int a_numGhost, const int a_lsfGhost, const int a_redistRad, const int a_mgInterpOrder, const int a_mgInterpRadius, const int a_mgInterpWeight, const CellCentroidInterpolation::Type a_centroidStencil, const EBCentroidInterpolation::Type a_ebStencil, const RefCountedPtr< BaseIF > &a_baseif, const RefCountedPtr< EBIndexSpace > &a_ebis)
Full define function.
Definition CD_PhaseRealm.cpp:47
EBAMRCellData m_notCoveredCells
Cell mask with value 1 in non-covered (regular and irregular) cells and 0 in covered cells.
Definition CD_PhaseRealm.H:596
const EBAMRCellData & getNotCoveredCells() const
Get the non-covered-cell mask (value 1 in regular/irregular cells, 0 in covered cells).
Definition CD_PhaseRealm.cpp:1220
const EBAMRCellData & getCoveredCells() const
Get the covered-cell mask (value 1 in covered cells, 0 elsewhere).
Definition CD_PhaseRealm.cpp:1214
RefCountedPtr< EBIndexSpace > m_ebis
EB index space.
Definition CD_PhaseRealm.H:534
int m_numLsfGhostCells
Number of ghost cells in level-set function (on the mesh)
Definition CD_PhaseRealm.H:484
bool m_profile
Profile or not.
Definition CD_PhaseRealm.H:459
void defineVofIterator(const int a_lmin)
Define vof iterators.
Definition CD_PhaseRealm.cpp:445
int m_redistributionRadius
Redistribution radius.
Definition CD_PhaseRealm.H:489
Vector< ProblemDomain > m_domains
Problem domains.
Definition CD_PhaseRealm.H:554
const Vector< ProblemDomain > & getDomains() const
Get problem domains.
Definition CD_PhaseRealm.cpp:1012
int m_numEbGhostsCells
Number of ghost cells in EBLevelGrid/EBISLayout/EBISBox.
Definition CD_PhaseRealm.H:479
Vector< RefCountedPtr< LayoutData< std::array< FaceIterator, SpaceDim > > > > m_faceIterTanGhost
Per-direction face iterators covering cut-cell faces that reach into the tangential ghost layer.
Definition CD_PhaseRealm.H:631
void regridOperators(const int a_lmin)
Regrid method for EBAMR operators.
Definition CD_PhaseRealm.cpp:203
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26