chombo-discharge
Loading...
Searching...
No Matches
CD_ParticleManagement.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_PARTICLEMANAGEMENT_H
14#define CD_PARTICLEMANAGEMENT_H
15
16// Std includes
17#include <memory>
18#include <vector>
19
20// Chombo includes
21#include <RealVect.H>
22#include <List.H>
23
24// Our includes
25#include <CD_KDNode.H>
26#include <CD_CellInfo.H>
27#include <CD_NamespaceHeader.H>
28
33
40 template <class P>
43
51 template <class P>
53
74 template <class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
75 static inline void
76 partitionAndSplitEqualWeightKD(
78 const BinaryParticleReconcile<P> a_particleReconcile = [](P& p1, P& p2, const P& p0) -> void {
79 }) noexcept;
80
102 template <class P, Real& (P::*weight)(), const RealVect& (P::*position)() const>
104 recursivePartitionAndSplitEqualWeightKD(
106 const int a_maxLeaves,
107 const BinaryParticleReconcile<P> a_particleReconcile = [](P& p1, P& p2, const P& p0) -> void {
108 }) noexcept;
109
117 static inline void
119
125 template <typename P>
126 static inline void
128
136 static inline std::vector<T>
138
145 static inline T
147
157 static inline void
159
170 static inline void
172 const T a_numParticles,
173 const RealVect& a_center,
174 const Real a_radius) noexcept;
175
186 static inline void
188 const T a_numParticles,
189 const RealVect& a_loCorner,
190 const RealVect& a_hiCorner) noexcept;
191
202 static inline void
204 const T a_numParticles,
205 const RealVect& a_center,
206 const Real a_radius) noexcept;
207
208} // namespace ParticleManagement
209
210#include <CD_NamespaceFooter.H>
211
213
214#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: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