13#ifndef CD_PARTICLEMANAGEMENT_H
14#define CD_PARTICLEMANAGEMENT_H
27#include <CD_NamespaceHeader.H>
74 template <
class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
76 partitionAndSplitEqualWeightKD(
102 template <
class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
104 recursivePartitionAndSplitEqualWeightKD(
125 template <
typename P>
210#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:26
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:40
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
Namespace for various particle management tools.
Definition CD_ParticleManagement.H:32
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:350
void removePhysicalParticles(List< P > &a_particles, const T a_numPhysPartToRemove) noexcept
Remove physical particles from the input particles.
Definition CD_ParticleManagementImplem.H:265
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:469
std::function< void(P &p1, P &p2, const P &p0)> BinaryParticleReconcile
Declaration of a reconciliation function when splitting particles.
Definition CD_ParticleManagement.H:52
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:489
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:437
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:366
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:42
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:400
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:420