OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
ImageChargeScatterController.h
Go to the documentation of this file.
1#ifndef OPALX_IMAGE_CHARGE_SCATTER_CONTROLLER_H
2#define OPALX_IMAGE_CHARGE_SCATTER_CONTROLLER_H
3
4#include "Interpolation/CIC.h"
5#include "Ippl.h"
8
9#include <utility>
10#include <vector>
11
25template <typename T, unsigned Dim>
27 static_assert(Dim == 3, "ImageChargeScatterController currently supports Dim == 3 only.");
28
29public:
31 using PositionAttr_t = typename ippl::ParticleBase<
32 ippl::ParticleSpatialLayout<T, Dim>,
33 Kokkos::DefaultExecutionSpace::memory_space>::particle_position_type;
35 using BinPolicy_t = Kokkos::RangePolicy<>;
37
38public:
43
49 ImageChargeScatterController(bool enabled, double zPlane)
50 : enabled_m(enabled), zPlane_m(zPlane) {}
51
57 void configure(bool enabled, double zPlane) {
58 enabled_m = enabled;
59 zPlane_m = zPlane;
60 }
61
63 bool isEnabled() const { return enabled_m; }
65 double getZPlane() const { return zPlane_m; }
66
78 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho) const;
79
90 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho,
91 const BinPolicy_t& policy, const Hash_t& hash) const;
92
97 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho) const;
98
103 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho,
104 const BinPolicy_t& policy, const Hash_t& hash) const;
105
113 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho) const;
114
122 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho,
123 const BinPolicy_t& policy, const Hash_t& hash) const;
124
125 // ==== All of the following functions could be private, but need to be public for device
126 // compilation ====
127
138 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho) const;
139
150 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, RhoField_t& rho,
151 const BinPolicy_t& policy, const Hash_t& hash) const;
152
161
168 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions) const;
169
179 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions) const;
180
189 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, const BinPolicy_t& policy,
190 const Hash_t& hash) const;
191
203 std::shared_ptr<ParticleCtr_t> pc, PositionAttr_t& positions, const BinPolicy_t& policy,
204 const Hash_t& hash) const;
205
213 void flipChargeSignAll(std::shared_ptr<ParticleCtr_t> pc) const;
214
225 std::shared_ptr<ParticleCtr_t> pc, const BinPolicy_t& policy, const Hash_t& hash) const;
226
227private:
228 bool enabled_m = false;
229 double zPlane_m = 0.0;
230};
231
232#include "PartBunch/ImageChargeScatterController.tpp"
233
234#endif
Defines a structure to hold particles in energy bins and their associated data.
constexpr unsigned Dim
Definition OPALTypes.h:7
ippl::Field< double, Dim, ViewArgs... > Field_t
Definition PBunchDefs.h:28
Orchestrates primary and image-charge scatter deposition.
void scatterScaledDtSubset(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho, const BinPolicy_t &policy, const Hash_t &hash) const
Scatter a hashed particle subset using the standard dt*Q workflow.
void scatterImageOnly(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho) const
Scatter only the image (mirrored) charges for all local particles.
double getZPlane() const
Returns the mirror plane position in z.
void configure(bool enabled, double zPlane)
Update runtime settings.
ImageChargeScatterController()=default
Construct disabled controller at zPlane=0.
typename ippl::ParticleBase< ippl::ParticleSpatialLayout< T, Dim >, Kokkos::DefaultExecutionSpace::memory_space >::particle_position_type PositionAttr_t
typename ParticleBinning::AdaptBinsBase< ParticleCtr_t >::hash_type Hash_t
void accumulateScalarHaloHostStaged(RhoField_t &rho) const
Accumulate scalar field halo contributions through host-staged MPI buffers.
void scatterPrimaryAndImage(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho, const BinPolicy_t &policy, const Hash_t &hash) const
Scatter a bin-restricted particle subset with optional image pass.
bool isEnabled() const
Returns whether image-charge scatter is enabled.
void applyMirrorTransformSubset(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, const BinPolicy_t &policy, const Hash_t &hash) const
Apply z-mirror and charge sign flip for a hashed particle subset.
void flipChargeSignSubset(std::shared_ptr< ParticleCtr_t > pc, const BinPolicy_t &policy, const Hash_t &hash) const
Flip charge sign for a hashed particle subset.
void restoreMirrorTransformAll(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions) const
Restore z-mirror and charge sign flip for all local particles.
ImageChargeScatterController(bool enabled, double zPlane)
Construct controller with explicit image-charge settings.
void scatterPrimaryOnly(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho) const
Scatter only the primary (real) charges for all local particles.
void scatterImageOnly(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho, const BinPolicy_t &policy, const Hash_t &hash) const
Scatter only the image (mirrored) charges for a bin-restricted subset.
void scatterScaledDtAll(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho) const
Scatter all local particles using the standard dt*Q workflow.
void restoreMirrorTransformSubset(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, const BinPolicy_t &policy, const Hash_t &hash) const
Restore z-mirror and charge sign flip for a hashed particle subset.
void scatterPrimaryOnly(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho, const BinPolicy_t &policy, const Hash_t &hash) const
Scatter only the primary (real) charges for a bin-restricted subset.
void applyMirrorTransformAll(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions) const
Apply z-mirror and charge sign flip for all local particles.
void scatterPrimaryAndImage(std::shared_ptr< ParticleCtr_t > pc, PositionAttr_t &positions, RhoField_t &rho) const
Scatter all local particles with optional image pass.
void flipChargeSignAll(std::shared_ptr< ParticleCtr_t > pc) const
Flip charge sign for all local particles.
ippl::detail::hash_type< Kokkos::DefaultExecutionSpace::memory_space > hash_type
Definition AdaptBins.h:32
Container for all per-particle (and per-simulation) fields tracked during OPALX tracking.