Installation#

DOLFINx can be installed using various packages managers, run using containers, or built manually from source.

Binaries#

See the README.md for recommendations and instructions.

Source#

Installation of DOLFINx requires installation of the C++ core. Most users will also want the Python interface.

Dependencies#

C++#

Required

  • C++ compiler (supporting the C++20 standard)

  • Basix (C++ interface)

  • Boost

  • CMake [build dependency]

  • HDF5 (with MPI support enabled)

  • MPI (MPI-3 or later)

  • pkg-config [build dependency via CMake]

  • pugixml

  • spdlog

  • UFCx [ufcx.h, provided by FFCx Python package or FFCx UFCx CMake install at ffcx/cmake/*]

  • At least one of ParMETIS [2], KaHIP or PT-SCOTCH [2]

From ParMETIS, KaHIP or PT-SCOTCH, ParMETIS is recommended.

Optional

  • ADIOS2 (additional parallel IO support)

  • PETSc [1] (linear and non-linear problems)

  • SLEPc (eigenvalue problems)

  • SuperLU_DIST [2] (linear problems with dolfinx::la::MatrixCSR).

Optional for demos

  • FFCx

PETSc and FFCx are optional but recommended.

Python interface#

Requirements for the Python interface. Please see python/pyproject.toml for precise specification. Below we use the pypi package names.

Build system requirements

Required runtime dependencies

Optional runtime dependencies

  • petsc4py (linear and non-linear problems, recommended)

  • numba (custom kernels and assemblers)

  • pyamg + scipy (serial linear problems)

Optional for demos

  • gmsh

  • networkx

  • numba

  • matplotlib

  • petsc4py

  • pyamg

  • pyvista

  • scipy

  • slepc4py

Building and installing#

C++#

The C++ library is built using CMake. Create a build directory in cpp/, e.g. mkdir -p build/ and in the build run directory:

cmake ../
make install

To set the installation prefix:

cmake -DCMAKE_INSTALL_PREFIX=<my-install-path> ../
make install

Python#

After installation of the C++ interface, from the python/ directory the Python interface can be installed using:

python -m scikit_build_core.build requires | python -c "import sys, json; print(' '.join(json.load(sys.stdin)))" | xargs pip install
pip install --check-build-dependencies --no-build-isolation .

Footnotes