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]

EZ (alias for EmZ)

template<typename T_ParticleShape, typename T_Strategy = traits::GetDefaultStrategy_t<>>
using picongpu::currentSolver::EZ = EmZ<T_ParticleShape, T_Strategy>

Alias for EmZ to match the currently used naming.

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

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

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 : public picongpu::currentSolver::strategy::detail::ShapeStrategy

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 : public picongpu::currentSolver::strategy::detail::ShapeStrategy

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 : public picongpu::currentSolver::strategy::detail::ShapeStrategy

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.