Skip to content

Getting started

This section is for users who know C++ and numerical methods, but are new to DUNE. It is also written for users coming from frameworks like FEniCS, deal.II, Firedrake, or MFEM.

What you need to understand first

DUNE is not one monolithic package. It is a collection of modules. For core C++ workflows, the key modules are:

  • dune-common
  • dune-geometry
  • dune-grid
  • dune-istl
  • dune-localfunctions

Most source-based workflows are built around:

  • dunecontrol for configuring/building module sets,
  • dune.module metadata for dependency resolution,
  • CMake targets (for example Dune::Grid) in your own module or project.

Installation paths

There are three common ways to start:

  1. Distribution packages (fastest for trying DUNE).
  2. Build from source (most flexible for development and extensions).
  3. Python-focused installation (if your main workflow is Python bindings).

For this tutorial, we use a source-based setup so examples stay reproducible and editable.

Tutorial-specific convenience

Use the repository script:

./setup-env.sh
source _env/activate.sh

This prepares a local _env/ with core modules, opts files, and activation helpers. It is convenient for this tutorial, but the concepts transfer directly to a general DUNE setup.

  1. Installation for concise setup guidance and official references.
  2. First program and example build layout for building and running your first standalone DUNE examples.

Summary and next steps

You now have the overview of how to start with DUNE in this tutorial. Continue with Installation to create a working environment.