Releases: ComputationalRadiationPhysics/picongpu
C++17, lasers via incidentField, DispersivePulse laser profile, sub-stepping field solver, and PICMI support
With this release, laser initialization switches to an incidentField approach, which allows easier initialization of arbitrary Maxwell-compliant electromagnetic fields in a simulation. Old laser.param files won't work anymore. See the documentation! This update of the laser implementation was also used to add a new profile 'DispersivePulse' and to rename the existing laser profiles. The new profile allows the initialization of Gaussian laser pulses with arbitrary first, second and third order dispersion, while the renaming aims at a more precise expression of the laser profile.
Basic PICMI support is also added to PIConGPU, as well as time substepping for field solvers and improved handling of currents in PML boundaries. Again, see the documentation for details.
Major code refactorings also come with this release. These include a cleanup of the code base, in particular removal of unused plugins and CuSTL, performance improvements, and a switch to C++17 as the minimum required version.
As usual, this release contains fixes to PIConGPU and enhancements and clarifications to the documentation.
Thanks to Sergei Bastrakov, Finn-Ole Carstens, Alexander Debus, Fabia Dietrich, Simeon Ehrig, Marco Garten, Bernhard Manfred Gruber, Axel Huebl, Jeffrey Kelling, Anton Lebedev, Brian Edward Marre, Paweł Ordyna, Richard Pausch, Franz Pöschel, Klaus Steiniger, Jan Stephan, Hannes Tröpgen, Mika Soren Voß, and René Widera for their contributions to this release!
C++14, New Solvers, I/O via openPMD API, HIP Support
This release switches to C++14 as minimum required version. Transition to C++17 is planned for upcoming releases.
We extended PIConGPU with a few new solvers. Binary collisions are now available. We added arbitrary-order FDTD Maxwell's solver. All field solvers are now compatible with perfectly matched layer absorber, which became default. Yee solver now supports incident field generation using total field/scattered field technique. We added Higuera-Cary particle pusher and improved compatibility of pushers with probe species. Implementation of particle boundaries was extended to support custom positions, reflecting and thermal boundary kinds were added.
With this release, PIConGPU fully switches to openPMD API library for performing I/O. The native HDF5 and ADIOS output plugins were replaced with a new openPMD plugin. All other plugins were updated to use openPMD API. Plugins generally support HDF5 and ADIOS2 backends of openPMD API, a user can choose file format based on their installation of openPMD API. We also added new plugins for SAXS and particle merging.
We added support for HIP as a computational backend. In particular, it allows running on AMD GPUs. Several performance optimizations were added. Some functors and plugins now have performance-influencing parameters exposed to a user.
The code was largely modernized and refactored, documentation was extended.
Thanks to Sergei Bastrakov, Kseniia Bastrakova, Brian Edward Marre, Alexander Debus, Marco Garten, Bernhard Manfred Gruber, Axel Huebl, Jakob Trojok, Jeffrey Kelling, Anton Lebedev, Felix Meyer, Paweł Ordyna, Franz Poeschel, Lennert Sprenger, Klaus Steiniger, Manhui Wang, Sebastian Starke, Maxence Thévenet, Richard Pausch, René Widera for contributions to this release!
Perfectly Matched Layer (PML) and Bug Fixes
This release adds a new field absorber for the Yee solver, convolutional perfectly matched layer (PML). Compared to the still supported exponential damping absorber, PML provides better absorption rate and much less spurious reflections.
We added new plugins for computing emittance and transition radiation, particle rendering with the ISAAC plugin, Python tools for reading and visualizing output of a few plugins.
The release also adds a few quality-of-life features, including a new memory calculator, better command-line experience with new options and bash-completion, improved error handling, cleanup of the example setups, and extensions to documentation.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Igor Andriyash, Sergei Bastrakov, Xeinia Bastrakova, Andrei Berceanu, Finn-Ole Carstens, Alexander Debus, Jian Fuh Ong, Marco Garten, Axel Huebl, Sophie Rudat (Koßagk), Anton Lebedev, Felix Meyer, Pawel Ordyna, Richard Pausch, Franz Pöschel, Adam Simpson, Sebastian Starke, Klaus Steiniger, René Widera for contributions to this release!
System Updates and Bug Fixes
This release adds updates and new HPC system templates. Important bug fixes include I/O work-arounds for issues in OpenMPI 2.0-4.0 (mainly with HDF5), guards for particle creation with user-defined profiles, a fixed binomial current smoothing, checks for the number of devices in grid distributions and container (Docker & Singularity) modernizations.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Axel Huebl, Alexander Debus, Igor Andriyash, Marco Garten, Sergei Bastrakov, Adam Simpson, Richard Pausch, Juncheng E, Klaus Steiniger, and René Widera for contributions to this release!
CPU Plugin Performance
This release fixes a performance regression for energy histograms and phase space plugins on CPU with our OpenMP backend. At least OpenMP 3.1 is needed to benefit from this. Additionally, several small documentation issues have been fixed and the energy histogram python tool forgot to return the first iteration.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Axel Huebl, René Widera, Sebastian Starke, and Marco Garten for contributions to this release!
Minor Bugs and Example Updates
This release fixes minor bugs found after the 0.4.0 release. Some examples were slightly outdated in syntax, the new "probe particle" EveryNthCell
initialization functor was broken when not used with equal spacing per dimension. In some rare cases, sliding could occur twice in moving window simulations.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Axel Huebl, René Widera, Richard Pausch and Andrei Berceanu for contributions to this release!
CPU Support, Particle Filter, Probes & Merging
This release adds CPU support, making PIConGPU a many-core, single-source, performance portable PIC code for all kinds of supercomputers. We added particle filters to initialization routines and plugins, allowing fine-grained in situ control of physical observables. All particle plugins now support those filters and can be called multiple times with different settings.
Particle probes and more particle initialization manipulators have been added. A particle merging plugin has been added. The Thomas-Fermi model has been improved, allowing to set empirical cut-offs. PIConGPU input and output (plugins) received initial Python bindings for efficient control and analysis.
User input files have been dramatically simplified. For example, creating the PIConGPU binary from input files for GPU or CPU is now as easy as pic-build -b cuda
or pic-build -b omp2b
respectively.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Axel Huebl, René Widera, Benjamin Worpitz, Sebastian Starke, Marco Garten, Richard Pausch, Alexander Matthes, Sergei Bastrakov, Heiko Burau, Alexander Debus, Ilja Göthel, Sophie Rudat, Jeffrey Kelling, Klaus Steiniger, and Sebastian Hahn for contributing to this release!
Phase Space Momentum, ADIOS One-Particle Dumps & Field Names
Phase Space Momentum, ADIOS One-Particle Dumps & Field Names This release fixes a bug in the phase space plugin which derived a too-low momentum bin for particles below the typical weighting (and too-high for above it). ADIOS dumps crashed on one-particle dumps and in the name of on-the-fly particle-derived fields species name and field name were in the wrong order. The plugins libSplash (1.6.0) and PNGwriter (0.6.0) need exact versions, later releases will require a newer version of PIConGPU.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Axel Huebl, René Widera, Sergei Bastrakov and Sebastian Hahn for contributing to this release!
Field Energy Plugin, Gaussian Density Profile and Restarts
This release fixes the energy field plugin diagnostics and the "downramp" parameter of the pre-defined Gaussian density profile. Restarts with enabled background fields were fixed. Numerous improvements to our build system were added to deal more gracefully with co-existing system-wide default libraries. A stability issue due to an illegal memory access in the PMacc event system was fixed.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
Thanks to Axel Huebl, Richard Pausch and René Widera for contributions to this release!
Bremsstrahlung, EmZ, Thomas-Fermi, Improved Lasers, C++11
This is the first release of PIConGPU requiring C++11. We added a newly developed current solver (EmZ), support for the generation of Bremsstrahlung, Thomas-Fermi Ionization, Laguerre-modes in the Gaussian-Beam laser, in-simulation plane for laser initialization, new plugins for in situ visualization (ISAAC), a generalized particle calorimeter and a GPU resource monitor. Initial support for clang (host and device) has been added and our documentation has been streamlined to use Sphinx from now on.
Please refer to our ChangeLog for a full list of features, fixes and user interface changes before getting started.
We also started continuous documentation ("a manual") with Sphinx:
https://picongpu.readthedocs.io
This page will in the mid time frame replace our wiki and will allow you to select a specific version of PIConGPU. Such a "release-aware documentation" is important to us since our tools, workflows and models naturally change over time (for the better). Also, you can contribute to it via pull requests!
Thanks to Axel Huebl, René Widera, Richard Pausch, Alexander Matthes, Alexander Grund, Marco Garten, Heiko Burau, Alexander Debus, Erik Zenker, Bifeng Lei and Klaus Steiniger for contributions to this release!