Current Deposition

The current solver can be set in species.param or directly per species speciesDefinition.param.

Current Solver

Esirkepov

template<typename T_ParticleShape, typename T_Strategy = traits::GetDefaultStrategy_t<>, uint32_t T_dim = simDim>
struct Esirkepov

Implements the current deposition algorithm from T.Zh.

Esirkepov

for an arbitrary particle assign function given as a template parameter. See available shapes at “intermediateLib/particleShape”. paper: “Exact charge conservation scheme for Particle-in-Cell simulation

with an arbitrary form-factor”

Template Parameters
  • T_ParticleShape: the particle shape for the species, [picongpu::particles::shapes]

  • T_Strategy: Used strategy to reduce the scattered data [currentSolver::strategy]

  • T_Dim: Implementation for 2D or 3D

EmZ

template<typename T_ParticleShape, typename T_Strategy>
struct EmZ

EmZ (Esirkepov meets ZigZag) current deposition.

Deposit the particle current with a mixed algorithm based on Esirkepov and the ZigZag way splitting. EmZ supports arbitrary symmetric shapes and 2D/3D cartesian grids.

ZigZag publications:

  1. order paper: “A new charge conservation method in electromagnetic

    particle-in-cell simulations”, Comput. Phys. Commun. (2003) T. Umeda, Y. Omura, T. Tominaga, H. Matsumoto DOI: 10.1016/S0010-4655(03)00437-5

  2. order paper: “Charge conservation methods for computing current densities

    in electromagnetic particle-in-cell simulations”, Proceedings of ISSS. Vol. 7. 2005 T. Umeda, Y. Omura, H. Matsumoto

  3. order paper: “High-Order Interpolation Algorithms for Charge Conservation

    in Particle-in-Cell Simulation”, Commun. Comput. Phys 13 (2013) Jinqing Yu, Xiaolin Jin, Weimin Zhou, Bin Li, Yuqiu Gu DOI:10.1109/ICCIS.2012.159

Template Parameters
  • T_ParticleShape: the particle shape for the species [picongpu::particles::shapes]

  • T_Strategy: Used strategy to reduce the scattered data [currentSolver::strategy]

VillaBune

template<typename T_ParticleShape, typename T_Strategy>
struct VillaBune

Current deposition algorithm from J.

Villasenor and O. Buneman

paper: J. Villasenor and O. Buneman. Rigorous charge conservation for local electromagnetic field solvers. Computer Physics Communications, 69:306, 1992. https://doi.org/10.1016/0010-4655(92)90169-Y

Template Parameters
  • T_ParticleShape: the particle shape for the species, supports only [picongpu::particles::shapes::CIC]

  • T_Strategy: Used strategy to reduce the scattered data [currentSolver::strategy]

EsirkepovNative

template<typename T_ParticleShape, typename T_Strategy>
struct EsirkepovNative

Paper like implementation of Esirkepov current deposition.

Implements the current deposition algorithm from T.Zh.

The implementation uses an non optimized stencil width and is therefore over 4x slower than the other Esirkepov implementation. Esirkepov

Attention

this solver is only for testing

Template Parameters
  • T_ParticleShape: the particle shape for the species, [picongpu::particles::shapes]

  • T_Strategy: Used strategy to reduce the scattered data [currentSolver::strategy]

for an arbitrary particle assign function given as a template parameter. See available shapes at “intermediateLib/particleShape”. paper: “Exact charge conservation scheme for Particle-in-Cell simulation

with an arbitrary form-factor”

Deposition Strategy

A current solver supports a strategy to change how the algorithm behaves on different compute architectures. The strategy is optional, could affect performance.

StridedCachedSupercells

struct StridedCachedSupercells

Work on strided supercell domains with local caching strategy.

The current for each particle will be reduced with atomic operations into a supercell local cache. The cache will be flushed to the global memory without atomics. The device local domain of fieldJ will be decomposed with a checker board.

Suggestion: Use this strategy if atomic operations to global memory are slow. To utilize the device fully you should have enough supercells

  • 2D: minimum multiprocessor count * 9 * 4

  • 3D: minimum multiprocessor count * 27 * 4

CachedSupercells

struct CachedSupercells

Local caching strategy.

The current for each particle will be reduced with atomic operations into a supercell local cache. The cache will be flushed with atomic operations to the global memory.

Suggestion: Use this strategy if block local and global atomics are fast.

NonCachedSupercells

struct NonCachedSupercells

Non cached strategy.

The current for each particle will be reduced with atomic operations directly to the global memory.

Suggestion: Use this strategy if global atomics are fast and random memory access to a large range in memory is not a bottle neck.