Highlights of the new preCICE release v3.3

Summary: With preCICE v3.3.0, we focused on improving clarity, portability, and tooling. The new release brings clearer coupling-state output and more helpful error messages. Tooling has been reworked significantly and is now bundled in the new preCICE CLI. Platform support—especially for Windows via MSYS2—has been expanded. Read on for the highlights.

DOI: 10.5281/zenodo.17306727
Cite Cite


Clearer coupling state and error messages

Understanding the coupling progress is now easier than ever.
The new output gives a concise, explicit overview of time windows, iterations, and partner states.

Explicit coupling

time-window 1 (max: 2), t 0 (max: 3), Dt 1, max-dt 1
time-window 2 (max: 2), t 1 (max: 3), Dt 1, max-dt 1
Reached end at: final time-window: 2, final time: 2

Implicit coupling

it 1 (min: 2, max: 2), time-window 1 (max: 2), t 0 (max: 3), Dt 1, max-dt 1
it 2 (min: 2, max: 2), time-window 1 (max: 2), t 0 (max: 3), Dt 1, max-dt 1
it 1 (min: 2, max: 2), time-window 2 (max: 2), t 1 (max: 3), Dt 1, max-dt 1
it 2 (min: 2, max: 2), time-window 2 (max: 2), t 1 (max: 3), Dt 1, max-dt 1
Reached end at: final time-window: 2, final time: 2

Compositional coupling

partner: M1, time-window 2 (max: 2), t 1, Dt 1, max-dt 1; partner: M2, ...

We also improved error reporting when required data or checkpoints are missing.
Instead of a generic “actions not fulfilled” message, you now get clear, actionable hints:

The iteration checkpoint wasn't read.
Did you forget to call "requiresReadingCheckpoint()"?

Running without MPI

If you run into building problems due to conflicting MPI implementations, it is sometimes necessary to build preCICE without MPI:

cmake -DPRECICE_FEATURE_MPI_COMMUNICATION=OFF .

If you then define participants as usual:

<participant name="Solid">
...
</participant>

Then running this participant in parallel, now uses sockets on the loopback interface for it’s intra-communicator by default.
Additionally, once you define an <intra-comm:sockets/> to customize the setting and run the partiticpant in serial, then preCICE ignores this intra-comm instead of emitting an error message.


Tooling rework

This release streamlines and bundles all our command-line tools. You now only need one tool: the preCICE CLI.

Install directly from PyPi:

pip install precice-cli

Then, you can format your configuration:

precice-cli config format precice-config.xml

Or visualize it:

precice-cli config visualize precice-config.xml -o graph.pdf

Or simply display the versions of all installed components:

precice-cli version

Many more things are possible. Learn about them in this presentation from the preCICE Workshop 2025:

Note that some of the old tools are now deprecated and will be removed with v4.0 eventually.


Updated profiling system

We observed that our profiling system can reach its limits if many events per time step, such as many read_data calls, are tracked and processed. First remedy was to avoid such events by default:

<profiling mode="off|fundamental|api|all" />

… still defaults to fundamental, but the non-steering API calls (such as read_data) were moved to the new dedicated api mode.

Second remedy was to make everything more space-efficient. Each rank now produces a plain TXT file (with optional LZMA compression). Then, precice-profiling merge creates a SQLite3 database for post-processing.

Docs on profiling via the new preCICE CLI


Improved platform support

Very neat for Windows users: We collaborated with the MSYS2 package maintainers to getting preCICE actively tested on Windows and fixed some compatibility issues. This works using Microsoft MPI v10.1.1 and Winsocks via Boost.ASIO. MSYS2 preCICE package

We, moreover, added compatibility with new versions of our dependencies libxml2 2.14.0+, Boost 1.89.0, and Eigen 5.0.0.

Note that for the latter, the build now requires a proper Eigen3Config.cmake file. A simple source checkout will not be detected anymore. You need to create a build directory and configure it using cmake to generate the required CMake conniguration files.
If CMake cannot find Eigen automatically, specify the location of its CMake configuration file manually using:

cmake -DEigen3_DIR=/path/to/eigen/share/eigen3/cmake ..

While not as feature-heavy as previous releases, preCICE v3.3 brings important quality-of-life improvements: more readable output, more efficient profiling, solid Windows support, and obviously a few important bugfixes (one concerns the QR3 filter, which became the default in v3.2).

5 Likes