chombo-discharge
Loading...
Searching...
No Matches
CD_ParticleOps.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2021 SINTEF Energy Research.
3 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4 */
5
13#ifndef CD_ParticleOps_H
14#define CD_ParticleOps_H
15
16// Chombo includes
17#include <RefCountedPtr.H>
18#include <BaseIF.H>
19#include <RealVect.H>
20
21// Our includes
22#include <CD_EBAMRData.H>
23#include <CD_ParticleMap.H>
24#include <CD_NamespaceHeader.H>
25
26template <typename P>
28
33{
34public:
41 static inline IntVect
43
50 static inline IntVect
52
62 template <typename P, const Real& (P::*weight)() const>
63 static inline void
65
71 template <typename P>
72 static inline void
74
81 static inline IntVect
83
95 static inline bool
97 const RealVect& a_newPos,
98 const RealVect& a_probLo,
99 const RealVect& a_probHi,
100 Real& a_s);
101
114 static inline bool
116 const RealVect& a_oldPos,
117 const RealVect& a_newPos,
118 const Real& a_bisectStep,
119 Real& a_s);
120
134 static inline bool
136 const RealVect& a_oldPos,
137 const RealVect& a_newPos,
138 const Real& a_tolerance,
139 Real& a_s);
140
146 template <typename P>
147 static inline void
149
155 template <typename P>
156 static inline void
158
163 template <typename P, const Real& (P::*scalarQuantity)() const>
164 static inline Real
165 sum(const ParticleContainer<P>& a_particles) noexcept;
166
172 template <typename P, Real (P::*scalarQuantity)()>
173 static inline Real
175
181 template <typename P>
182 static inline void
184
191 template <typename P>
192 static inline void
195 const std::function<bool(const P&)>& a_transferCrit) noexcept;
196
202 template <typename P>
203 static inline void
205
211 template <typename P, Real& (P::*particleScalarField)()>
212 static inline void
214
220 template <typename P, RealVect& (P::*particleVectorField)()>
221 static inline void
223
224#ifdef CH_MPI
234 template <typename P>
235 static inline void
237 std::vector<ParticleMap<List<P>>>& a_sentParticles) noexcept;
238
239#endif
240};
241
242#include <CD_NamespaceFooter.H>
243
244#include <CD_ParticleOpsImplem.H>
245
246#endif
Class for holding data across EBAMR hierarchies.
Implementation of CD_ParticleOps.H.
Templated class for holding particles on an AMR hierarchy with particle remapping.
Definition CD_ParticleContainer.H:51
A shallow static class for doing various kinds of particle-related operations.
Definition CD_ParticleOps.H:33
static void copy(ParticleContainer< P > &a_dst, const ParticleContainer< P > &a_src) noexcept
Copy all the particles from the a_src to a_dst.
Definition CD_ParticleOpsImplem.H:272
static Real sum(const ParticleContainer< P > &a_particles) noexcept
Perform a sum of some particle quantity.
Definition CD_ParticleOpsImplem.H:320
static void getComputationalParticlesPerCell(EBAMRCellData &a_ppc, const ParticleContainer< P > &a_src) noexcept
Get the number of computational particles per cell.
Definition CD_ParticleOpsImplem.H:87
static void transferParticles(ParticleContainer< P > &a_dstParticles, ParticleContainer< P > &a_srcParticles, const std::function< bool(const P &)> &a_transferCrit) noexcept
Transfer particles if they fulfill a certain removal criterion. Takes particles from a_srcParticles a...
Definition CD_ParticleOpsImplem.H:409
static bool ebIntersectionRaycast(const RefCountedPtr< BaseIF > &a_impFunc, const RealVect &a_oldPos, const RealVect &a_newPos, const Real &a_tolerance, Real &a_s)
Compute the intersection point between a particle path and an implicit function using a ray-casting a...
Definition CD_ParticleOpsImplem.H:221
static bool ebIntersectionBisect(const RefCountedPtr< BaseIF > &a_impFunc, const RealVect &a_oldPos, const RealVect &a_newPos, const Real &a_bisectStep, Real &a_s)
Compute the intersection point between a particle path and an implicit function using a bisection alg...
Definition CD_ParticleOpsImplem.H:177
static void setValue(ParticleContainer< P > &a_particles, const Real a_value) noexcept
Set value function. Lets the user set scalar particle quantity. Use with e.g. setValue<P,...
Definition CD_ParticleOpsImplem.H:470
static void removeParticles(ParticleContainer< P > &a_particles, const std::function< bool(const P &)> &a_removeCriterion) noexcept
Remove particles if they fulfill certain removal criterion.
Definition CD_ParticleOpsImplem.H:378
static Real sum(const ParticleContainer< P > &a_particles) noexcept
Perform a sum of some particle quantity.
static void getPhysicalParticlesPerCell(EBAMRCellData &a_ppc, const ParticleContainer< P > &a_src) noexcept
Get the number of physical particles per cell.
Definition CD_ParticleOpsImplem.H:51
static void copyDestructive(ParticleContainer< P > &a_dst, ParticleContainer< P > &a_src) noexcept
Copy all the particles from the a_src to a_dst. This destroys the source particles.
Definition CD_ParticleOpsImplem.H:295
static IntVect getParticleGridCell(const RealVect &a_particlePosition, const RealVect &a_probLo, const RealVect &a_dx) noexcept
Get the grid cell where the particle lives.
Definition CD_ParticleOpsImplem.H:121
static IntVect getParticleCellIndex(const RealVect &a_particlePosition, const RealVect &a_probLo, const Real &a_dx) noexcept
Get the cell index corresponding to the particle position.
Definition CD_ParticleOpsImplem.H:30
static void setData(ParticleContainer< P > &a_particles, const std::function< void(P &)> &a_functor) noexcept
Set value function. Lets the user set particle parameters.
Definition CD_ParticleOpsImplem.H:445
static bool domainIntersection(const RealVect &a_oldPos, const RealVect &a_newPos, const RealVect &a_probLo, const RealVect &a_probHi, Real &a_s)
Compute the intersection point between a particle path and a domain side.
Definition CD_ParticleOpsImplem.H:131
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