12#ifndef CD_ParticleManagement_H
13#define CD_ParticleManagement_H
26#include <CD_NamespaceHeader.H>
73 template <
class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
75 partitionAndSplitEqualWeightKD(
100 template <
class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
102 recursivePartitionAndSplitEqualWeightKD(
123 template <
typename P>
207#include <CD_NamespaceFooter.H>
Simple class for holding some quantities relevant in a grid cell.
Namespace containing various particle management utilities.
Implementation of CD_ParticleManagement.H.
Class for the cell-information that is often queried when merging particles inside a cell.
Definition CD_CellInfo.H:25
std::vector< P > ParticleList
List of particles. This is aliased because the KD-tree construction may require both random access an...
Definition CD_KDNode.H:39
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
Namespace for various particle management tools.
Definition CD_ParticleManagement.H:31
void deleteParticles(List< P > &a_particles, const Real a_weightThresh) noexcept
Remove particles if their weight is below the input weight.
Definition CD_ParticleManagementImplem.H:349
void removePhysicalParticles(List< P > &a_particles, const T a_numPhysPartToRemove) noexcept
Remove physical particles from the input particles.
Definition CD_ParticleManagementImplem.H:264
std::function< void(P &p1, P &p2, const P &p0)> BinaryParticleReconcile
Declaration of a reconciliation function when splitting particles.
Definition CD_ParticleManagement.H:51
void drawGaussianParticles(List< P > &a_particles, const T a_numParticles, const RealVect a_center, const Real a_radius) noexcept
Draw particles from a Gaussian distribution.
Definition CD_ParticleManagementImplem.H:488
std::vector< T > partitionParticleWeights(const T a_numPhysicalParticles, const T a_maxCompParticles) noexcept
Partition particle weights among a number of computational particles.
Definition CD_ParticleManagementImplem.H:365
void drawSphereParticles(List< P > &a_particles, const T a_numParticles, const RealVect a_center, const Real a_radius) noexcept
Draw particles in a sphere.
Definition CD_ParticleManagementImplem.H:436
std::function< void(List< P > &a_particles, const CellInfo &a_cellInfo, const int a_numTargetParticles)> ParticleMerger
Concept for splitting/merging particles.
Definition CD_ParticleManagement.H:41
T partitionParticles(const T a_numParticles)
Partition particles so that all MPI rank draw a cumulative number of particles equal to a_numParticle...
Definition CD_ParticleManagementImplem.H:399
void drawBoxParticles(List< P > &a_particles, const T a_numParticles, const RealVect a_loCorner, const RealVect a_hiCorner) noexcept
Draw particles in a box.
Definition CD_ParticleManagementImplem.H:468
void drawRandomParticles(List< P > &a_particles, const T a_numParticles, const std::function< RealVect()> &a_distribution)
Draw a specified number of random particles distributed according to a predefined distribution.
Definition CD_ParticleManagementImplem.H:419