Mikael Mortensen


The spectralDNS project revolves around implementing high-performance flow solvers in Python, which is a modern and very high-level programming language. The project is supported through several grants from King Abdullahs University of Science and Technology, granting access to some of the world's largest supercomputers. The work has been presented at several conferences and as invited talks

The spectralDNS project on github contains several repositories, each representing a smaller part of the overall project. The most important are presented beolw.


The https://github.com/spectralDNS/spectralDNS repository is home to several different pseudo-spectral Navier-Stokes and MagnetoHydroDynamics solvers. Most solvers are for triply periodic domains. The simplest possible Navier-Stokes solver is described by Mortensen and Langtangen [1], who show that a highly efficient solver can be created using no more than 100 lines of code, using nothing more than standard tools like Numpy and MPI for Python. The DNS solver has been tested for a transitional Taylor-Green vortex using a computational box of size \( 2048^3 \). Accuracy is, well spectral, and in benchmark tests on the Shaheen II supercomputer at KAUST it has been found to scale well up to 64,000 cores. A state-of-the-art spectral channel flow solver that is making extensive use of shenfun, has been described by Mortensen [2]. Turbulent flow at \( Re_{\tau}=2000 \) is shown in the movie below.


With the shenfun Python module [3] an effort is made towards automating the implementation of the spectral Galerkin method for simple tensor product domains, consisting of non-periodic and periodic directions. The user interface to shenfun is intentionally made very similar to FEniCS. Partial Differential Equations are represented through weak variational forms and solved using efficient direct solvers where available. MPI decomposition is achieved through the mpi4py-fft module, and all developed solver may, with no additional effort, be run on supercomputers using thousands of processors.

An introduction to shenfun is given in [3], on readthedocs and the recent paper [4]. Introduction to mpi4py-fft is given here and in [5] [6].


  1. M. Mortensen and H. P. Langtangen. High Performance Python for Direct Numerical Simulations of Turbulent Flows, Computer Physics Communications, 203, pp. 53-65, doi: 10.1016/j.cpc.2016.02.005, 2016, http://www.sciencedirect.com/science/article/pii/S0010465516300200.
  2. M. Mortensen. A Spectral-Galerkin Turbulent Channel Flow Solver for Large-Scale Simulations, arXiv preprint, 2017, http://arxiv.org/abs/1701.03787.
  3. M. Mortensen. Shenfun - Automating the Spectral Galerkin Method, In Bjørn Helge Skallerud and Helge Ingolf Andersson (ed.), MekIT’17 - Ninth national conference on Computational Mechanics. International Center for Numerical Methods in Engineering (CIMNE), 2017, http://arxiv.org/abs/1708.03188.
  4. M. Mortensen. Shenfun: High Performance Spectral Galerkin Computing Platform, Journal of Open Source Software, 3(31), pp. 1071, doi: 10.21105/joss.01071, 2018.
  5. M. Mortensen, L. Dalcin and D. Keyes. Mpi4py-Fft: Parallel Fast Fourier Transforms With MPI for Python, Journal of Open Source Software, 4(36), pp. 1340, doi: 10.21105/joss.01340, 2019.
  6. L. Dalcin, M. Mortensen and D. E. Keyes. Fast Parallel Multidimensional FFT Using Advanced MPI, Journal of Parallel and Distributed Computing, doi: 10.1016/j.jpdc.2019.02.006, 2019.