13#ifndef CD_PARTICLECONTAINER_H
14#define CD_PARTICLECONTAINER_H
18#include <ParticleData.H>
19#include <ParticleValidRegion.H>
22#include <ProblemDomain.H>
23#include <DisjointBoxLayout.H>
24#include <BaseEBCellFAB.H>
30#include <CD_NamespaceHeader.H>
572#pragma omp declare reduction(catenate : List<P> : ThreadSafeCatenation<P>(omp_out, omp_in))
573#pragma omp declare reduction(join : List<P> : ThreadSafeJoin<P>(omp_out, omp_in))
752#include <CD_NamespaceFooter.H>
Declaration of LevelTiles.
Declaration of various useful OpenMP-related utilities.
Implementation of CD_ParticleContainer.H.
Vector< RefCountedPtr< LayoutData< BinFab< P > > > > AMRCellParticles
Alias for cell-sorted particles on each AMR level.
Definition CD_ParticleContainer.H:42
Vector< RefCountedPtr< ParticleData< P > > > AMRParticles
Alias for ParticleData on each AMR level.
Definition CD_ParticleContainer.H:36
Implementation of CD_ParticleOps.H.
std::unordered_map< std::pair< uint32_t, uint32_t >, T, PairHash > ParticleMap
Underlying particle map when gathering/scattering particles.
Definition CD_ParticleMap.H:75
Templated class for holding particles on an AMR hierarchy with particle remapping.
Definition CD_ParticleContainer.H:52
Vector< RealVect > getDx() const noexcept
Get grid resolutions.
Definition CD_ParticleContainerImplem.H:257
Vector< ProblemDomain > m_domains
Problem domains.
Definition CD_ParticleContainer.H:638
RealVect getProbLo() const noexcept
Get lower-left corner.
Definition CD_ParticleContainerImplem.H:250
AMRCellParticles< P > & getCellParticles()
Get all cell particles.
Definition CD_ParticleContainerImplem.H:352
Vector< BoxLayout > m_grownGrids
Grown layouts.
Definition CD_ParticleContainer.H:648
void organizeParticlesByPatch()
Sort particles by cell.
Definition CD_ParticleContainerImplem.H:502
bool m_verbose
Verbose or not.
Definition CD_ParticleContainer.H:618
void clearMaskParticles() const
Clear the "mask" particles.
Definition CD_ParticleContainerImplem.H:1726
unsigned long long getNumberOfOutcastParticlesGlobal() const
Get global number of particles.
Definition CD_ParticleContainerImplem.H:1512
Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > m_validRegion
Map of valid cells; evaluates to false if a cell is covered by a finer grid.
Definition CD_ParticleContainer.H:643
AMRCellParticles< P > m_cellSortedParticles
Cell particles.
Definition CD_ParticleContainer.H:689
AMRParticles< P > m_particles
The actual particles that this ParticleContainer represents.
Definition CD_ParticleContainer.H:663
unsigned long long getNumberOfValidParticlesLocal() const
Get local number of particles.
Definition CD_ParticleContainerImplem.H:1441
void getCellParticlesDestructive(BinFab< P > &a_cellParticles, int a_lvl, const DataIndex &a_dit)
Fill a cell-sorted particle data holder with all the particles in the grid patch. The original partic...
Definition CD_ParticleContainerImplem.H:422
void preRegrid(int a_lmin)
Cache particles before calling regrid.
Definition CD_ParticleContainerImplem.H:1217
bool m_debug
Debug or not.
Definition CD_ParticleContainer.H:613
bool m_isOrganizedByCell
Check if particle container is "cell sorted".
Definition CD_ParticleContainer.H:603
std::string getRealm() const
Get the realm where this ParticleContainer lives.
Definition CD_ParticleContainerImplem.H:234
void regrid(const Vector< DisjointBoxLayout > &a_grids, const Vector< ProblemDomain > &a_domains, const Vector< Real > &a_dx, const Vector< int > &a_refRat, const Vector< ValidMask > &a_validMask, const Vector< RefCountedPtr< LevelTiles > > &a_levelTiles, int a_base, int a_newFinestLevel)
Regrid function. a_base is the coarsest grid level which did not change.
Definition CD_ParticleContainerImplem.H:1296
virtual ~ParticleContainer()
Destructor ( does nothing)
Definition CD_ParticleContainerImplem.H:64
Vector< RefCountedPtr< LevelTiles > > m_levelTiles
Tiled AMR space.
Definition CD_ParticleContainer.H:623
void sortParticles() noexcept
Sort particles according to the < operator in the particle.
Definition CD_ParticleContainerImplem.H:191
const Vector< DisjointBoxLayout > & getGrids() const
Get the AMR grids.
Definition CD_ParticleContainerImplem.H:243
ParticleContainer(ParticleContainer &&)=default
Move constructor.
int m_blockingFactor
Blocking factor, aka grid size.
Definition CD_ParticleContainer.H:583
unsigned long long getNumberOfOutcastParticlesLocal() const
Get local number of particles.
Definition CD_ParticleContainerImplem.H:1483
void addParticles(const List< P > &a_particles)
Add particles to container.
Definition CD_ParticleContainerImplem.H:547
unsigned long long getNumberOfMaskParticlesGlobal() const
Get the number particles in the halo cells.
Definition CD_ParticleContainerImplem.H:1554
void define(const Vector< DisjointBoxLayout > &a_grids, const Vector< ProblemDomain > &a_domains, const Vector< Real > &a_dx, const Vector< int > &a_refRat, const Vector< ValidMask > &a_validMask, const Vector< RefCountedPtr< LevelTiles > > &a_levelTiles, const RealVect &a_probLo, int a_blockingFactor, int a_finestLevel, const std::string &a_realm)
Define the container. This will do a clear-out of all particles.
Definition CD_ParticleContainerImplem.H:71
void admitValidParticles(List< P > &a_evictedParticles, ParticleData< P > &a_particles, int a_coarseLevel)
Evict particles if they move out of the valid region.
void clear(AMRParticles< P > &a_particles) const
Clear particles on input data holder.
Definition CD_ParticleContainerImplem.H:1750
void remap()
Remap over the entire AMR hierarchy.
Definition CD_ParticleContainerImplem.H:971
Vector< int > m_refRat
Refinement ratios. Entry at index 'l' is the refinement between level 'l' and level 'l+1'.
Definition CD_ParticleContainer.H:658
bool m_profile
Profile or not.
Definition CD_ParticleContainer.H:608
void setupParticleData(int a_base, int a_finestLevel)
Setup function for the particle data (m_particles and m_maskParticles)
Definition CD_ParticleContainerImplem.H:148
void clearParticles()
Clear all particles.
Definition CD_ParticleContainerImplem.H:1708
int m_finestLevel
Finest grid level.
Definition CD_ParticleContainer.H:588
bool m_isDefined
Check if particle container is defined.
Definition CD_ParticleContainer.H:598
void clearOutcast() noexcept
Clear outcast particles.
Definition CD_ParticleContainerImplem.H:1735
void catenateParticleMaps(std::vector< ParticleMap< List< P > > > &a_globalParticles, std::vector< ParticleMap< List< P > > > &a_localParticles) const noexcept
Catenate the particles. This is usually called within OpenMP parallel regions.
Definition CD_ParticleContainerImplem.H:1167
unsigned long long getNumberOfMaskParticlesLocal() const
Get the number particles in the halo cells.
Definition CD_ParticleContainerImplem.H:1525
void organizeParticlesByCell()
Sort particles by cell.
Definition CD_ParticleContainerImplem.H:468
AMRParticles< P > m_bufferParticles
Special data holder that holds particles on a grown grid layout.
Definition CD_ParticleContainer.H:672
void mapParticlesToAMRGrid(std::vector< ParticleMap< List< P > > > &a_mappedParticles, List< P > &a_unmappedParticles) const noexcept
Iterate through the unmapped particles and map them to proper level, grid indices,...
Definition CD_ParticleContainerImplem.H:1108
int getFinestLevel() const
Get finest AMR level.
Definition CD_ParticleContainerImplem.H:225
std::string m_realm
Realm on which the ParticleContainer is defined.
Definition CD_ParticleContainer.H:578
void clearBufferParticles() const
Clear the buffer particles.
Definition CD_ParticleContainerImplem.H:1717
void assignLocalParticles(ParticleMap< List< P > > &a_mappedParticles, AMRParticles< P > &a_particleData) const noexcept
Gather particles locally.
Definition CD_ParticleContainerImplem.H:1187
Vector< DisjointBoxLayout > m_grids
AMR grids.
Definition CD_ParticleContainer.H:628
RealVect m_probLo
Lower left corner of the physical domain.
Definition CD_ParticleContainer.H:593
void transferParticlesToSingleList(List< P > &a_list, AMRParticles< P > &a_particles) const noexcept
Gather the particles onto a single list.
Definition CD_ParticleContainerImplem.H:1062
bool isOrganizedByCell() const
Is cell-sorted or not.
Definition CD_ParticleContainerImplem.H:218
void transferMaskParticles(const Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > &a_mask)
Copy particles to the mask particle data holder.
Definition CD_ParticleContainerImplem.H:1635
ParticleContainer & operator=(ParticleContainer &&)=default
Move assignment operator.
void copyParticlesToSingleList(List< P > &a_list, const AMRParticles< P > &a_particles) const noexcept
Copy the input particles onto a single list.
Definition CD_ParticleContainerImplem.H:1085
ParticleContainer()
Default constructor. Leaves object in undefined state.
void sanityCheck() const noexcept
Run a sanity check and make sure all particles are in their correctly assigned box.
Definition CD_ParticleContainerImplem.H:1036
void setValue(Real a_value)
Set the particle member to the input value.
Definition CD_ParticleContainerImplem.H:1386
Vector< DisjointBoxLayout > m_oldGrids
Old AMR grids. Used during regrids.
Definition CD_ParticleContainer.H:633
AMRParticles< P > m_maskParticles
Special data holder that holds copies of particles on the coarse level that are within a specified ra...
Definition CD_ParticleContainer.H:678
AMRParticles< P > & getMaskParticles()
Get the mask particles.
Definition CD_ParticleContainerImplem.H:308
RefCountedPtr< LevelData< BaseFab< bool > > > ValidMask
alias type alias.
Definition CD_ParticleContainer.H:55
unsigned long long getNumberOfValidParticlesGlobal() const
Get global number of particles.
Definition CD_ParticleContainerImplem.H:1470
void resetParticleIDs() noexcept
Compute new particle IDs.
Definition CD_ParticleContainerImplem.H:1258
void addParticlesDestructive(List< P > &a_particles)
Add particles to container. The input particles are destroyed by this routine.
Definition CD_ParticleContainerImplem.H:613
void setupGrownGrids(int a_base, int a_finestLevel)
Set up grown grids.
Definition CD_ParticleContainerImplem.H:117
AMRParticles< P > & getBufferParticles()
Get buffer particles on all levels.
Definition CD_ParticleContainerImplem.H:290
Vector< RealVect > m_dx
Resolutions on each grid level.
Definition CD_ParticleContainer.H:653
AMRParticles< P > & getParticles()
Get all particles on all levels.
Definition CD_ParticleContainerImplem.H:264
AMRParticles< P > m_cacheParticles
Particles stored on the old grid.
Definition CD_ParticleContainer.H:684
void transferParticles(ParticleContainer< P > &a_otherContainer)
Move particles into this container.
Definition CD_ParticleContainerImplem.H:912
void copyMaskParticles(const Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > &a_mask) const
Copy particles to mask particle data holder.
Definition CD_ParticleContainerImplem.H:1567
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