13#ifndef CD_EBAMRPARTICLEMESHIMPLEM_H
14#define CD_EBAMRPARTICLEMESHIMPLEM_H
20#include <EBCellFactory.H>
26#include <CD_NamespaceHeader.H>
28template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
36 CH_TIME(
"EBAMRParticleMesh::deposit");
38 pout() <<
"EBAMRParticleMesh::deposit" <<
endl;
42 case CoarseFineDeposition::Interp: {
47 case CoarseFineDeposition::Halo: {
52 case CoarseFineDeposition::HaloNGP: {
57 case CoarseFineDeposition::Transition: {
63 MayDay::Error(
"EBAMRParticleMesh::deposit - logic bust");
70template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
77 CH_TIME(
"EBAMRParticleMesh::depositInterp");
79 pout() <<
"EBAMRParticleMesh::depositInterp" <<
endl;
82 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
97#pragma omp parallel for schedule(runtime)
134template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
141 CH_TIME(
"EBAMRParticleMesh::depositHalo");
143 pout() <<
"EBAMRParticleMesh::depositHalo" <<
endl;
146 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
167#pragma omp parallel for schedule(runtime)
201#pragma omp parallel for schedule(runtime)
235template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
242 CH_TIME(
"EBAMRParticleMesh::depositHaloNGP");
244 pout() <<
"EBAMRParticleMesh::depositHaloNGP" <<
endl;
247 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
276#pragma omp parallel for schedule(runtime)
314template <
class P,
class Ret, Ret (P::*MemberFunc)() const>
321 CH_TIME(
"EBAMRParticleMesh::depositTransition");
323 pout() <<
"EBAMRParticleMesh::depositTransition" <<
endl;
326 constexpr int numComp = EBParticleMesh::sanitize<Ret>();
354#pragma omp parallel for schedule(runtime)
415#pragma omp parallel for schedule(runtime)
427 if (
mask.isUsable()) {
446 EBCoarseFineParticleMesh::Average::Conservative);
453template <
class P,
class Ret, Ret (P::*MemberFunc)()>
460 CH_TIME(
"EBAMRParticleMesh::interpolate");
462 pout() <<
"EBAMRParticleMesh::interpolate" <<
endl;
475#pragma omp parallel for schedule(runtime)
494 CH_TIME(
"EBAMRParticleMesh::transferMaskParticlesTransition");
496 pout() <<
"EBAMRParticleMesh::transferMaskParticlesTransition" <<
endl;
521#pragma omp parallel for schedule(runtime)
528 if (
mask.isUsable()) {
553#include <CD_NamespaceFooter.H>
CoarseFineDeposition
Coarse-fine deposition types (see CD_EBAMRParticleMesh for how these are handled).
Definition CD_CoarseFineDeposition.H:27
Agglomeration of useful data operations.
DepositionType
Deposition types.
Definition CD_DepositionType.H:24
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:24
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:316
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:218
Vector< RefCountedPtr< EBCoarseFineParticleMesh > > m_coarseFinePM
Buffers for handling arithmetic for mass moving from coarse to fine level and vice versa.
Definition CD_EBAMRParticleMesh.H:232
Vector< Real > m_dx
Grid resolutions.
Definition CD_EBAMRParticleMesh.H:193
int m_finestLevel
Finest AMR level.
Definition CD_EBAMRParticleMesh.H:178
RealVect m_probLo
Lower-left corner of physical domain.
Definition CD_EBAMRParticleMesh.H:168
bool m_isDefined
Is defined or not.
Definition CD_EBAMRParticleMesh.H:158
void interpolate(ParticleContainer< P > &a_particles, const EBAMRCellData &a_meshScalarField, const DepositionType a_interpType, const bool a_forceIrregNGP=false) const
Interpolate a scalar field onto the particle position.
Definition CD_EBAMRParticleMeshImplem.H:455
Vector< RefCountedPtr< LayoutData< EBParticleMesh > > > m_ebParticleMesh
Regular particle-mesh object on each grid level.
Definition CD_EBAMRParticleMesh.H:198
Vector< RefCountedPtr< EBLevelGrid > > m_eblgs
Grids on each level.
Definition CD_EBAMRParticleMesh.H:183
std::map< int, Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > > m_transitionMasks
Transition masks with various widths.
Definition CD_EBAMRParticleMesh.H:226
bool m_verbose
Verbose or not.
Definition CD_EBAMRParticleMesh.H:163
Vector< Copier > m_levelCopiers
Copier for moving data from valid+ghost to valid on each AMR level.
Definition CD_EBAMRParticleMesh.H:238
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:136
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:237
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:72
Vector< RefCountedPtr< LayoutData< EBParticleMesh > > > m_ebParticleMeshFiCo
Special particle-mesh objects for depositing on the coarsened fine grid.
Definition CD_EBAMRParticleMesh.H:205
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:491
Vector< int > m_refRat
Refinement ratios between levels.
Definition CD_EBAMRParticleMesh.H:188
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:30
A Copier class for making copying between BoxLayoutData<EBCellFAB> easier. This increments EBCellFABs...
Definition CD_EBAddOp.H:27
A class for depositing and interpolating particles on a single grid patch.
Definition CD_EBParticleMesh.H:35
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:31
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
virtual void deposit(EBAMRCellData &a_phi) const noexcept
Deposit particle weight on mesh.
Definition CD_TracerParticleSolverImplem.H:363
virtual ParticleContainer< P > & getParticles()
Get all particles.
Definition CD_TracerParticleSolverImplem.H:663