PICSAR is a high-performance Particle-In-Cell library developed to provide optimized subroutines on Multi-Core and Many-Integrated Core (MIC) Architectures.
PICSAR currently contains the following optimized implementations:
- Hybrid parallelization based on MPI+OpenMP: PICSAR uses a spatial domain decomposition in which each subdomain is managed by a MPI task.
- Tiling or decomposition of MPI domains into tiles: tiling is a L2 cache-blocking optimization designed to improve cache-reuse during interpolation steps (field gathering and current/charge deposition).
- An efficient parallel particle exchange algorithm between tiles
- Optimized and vectorized charge/current deposition
- Optimized and vectorized field gathering
- Scalable Pseudo Spectral Analytical Time Domain solver
- Particle cell sorting algorithm
- Dynamic load balancing
PICSAR and Python codes
PICSAR is written in FORTRAN95 and includes Python wrappers to be interfaced with Python-driven codes. Such structure is illustrated by the coupling of PICSAR with the open source code WARP. The WARP-PICSAR code structure is described in Fig. 1.