This page gives an overview on available preCICE APIs and minimal reference implementations.
Updated 29 Apr 24

preCICE is written in C++. Thus, the native API language of preCICE is C++ as well. If you are new to the preCICE API, we recommended that you first follow the step-by-step guide.

Native API

The definite documentation of the C++ API is available on the preCICE API doxygen pages for the latest release, or see more options.

Language Location Installation
C++ precice/precice/tree/main/src/precice/Participant.hpp Automatically included


Besides the C++ API, there are also bindings to other languages available:

Language Location Installation
C precice/precice/tree/main/extras/bindings/c native bindings
Fortran precice/precice/tree/main/extras/bindings/fortran native bindings
Fortran Module precice/fortran-module make
Python precice/python-bindings pip3 install pyprecice
Matlab precice/matlab-bindings installation script
Julia precice/PreCICE.jl add PreCICE
Rust precice/rust-bindings cargo add precice

The community is also working on the following bindings:

Language Location Notes
Rust ajaust/rust-precice Experimental prototype / work in progress

Minimal reference implementations

For all languages, we provide minimal reference implementations, so called solver dummies. They can be a great source to copy from.

Language Location
C++ precice/precice/examples/solverdummies/cpp
C precice/precice/examples/solverdummies/c
Fortran precice/precice/examples/solverdummies/fortran
Fortran Module precice/fortran-module/examples/solverdummy
Python precice/python-bindings/examples/solverdummy
Matlab precice/matlab-bindings/solverdummy
Julia precice/PreCICE.jl/solverdummy
Rust precice/rust-bindings/examples/solverdummy

The community also maintains MPI-parallel versions of some of these solver dummies.

Architectural overview of bindings

All the language bindings are calling the C++ API of preCICE and some of them are interdependent. Here is an overview of what uses what:

Architectural overview of bindings