pySDC

pySDC is a Python implementation of the spectral deferred correction approach and its flavors, esp. the parallel-in-time extension PFASST. It is intended for rapid prototyping and educational purposes. New ideas can be tested and first toy problems can be easily implemented.

5
mentions
5
contributors

Cite this software

What pySDC can do for you

Welcome to pySDC!

The pySDC project is a Python implementation of the spectral deferred correction (SDC) approach and its flavors, esp. the multilevel extension MLSDC and the parallel-in-time variant PFASST. It is intended for rapid prototyping and educational purposes. New ideas like e.g. sweepers or predictors can be tested and first toy problems can be easily implemented.

Features

  • Variants of SDC: explicit, implicit, IMEX, multi-implicit, Verlet, multi-level, diagonal, multi-step
  • Variants of PFASST: virtual parallel or MPI-based parallel, classical of multigrid perspective
  • 8 tutorials: from setting up a first collocation problem to SDC, PFASST and advanced topics
  • Projects: many documented projects with defined and tested outcomes
  • Many different examples, collocation types, data types already implemented
  • Works with FEniCS, mpi4py-fft and PETSc (through petsc4py)
  • Continuous integration via GitHub Actions and Gitlab CI
  • Fully compatible with Python 3.7 - 3.10, runs at least on Ubuntu and MacOS

Getting started

The code is hosted on GitHub, see https://github.com/Parallel-in-Time/pySDC, and PyPI, see https://pypi.python.org/pypi/pySDC.
While using pip install pySDC will give you a core version of pySDC to work with, working with the developer version is most often the better choice. We thus recommend to checkout the code from GitHub and install the dependencies e.g. by using a conda environment.
For this, pySDC ships with environment files which can be found in the folder etc/. Use these as e.g.

   conda env create --yes -f etc/environment-base.yml

To check your installation, run

   pytest pySDC/tests -m NAME

where NAME corresponds to the environment you chose (base in the example above).
You may need to update your PYTHONPATH by running

   export PYTHONPATH=$PYTHONPATH:/path/to/pySDC/root/folder

in particular if you want to run any of the playgrounds, projects or tutorials.
All import statements there assume that the pySDC's base directory is part of PYTHONPATH.

For many examples, LaTeX is used for the plots, i.e. a decent installation of this is needed in order to run those examples.
When using fenics or petsc4py, a C++ compiler is required (although installation may go through at first).

For more details on pySDC, check out http://www.parallel-in-time.org/pySDC.

Acknowledgements

This project has received funding from the European High-Performance Computing Joint Undertaking (JU) under grant agreement No 955701 (TIME-X).
The JU receives support from the European Union’s Horizon 2020 research and innovation programme and Belgium, France, Germany, and Switzerland.
This project also received funding from the German Federal Ministry of Education and Research (BMBF) grant 16HPC047.
The project also received help from the Helmholtz Platform for Research Software Engineering - Preparatory Study.

Keywords
Programming languages
  • Jupyter Notebook 52%
  • Python 47%
  • C++ 1%
License
  • BSD-2-Clause
  • Open Access
</>Source code

Participating organisations

Forschungszentrum Jülich
Hamburg University of Technology
University of Wuppertal

Mentions

Contributors

RS
Robert Speck
Lead developer
Forschungszentrum Jülich
DR
LW
Lisa Wimmer
Bergische Universität Wuppertal
TB
Thomas Baumann
Forschungszentrum Jülich

Helmholtz Program-oriented Funding IV

Research Field
Research Program
PoF Topic
5 Information
5.1 Engineering Digital Futures: Supercomputing, Data Management and Information Security for Knowledge and Action
5.1.1 Enabling Computational- & Data-Intensive Science and Engineering
  • 5 Information
    • 5.1 Engineering Digital Futures: Supercomputing, Data Management and Information Security for Knowledge and Action
      • 5.1.1 Enabling Computational- & Data-Intensive Science and Engineering