chombo-discharge
Loading...
Searching...
No Matches
CD_ParticleManagement.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2022 SINTEF Energy Research.
3 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4 */
5
12#ifndef CD_ParticleManagement_H
13#define CD_ParticleManagement_H
14
15// Std includes
16#include <memory>
17#include <vector>
18
19// Chombo includes
20#include <RealVect.H>
21#include <List.H>
22
23// Our includes
24#include <CD_KDNode.H>
25#include <CD_CellInfo.H>
26#include <CD_NamespaceHeader.H>
27
32
39 template <class P>
42
50 template <class P>
52
73 template <class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
74 static inline void
75 partitionAndSplitEqualWeightKD(
77 const BinaryParticleReconcile<P> a_particleReconcile = [](P& p1, P& p2, const P& p0) -> void {
78 }) noexcept;
79
100 template <class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
102 recursivePartitionAndSplitEqualWeightKD(
104 const int a_maxLeaves,
105 const BinaryParticleReconcile<P> a_particleReconcile = [](P& p1, P& p2, const P& p0) -> void {
106 }) noexcept;
107
115 static inline void
117
123 template <typename P>
124 static inline void
126
133 static inline std::vector<T>
135
142 static inline T
144
154 static inline void
156
167 static inline void
169 const T a_numParticles,
170 const RealVect a_center,
171 const Real a_radius) noexcept;
172
183 static inline void
185 const T a_numParticles,
186 const RealVect a_loCorner,
187 const RealVect a_hiCorner) noexcept;
188
199 static inline void
201 const T a_numParticles,
202 const RealVect a_center,
203 const Real a_radius) noexcept;
204
205} // namespace ParticleManagement
206
207#include <CD_NamespaceFooter.H>
208
210
211#endif
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