A Scipy-Fenics interface for incompressible Navier-Stokes

pip install dolfin-navier-scipy==1.4.2



DOI PyPI version Documentation Status

This python module dns provides an interface between the FEM toolbox FEniCS and SciPy in view of simulation and control of incompressible flows. Basically, FEniCS is used to discretize the incompressible Navier-Stokes equations in space. Then dns makes the discretized operators available in SciPy for use in model reduction, simulation, or control and optimization.

dns also contains a solver for the steady state and time dependent problems.

Quick Start

To get started, create the needed subdirectories and run one of the tests/ files, e.g.

pip install sadptprj_riclyap_adi
cd tests
mkdir data
mkdir results
# export PYTHONPATH="$PYTHONPATH:path/to/repo/"  # add the repo to the path
# pip install dolfin_navier_scipy                # or install the module using pip

Then, to examine the results, launch

paraview results/vel_TH__timestep.pvd

Test Cases and Examples

A selection:

  • tests/ a minimal setup for a steady-state simulation
  • tests/ the 2D steady-state cylinder wake benchmark by Schäfer/Turek
  • tests/ the 2D cylinder wake with a freely rotating cylinder as benchmarked in Richter et al.
  • tests/ time integration with Picard and Newton linearization
  • tests/ time integration with explicit treatment of the nonlinearity
  • tests/ time integration of the cylinder wake with boundary controls
  • tests/ time integration with iterative solves of the state equations via krypy
  • tests/ rotating double cylinder via Robin boundary conditions


The latter is my home-brew module that includes the submodule lin_alg_utils with routines for solving the saddle point problem as it arises in the (v,p) formulation of the NSE.

Note: the branch lau-included already contains the module sadptprj_riclyap_adi


Documentation of the code goes here.

Installation as Module

pip install dolfin_navier_scipy



  • catch the case that the datapoints do not extend to the full time range
  • enforce explicit specification of the FEM scheme in problem_setups.gen_bccont_fems