chombo-discharge
Loading...
Searching...
No Matches
CD_ParticleOps.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
16#ifndef CD_PARTICLEOPS_H
17#define CD_PARTICLEOPS_H
18
19// Chombo includes
20#include <RefCountedPtr.H>
21#include <BaseIF.H>
22#include <RealVect.H>
23
24// Our includes
25#include <CD_EBAMRData.H>
26#include <CD_ParticleMap.H>
28#include <CD_NamespaceHeader.H>
29
34{
35public:
43 static inline IntVect
44 getParticleCellIndex(const RealVect& a_particlePosition, const RealVect& a_probLo, const Real& a_dx) noexcept;
45
53 static inline IntVect
54 getParticleCellIndex(const RealVect& a_particlePosition, const RealVect& a_probLo, const RealVect& a_dx) noexcept;
55
64 template <typename P, typename Traits>
65 static inline void
66 getPhysicalParticlesPerCell(EBAMRCellData& a_ppc, const ParticleContainer<P, Traits>& a_src) noexcept;
67
75 template <typename P, typename Traits>
76 static inline void
77 getComputationalParticlesPerCell(EBAMRCellData& a_ppc, const ParticleContainer<P, Traits>& a_src) noexcept;
78
86 static inline IntVect
87 getParticleGridCell(const RealVect& a_particlePosition, const RealVect& a_probLo, const RealVect& a_dx) noexcept;
88
101 static inline bool
102 domainIntersection(const RealVect& a_oldPos,
103 const RealVect& a_newPos,
104 const RealVect& a_probLo,
105 const RealVect& a_probHi,
106 Real& a_s);
107
121 static inline bool
122 ebIntersectionBisect(const RefCountedPtr<BaseIF>& a_impFunc,
123 const RealVect& a_oldPos,
124 const RealVect& a_newPos,
125 const Real& a_bisectStep,
126 Real& a_s);
127
144 static inline bool
145 ebIntersectionRaycast(const RefCountedPtr<BaseIF>& a_impFunc,
146 const RealVect& a_oldPos,
147 const RealVect& a_newPos,
148 const Real& a_tolerance,
149 Real& a_s);
150
160 template <typename P, typename Traits>
161 static inline void
163
171 template <typename P, typename Traits>
172 static inline Real
173 sum(const ParticleContainer<P, Traits>& a_particles) noexcept;
174
182 template <typename P, typename Traits>
183 static inline void
185 const std::function<void(ParticleSoA<P, Traits>&, std::size_t)>& a_functor) noexcept;
186};
187
188#include <CD_NamespaceFooter.H>
189
190#include <CD_ParticleOpsImplem.H>
191
192#endif
Class for holding data across EBAMR hierarchies.
Declaration of an AMR-hierarchy container that owns per-patch ParticleSoA leaves.
Implementation of CD_ParticleOps.H.
Implementation of CD_ParticleOps.H.
AMR-hierarchy container of computational particles, stored per patch in Struct-of-Arrays form.
Definition CD_ParticleContainer.H:123
A shallow static class for doing various kinds of particle-related operations.
Definition CD_ParticleOps.H:34
static Real sum(const ParticleContainer< P, Traits > &a_particles) noexcept
Global sum of the container-owned weight column (SoA overload).
Definition CD_ParticleOpsImplem.H:302
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:224
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:175
static void copyDestructive(ParticleContainer< P, Traits > &a_dst, ParticleContainer< P, Traits > &a_src) noexcept
Move all particles from a_src into a_dst (per leaf), emptying a_src. SoA overload.
Definition CD_ParticleOpsImplem.H:278
static void getComputationalParticlesPerCell(EBAMRCellData &a_ppc, const ParticleContainer< P, Traits > &a_src) noexcept
Get the number of computational particles per cell (SoA overload).
Definition CD_ParticleOpsImplem.H:85
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:116
static void setData(ParticleContainer< P, Traits > &a_particles, const std::function< void(ParticleSoA< P, Traits > &, std::size_t)> &a_functor) noexcept
Set value function for SoA containers. Lets the user set particle parameters via a (leaf,...
Definition CD_ParticleOpsImplem.H:334
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:32
static void getPhysicalParticlesPerCell(EBAMRCellData &a_ppc, const ParticleContainer< P, Traits > &a_src) noexcept
Get the number of physical particles per cell (SoA overload).
Definition CD_ParticleOpsImplem.H:53
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:126
Arena-backed Struct-of-Arrays particle container for a single grid patch.
Definition CD_ParticleSoA.H:655