12#ifndef CD_ParticleContainer_H
13#define CD_ParticleContainer_H
17#include <ParticleData.H>
18#include <ParticleValidRegion.H>
21#include <ProblemDomain.H>
22#include <DisjointBoxLayout.H>
23#include <BaseEBCellFAB.H>
28#include <CD_ParticleMap.H>
29#include <CD_NamespaceHeader.H>
295 getDx()
const noexcept;
483 template <Real& (P::*particleScalarField)()>
494 template <RealVect& (P::*particleVectorField)()>
536#pragma omp declare reduction(catenate : List<P> : ThreadSafeCatenation<P>(omp_out, omp_in))
537#pragma omp declare reduction(join : List<P> : ThreadSafeJoin<P>(omp_out, omp_in))
716#include <CD_NamespaceFooter.H>
Declaration of LevelTiles.
Declaration of various useful OpenMP-related utilities.
Implementation of CD_ParticleContainer.H.
Templated class for holding particles on an AMR hierarchy with particle remapping.
Definition CD_ParticleContainer.H:51
Vector< ProblemDomain > m_domains
Problem domains.
Definition CD_ParticleContainer.H:602
AMRCellParticles< P > & getCellParticles()
Get all cell particles.
Definition CD_ParticleContainerImplem.H:358
Vector< BoxLayout > m_grownGrids
Grown layouts.
Definition CD_ParticleContainer.H:612
void getCellParticlesDestructive(BinFab< P > &a_cellParticles, const 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:428
void organizeParticlesByPatch()
Sort particles by cell.
Definition CD_ParticleContainerImplem.H:508
bool m_verbose
Verbose or not.
Definition CD_ParticleContainer.H:582
const Vector< RealVect > getDx() const noexcept
Get grid resolutions.
Definition CD_ParticleContainerImplem.H:263
void clearMaskParticles() const
Clear the "mask" particles.
Definition CD_ParticleContainerImplem.H:1728
unsigned long long getNumberOfOutcastParticlesGlobal() const
Get global number of particles.
Definition CD_ParticleContainerImplem.H:1514
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:607
AMRCellParticles< P > m_cellSortedParticles
Cell particles.
Definition CD_ParticleContainer.H:653
void setupParticleData(const int a_base, const int a_finestLevel)
Setup function for the particle data (m_particles and m_maskParticles)
Definition CD_ParticleContainerImplem.H:154
AMRParticles< P > m_particles
The actual particles that this ParticleContainer represents.
Definition CD_ParticleContainer.H:627
const RealVect getProbLo() const noexcept
Get lower-left corner.
Definition CD_ParticleContainerImplem.H:256
void admitValidParticles(List< P > &a_evictedParticles, ParticleData< P > &a_particles, const int a_coarseLevel)
Evict particles if they move out of the valid region.
unsigned long long getNumberOfValidParticlesLocal() const
Get local number of particles.
Definition CD_ParticleContainerImplem.H:1443
void setValue(const Real a_value)
Set the particle member to the input value.
Definition CD_ParticleContainerImplem.H:1388
bool m_debug
Debug or not.
Definition CD_ParticleContainer.H:577
bool m_isOrganizedByCell
Check if particle container is "cell sorted".
Definition CD_ParticleContainer.H:567
void preRegrid(const int a_base)
Cache particles before calling regrid.
Definition CD_ParticleContainerImplem.H:1219
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, const int a_blockingFactor, const int a_finestLevel, const std::string a_realm)
Define the container. This will do a clear-out of all particles.
Definition CD_ParticleContainerImplem.H:77
virtual ~ParticleContainer()
Destructor ( does nothing)
Definition CD_ParticleContainerImplem.H:70
Vector< RefCountedPtr< LevelTiles > > m_levelTiles
Tiled AMR space.
Definition CD_ParticleContainer.H:587
void sortParticles() noexcept
Sort particles according to the < operator in the particle.
Definition CD_ParticleContainerImplem.H:197
const Vector< DisjointBoxLayout > & getGrids() const
Get the AMR grids.
Definition CD_ParticleContainerImplem.H:249
int m_blockingFactor
Blocking factor, aka grid size.
Definition CD_ParticleContainer.H:547
unsigned long long getNumberOfOutcastParticlesLocal() const
Get local number of particles.
Definition CD_ParticleContainerImplem.H:1485
ParticleData< P > & operator[](const int a_level)
Get particle data on a level.
Definition CD_ParticleContainerImplem.H:332
void addParticles(const List< P > &a_particles)
Add particles to container.
Definition CD_ParticleContainerImplem.H:551
void setupGrownGrids(const int a_base, const int a_finestLevel)
Set up grown grids.
Definition CD_ParticleContainerImplem.H:123
unsigned long long getNumberOfMaskParticlesGlobal() const
Get the number particles in the halo cells.
Definition CD_ParticleContainerImplem.H:1556
void clear(AMRParticles< P > &a_particles) const
Clear particles on input data holder.
Definition CD_ParticleContainerImplem.H:1752
void remap()
Remap over the entire AMR hierarchy.
Definition CD_ParticleContainerImplem.H:973
Vector< int > m_refRat
Refinement ratios. Entry at index 'l' is the refinement between level 'l' and level 'l+1'.
Definition CD_ParticleContainer.H:622
bool m_profile
Profile or not.
Definition CD_ParticleContainer.H:572
void clearParticles()
Clear all particles.
Definition CD_ParticleContainerImplem.H:1710
int m_finestLevel
Finest grid level.
Definition CD_ParticleContainer.H:552
bool m_isDefined
Check if particle container is defined.
Definition CD_ParticleContainer.H:562
void clearOutcast() noexcept
Clear outcast particles.
Definition CD_ParticleContainerImplem.H:1737
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:1169
unsigned long long getNumberOfMaskParticlesLocal() const
Get the number particles in the halo cells.
Definition CD_ParticleContainerImplem.H:1527
void organizeParticlesByCell()
Sort particles by cell.
Definition CD_ParticleContainerImplem.H:474
AMRParticles< P > m_bufferParticles
Special data holder that holds particles on a grown grid layout.
Definition CD_ParticleContainer.H:636
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:1110
int getFinestLevel() const
Get finest AMR level.
Definition CD_ParticleContainerImplem.H:231
std::string m_realm
Realm on which the ParticleContainer is defined.
Definition CD_ParticleContainer.H:542
void clearBufferParticles() const
Clear the buffer particles.
Definition CD_ParticleContainerImplem.H:1719
void assignLocalParticles(ParticleMap< List< P > > &a_mappedParticles, AMRParticles< P > &a_particleData) const noexcept
Gather particles locally.
Definition CD_ParticleContainerImplem.H:1189
Vector< DisjointBoxLayout > m_grids
AMR grids.
Definition CD_ParticleContainer.H:592
const std::string getRealm() const
Get the realm where this ParticleContainer lives.
Definition CD_ParticleContainerImplem.H:240
RealVect m_probLo
Lower left corner of the physical domain.
Definition CD_ParticleContainer.H:557
void transferParticlesToSingleList(List< P > &a_list, AMRParticles< P > &a_particles) const noexcept
Gather the particles onto a single list.
Definition CD_ParticleContainerImplem.H:1064
bool isOrganizedByCell() const
Is cell-sorted or not.
Definition CD_ParticleContainerImplem.H:224
void transferMaskParticles(const Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > &a_mask)
Copy particles to the mask particle data holder.
Definition CD_ParticleContainerImplem.H:1637
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:1087
ParticleContainer()
Default constructor. Leaves object in undefined state.
Definition CD_ParticleContainerImplem.H:34
void sanityCheck() const noexcept
Run a sanity check and make sure all particles are in their correctly assigned box.
Definition CD_ParticleContainerImplem.H:1038
Vector< DisjointBoxLayout > m_oldGrids
Old AMR grids. Used during regrids.
Definition CD_ParticleContainer.H:597
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:642
AMRParticles< P > & getMaskParticles()
Get the mask particles.
Definition CD_ParticleContainerImplem.H:314
unsigned long long getNumberOfValidParticlesGlobal() const
Get global number of particles.
Definition CD_ParticleContainerImplem.H:1472
void resetParticleIDs() noexcept
Compute new particle IDs.
Definition CD_ParticleContainerImplem.H:1260
void addParticlesDestructive(List< P > &a_particles)
Add particles to container. The input particles are destroyed by this routine.
Definition CD_ParticleContainerImplem.H:617
AMRParticles< P > & getBufferParticles()
Get buffer particles on all levels.
Definition CD_ParticleContainerImplem.H:296
Vector< RealVect > m_dx
Resolutions on each grid level.
Definition CD_ParticleContainer.H:617
AMRParticles< P > & getParticles()
Get all particles on all levels.
Definition CD_ParticleContainerImplem.H:270
AMRParticles< P > m_cacheParticles
Particles stored on the old grid.
Definition CD_ParticleContainer.H:648
void transferParticles(ParticleContainer< P > &a_otherContainer)
Move particles into this container.
Definition CD_ParticleContainerImplem.H:914
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, const int a_base, const int a_newFinestLevel)
Regrid function. a_base is the coarsest grid level which did not change.
Definition CD_ParticleContainerImplem.H:1298
void copyMaskParticles(const Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > &a_mask) const
Copy particles to mask particle data holder.
Definition CD_ParticleContainerImplem.H:1569
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:25