How can preCICE interpolate between different timestep sizes?

Marta asked on the mailing list (March 28, 2019)

I’m using preCICE to couple two codes: the lattice Boltzmann code LUMIS and OpenFOAM. LUMIS has a time step 10 times smaller than OpenFOAM so during the coupling LUMIS subcycles before exchanging data with OpenFOAM.
The preCICE website shows that preCICE allows time interpolation. What is exactly the time interpolation? Is it activated automatically when subcycling?

Benjamin R answered:

Currently, the time interpolation feature is restricted to plain subcycling.

In your scenario this means that LUMIS performs 10 steps while OpenFOAM does one single step. While OpenFOAM performs the large timestep it only “sees” a constant value of the quantity that you exchange for coupling. Even though, there actually exist 10 substeps (that might be useful for OpenFOAM, if a higher order timestepping scheme is used, for example). Currently, OpenFOAM just ignores the 9 timesteps that are provided by LUMIS. If you look at the other side of your coupled simulation, LUMIS uses the single sample provided by OpenFOAM for all 10 substeps and it does not observe any change on the OpenFOAM-side while performing the 10 timesteps.

Our future goal for the time interpolation feature is to provide the following:

  • interpolated values for the 10 substeps that are performed by LUMIS. The interpolation is created using the data provided by OpenFOAM.
  • an interpolant created from the 10 samples provided by LUMIS. This interpolant may be used by OpenFOAM, if needed.

However, in this form the feature does not yet exist and it will probably take some time until we can provide it in its final shape.

… and I added:

Probably interesting to add: This is the PhD project of Benjamin Rüth. So, we are aware that this is very important for many applications and are devoting a lot of time into this.
Some preliminary numerical results outside of preCICE

See also this issue: https://github.com/precice/precice/issues/133