12#ifndef CD_EBAMRParticleMeshImplem_H
13#define CD_EBAMRParticleMeshImplem_H
19#include <EBCellFactory.H>
25#include <CD_NamespaceHeader.H>
27template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
35 CH_TIME(
"EBAMRParticleMesh::deposit");
37 pout() <<
"EBAMRParticleMesh::deposit" <<
endl;
41 case CoarseFineDeposition::Interp: {
46 case CoarseFineDeposition::Halo: {
51 case CoarseFineDeposition::HaloNGP: {
56 case CoarseFineDeposition::Transition: {
62 MayDay::Error(
"EBAMRParticleMesh::deposit - logic bust");
69template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
76 CH_TIME(
"EBAMRParticleMesh::depositInterp");
78 pout() <<
"EBAMRParticleMesh::depositInterp" <<
endl;
81 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
96#pragma omp parallel for schedule(runtime)
133template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
140 CH_TIME(
"EBAMRParticleMesh::depositHalo");
142 pout() <<
"EBAMRParticleMesh::depositHalo" <<
endl;
145 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
166#pragma omp parallel for schedule(runtime)
200#pragma omp parallel for schedule(runtime)
234template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
241 CH_TIME(
"EBAMRParticleMesh::depositHaloNGP");
243 pout() <<
"EBAMRParticleMesh::depositHaloNGP" <<
endl;
246 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
275#pragma omp parallel for schedule(runtime)
313template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
320 CH_TIME(
"EBAMRParticleMesh::depositTransition");
322 pout() <<
"EBAMRParticleMesh::depositTransition" <<
endl;
325 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
353#pragma omp parallel for schedule(runtime)
414#pragma omp parallel for schedule(runtime)
426 if (
mask.isUsable()) {
445 EBCoarseFineParticleMesh::Average::Conservative);
452template <
class P,
class Ret, Ret (P::*MemberFunc)()>
459 CH_TIME(
"EBAMRParticleMesh::interpolate");
461 pout() <<
"EBAMRParticleMesh::interpolate" <<
endl;
474#pragma omp parallel for schedule(runtime)
493 CH_TIME(
"EBAMRParticleMesh::transferMaskParticlesTransition");
495 pout() <<
"EBAMRParticleMesh::transferMaskParticlesTransition" <<
endl;
520#pragma omp parallel for schedule(runtime)
527 if (
mask.isUsable()) {
552#include <CD_NamespaceFooter.H>
CoarseFineDeposition
Coarse-fine deposition types (see CD_EBAMRParticleMesh for how these are handled).
Definition CD_CoarseFineDeposition.H:26
Agglomeration of useful data operations.
DepositionType
Deposition types.
Definition CD_DepositionType.H:23
Declaration of a class for handling particle-mesh operations with AMR.
Declaration of a Copier class for making incrementation between LevelData<EBCellFAB> easier.
static void setValue(LevelData< MFInterfaceFAB< T > > &a_lhs, const T &a_value)
Set value in an MFInterfaceFAB data holder.
Definition CD_DataOpsImplem.H:23
void depositTransition(EBAMRCellData &a_meshData, const ParticleContainer< P > &a_particles, const DepositionType a_depositionType, const bool a_forceIrregNGP=false)
Deposit particles on the mesh.
Definition CD_EBAMRParticleMeshImplem.H:315
int getTransitionMaskWidth(const DepositionType a_depositionType, const int a_refRat) const
Get transition mask width.
Definition CD_EBAMRParticleMesh.cpp:470
std::map< int, Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > > m_outerHaloMasks
Outer halo masks with various widths.
Definition CD_EBAMRParticleMesh.H:213
Vector< RefCountedPtr< EBCoarseFineParticleMesh > > m_coarseFinePM
Buffers for handling arithmetic for mass moving from coarse to fine level and vice versa.
Definition CD_EBAMRParticleMesh.H:227
Vector< Real > m_dx
Grid resolutions.
Definition CD_EBAMRParticleMesh.H:188
void interpolate(ParticleContainer< P > &a_particles, const EBAMRCellData &a_meshData, const DepositionType a_interpType, const bool a_forceIrregNGP=false) const
Interpolate a scalar field onto the particle position.
Definition CD_EBAMRParticleMeshImplem.H:454
int m_finestLevel
Finest AMR level.
Definition CD_EBAMRParticleMesh.H:173
RealVect m_probLo
Lower-left corner of physical domain.
Definition CD_EBAMRParticleMesh.H:163
bool m_isDefined
Is defined or not.
Definition CD_EBAMRParticleMesh.H:153
Vector< RefCountedPtr< LayoutData< EBParticleMesh > > > m_ebParticleMesh
Regular particle-mesh object on each grid level.
Definition CD_EBAMRParticleMesh.H:193
Vector< RefCountedPtr< EBLevelGrid > > m_eblgs
Grids on each level.
Definition CD_EBAMRParticleMesh.H:178
std::map< int, Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > > m_transitionMasks
Transition masks with various widths.
Definition CD_EBAMRParticleMesh.H:221
bool m_verbose
Verbose or not.
Definition CD_EBAMRParticleMesh.H:158
Vector< Copier > m_levelCopiers
Copier for moving data from valid+ghost to valid on each AMR level.
Definition CD_EBAMRParticleMesh.H:233
void depositHalo(EBAMRCellData &a_meshData, const ParticleContainer< P > &a_particles, const DepositionType a_depositionType, const bool a_forceIrregNGP=false)
Deposit particles on the mesh, keeping the original particle width everywhere and depositing directly...
Definition CD_EBAMRParticleMeshImplem.H:135
void depositHaloNGP(EBAMRCellData &a_meshData, const ParticleContainer< P > &a_particles, const DepositionType a_depositionType, const bool a_forceIrregNGP=false)
Deposit particles on the mesh, using an NGP scheme for coarse-grid particles on the refinement bounda...
Definition CD_EBAMRParticleMeshImplem.H:236
void depositInterp(EBAMRCellData &a_meshData, const ParticleContainer< P > &a_particles, const DepositionType a_depositionType, const bool a_forceIrregNGP=false)
Deposit particles on the mesh, interpolating the coarse-grid invalid mass to the fine grid.
Definition CD_EBAMRParticleMeshImplem.H:71
Vector< RefCountedPtr< LayoutData< EBParticleMesh > > > m_ebParticleMeshFiCo
Special particle-mesh objects for depositing on the coarsened fine grid.
Definition CD_EBAMRParticleMesh.H:200
void transferMaskParticlesTransition(ParticleContainer< P > &a_particles, const DepositionType a_depositionType) const
Support function for transferring particles that lie in the transition zone around a refinement bound...
Definition CD_EBAMRParticleMeshImplem.H:490
Vector< int > m_refRat
Refinement ratios between levels.
Definition CD_EBAMRParticleMesh.H:183
void deposit(EBAMRCellData &a_meshData, const ParticleContainer< P > &a_particles, const DepositionType a_depositionType, const CoarseFineDeposition a_coarseFineDeposition, const bool a_forceIrregNGP=false)
Class for deposition of particles of a type P to the mesh. This is the main function that users shoul...
Definition CD_EBAMRParticleMeshImplem.H:29
A Copier class for making copying between BoxLayoutData<EBCellFAB> easier. This increments EBCellFABs...
Definition CD_EBAddOp.H:26
A class for depositing and interpolating particles on a single grid patch.
Definition CD_EBParticleMesh.H:34
static IntVect getParticleCellIndex(const RealVect &a_particlePosition, const RealVect &a_probLo, const Real &a_dx) noexcept
Get the cell index corresponding to the particle position.
Definition CD_ParticleOpsImplem.H:30
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
virtual void deposit(EBAMRCellData &a_phi) const noexcept
Deposit particle weight on mesh.
Definition CD_TracerParticleSolverImplem.H:362
virtual ParticleContainer< P > & getParticles()
Get all particles.
Definition CD_TracerParticleSolverImplem.H:662