This guide helps you to upgrade from preCICE 1.x to preCICE 2.x.

We use semantic versioning for preCICE, which means that you can extract useful information from the version number. If the first digit (major version) does not change, this means that you don’t need to update your adapter or (usually) your preCICE configuration file. However, when the major version number increases, this means that you need to update your code as well (we plan for a major version change once every 2-3 years). We recommend using the latest stable versions of preCICE and the corresponding bindings and adapters.

preCICE API

Single-step setup

This is described in detail in #614 and was done to simplify the setup. Change:

-  SolverInterface interface(solverName, commRank, commSize);
-  interface.configure(configFileName);
+  SolverInterface interface(solverName, configFileName, commRank, commSize);

Typical error message that should lead you here:

error: no matching function for call to ‘precice::SolverInterface::SolverInterface(std::__cxx11::string&, int, Foam::label)’
         precice_ = new precice::SolverInterface(participantName_, Pstream::myProcNo(), Pstream::nProcs());

and

note: candidate: precice::SolverInterface::SolverInterface(const string&, const string&, int, int)
   SolverInterface(
   ^
.../SolverInterface.hpp:52:3: note:   candidate expects 4 arguments, 3 provided

Sorted out duplicate meaning of timestep

  • Renamed API function isTimestepComplete to isTimeWindowComplete (#619)

Clarified fulfilledAction

  • fulfilledAction was renamed to markActionFulfilled (#631)

Language bindings

C

  • Moved to extras/bindings/c.
  • Separated into include (header) and src (implementation).
  • Renamed precicec_isCouplingTimestepComplete to precicec_isTimeWindowComplete.

Fortran

  • Moved the intrinsic Fortran bindings to extras/bindings/fortran.
  • Renamed the “Fortran 2003 bindings” to “Fortran module” and Precice_solver_if_module to precice. Moved them to precice/fortran-module.

Python

preCICE configuration file

  • Renamed mapping:petrbf to mapping:rbf (see #572).
  • Remove master:mpi-single tags.
    preCICE defaults to master:mpi-single for parallel participants (see #572).
  • Remove distribution-type="..." from m2n tags.
    It now defaults to point-to-point, use the attribute enforce-gather-scatter=1 if this is not desired (see #572).
  • Renamed coupling-scheme configuration option timestep-length to time-window-size
  • Renamed coupling-scheme configuration option max-timesteps to max-time-windows
  • Renamed post-processing to acceleration
  • Renamed acceleration configuration option timesteps-reused to time-windows-reused
  • Renamed acceleration configuration option reused-timesteps-at-restart to reused-time-windows-at-restart
  • Renamed export configuration option timestep-interval to every-n-time-windows
  • Renamed action configuration option on-timestep-complete-post to on-time-window-complete-post

Building

  • Renamed CMake variables (#609)
    • MPI to PRECICE_MPICommunication
    • PETSC to PRECICE_PETScMapping
    • PYTHON to PRECICE_PythonActions
  • CMake CMAKE_BUILD_TYPE is automatically set to Debug, if empty
  • CMake variables for enabling C and Fortran
  • Removed SCons completely. You can do everything and much more with CMake.

Side-changes

All the tutorials are adapted for preCICE v2. You can still find a version compatible with preCICE v1.6.1 here.

Most of the adapters (all apart from the “under initial development” ones) are only supporting the latest version of preCICE. Make sure also that you are using the correct branch: an adapter’s develop is supposed to work with preCICE develop, and similar for master.

At the same time as preCICE v2, we also changed the configuration format of the OpenFOAM adapter: Instead of a yaml file, it is now an OpenFOAM dictionary, making installation even easier. Please refer to the Configuration page for more details.