Back to top

DuMux - DUNE for Multi-{Phase, Component, Scale, Physics, …} flow and transport in porous media

An open-source simulator and research code in modern C++

Multi-phase multi-component (Darcy-scale)

Multi-phase multi-component (Darcy-scale)

DuMux features compositional and immiscible, isothermal and non-isothermal, equilibrium and non-equlibrium models for multi-phase multi-component flow and transport in porous media with preimplemented but easily extensible constitutive relations, fluid properties.

Advection-Diffusion-Reaction models

Advection-Diffusion-Reaction models

DuMux can be used to solve systems of Advection-Diffusion-Reaction equations in both porous and pure media. Reactive transport models including phase separation models such as the Cahn-Hilliard equations are also within the DuMux feature set.

Navier-Stokes and Stokes equations

Navier-Stokes and Stokes equations

DuMux can solve laminar and turbulent flow problems (DNS and RANS with various turbulence models). The free flow solver can be coupled to porous media or pore network models.

Richards equation (flow in the unsaturated zone)

Richards equation (flow in the unsaturated zone)

DuMux can solve Richards equation for flow in the unsaturated zone as well as extensions of Richards equation considering multiple components or adding vapor diffusion in the gas phase.

Solid and poro-mechanics models

Solid and poro-mechanics models

DuMux can be used to solve solid mechanics problems including linear elasticity, hyperelasticity, and poro-elasticity (Biot-like), also in combination with fluid flow models.

Shallow-water model (2D)

Shallow-water model (2D)

DuMux can solve the 2D shallow-water equations including different bottom-friction models, basic turbulence models, and surface drying/wetting on structured and unstructured grids. Typical applications include river modelling and surface runoff.

Pore-network models

Pore-network models

DuMux features single and multi-phase pore-network models. Its specialty is dynamic and implicit pore-network models. The local rules are easily customizable. A dual network model allows to couple fluid flow and solid skeleton network models (e.g. heat transfer, phase change).

Network and fracture models

Network and fracture models

DuMux can be used to solve systems with embedded transport networks such as capillary-tissue coupling, root-soil interaction, discrete fracture models.

Multi-domain simulations

Multi-domain simulations

DuMux can couple problems posed on different domains. The domains can touch or overlap, model different physics, have different dimensions, different grids, different discretization methods. The full system Jacobian is approximated by numeric differentiation.

FV/CVFE discretization methods

FV/CVFE discretization methods

DuMux offers a range of finite volume schemes (FV), such as the cell-centered Tpfa and Mpfa methods, or the vertex-centered Box method and other control-volume finite element schemes (CVFE).

C++ code based on Dune

C++ code based on Dune

DuMux is written in modern C++17 using generic programming techniques. This makes the code fast and flexible. DuMux is a DUNE (Distributed and Unified Numerics Environment) module.

Parallel computing / HPC

Parallel computing / HPC

DuMux supports parallel simulations using a distributed memory parallelism based on MPI and shared memory parallelism with several backends (OpenMP, TBB, Kokkos) out-of-the-box for many models.

VTK Output (Visualisation)

VTK Output (Visualisation)

DuMux supports output to VTK-based file formats that are readily visualised e.g. using the open-source software ParaView.

Tools for reproducible science

Tools for reproducible science

DuMux offers various scripts simplying the creation of self-contained modules, installation scripts, and Docker images to improve reproducibility (also see dumux-pub). We also support simulation meta data extraction.

Python bindings

Python bindings

DuMux has Python bindings. The current state is experimental and only a few features are accessible from Python (see tests). Reach out to us if you have a use case.