EPOC++ a future-proofed kinetic simulation code for plasma physics at exascale

Lead Research Organisation: University of Warwick
Department Name: Physics


Central to many research programmes in plasma physics is the requirement to capture the full kinetic properties of the plasma. This is most commonly done with a particle-in-cell (PIC) code which move samples of plasma particles in the self-consistent electromagnetic field. For over a decade Warwick, initially in collaboration with Oxford and York, has been developing such a code for UK plasma researchers - the EPOCH code. The core PIC scheme deals with a plasma in which collisions between particles are ignores - a collisionless plasma. EPOCH has been extended to include binary collisions, Quantum Electro-Dynamics (QED) processes and radiation. This has made EPOCH one of the most widely used PIC codes worldwide with application to particle accelerators, next generation light sources, high-power laser QED studies and fusion science for both magnetic and inertial confinement fusion.

There are key science extensions required to UK EPOCH to meet the needs of the UK user base. These are detailed in the Objectives section above. However, maintaining EPOCH has become increasingly fraught. This is because EPOCH evolved out of an older Fortran PIC code and while this was relatively easy to modify for the collisionless plasma when adding more sophisticated boundaries, diagnostic or physics packages the restricted feature set of Fortran made these additions increasingly cumbersome. It may be possible to persevere with the old legacy Fortran for a while longer but there are other perhaps more pressing problems. Modern high-performance computer (HPC) systems are moving away from being built all from the same processor type. Instead HPC systems with a mixture of traditional CPUs accelerated with GPUs are becoming prevalent. Other systems are being installed which use ARM processors or even FPGAs. This move towards heterogeneous HPC systems and a complex HPC landscape is been driven by the need for continued increases in computing power. The toolsets for working with these newer heterogeneous systems are primarily in C++, not Fortran. Moving EPOCH over to a C++ implementation (renamed EPOC++ as a result) opens up access to these newer routes towards Exascale HPC. At the same time it makes the code easier to maintain and more flexible for future changes. This project will complete all these changes and deliver an EPOC++ code able to meet the needs of UK and International EPOCH users with a performant and parallel code future proofed for decades.


10 25 50