FSI coupling between OpenFOAM and MBDyn of a cycloidal rotor

In this project a FSI coupling was established together with @louisgag to investigate the influence of rotor blade deformation of cycloidal rotors and its effect on the rotor efficiency.
The preCICE OpenFOAM adapter uses the pointDisplacement function of OpenFOAM to couple motion data. However, simulating rotating bodies of a cyclorotor is not yet possible with this approach in OpenFOAM. Therefore an additional OpenFOAM class was added to couple the rotation motion directly from the MBDyn adapter to OpenFOAM.

The work was part of a Bachelor Thesis conducted at the Institute of Aerodynamics and Gas Dynamics Stuttgart, Germany (link).

A dataset of the simulation results including the base case setup can be found here:
Schließus, Julian and Gagnon, Louis, Data for: Create a Fluid-Structure Simulation Framework for Cycloidal Rotors, DaRUS, 2022, https://doi.org/10.18419/darus-2232

The results have also been presented at the HPC-Asia 2022 MMCP workshop (abstract, video).

The following software / adapters were used:

  • preCICE OpenFOAM adapter
  • adjusted preCICE MBDyn Adapter, developed by Hagen Leipprand at the Institute of Aerodynamics and Gas Dynamics Stuttgart, Germany
  • Python 3.7.6 to process the data between MBDyn and preCICE
  • C++ to couple the rotation motion of the rotor via a socket connection from the MBDyn adapter to OpenFOAM
  • preCICE v2.2.0
  • OpenFOAM v2012 as fluid solver
  • MBDyn as structure solver (utilized branch)

@JulianSchl since others often ask how to do FSI of rotating bodies, could you please give a summary of your research on which approaches/situations are currently working with the (unmodified) OpenFOAM-preCICE adapter? For example, does an overset grid approach (where the body is immersed into the inner, rotating grid) work? From your HPC Asia abstract, I understand that you followed this approach.

sorry for my late reply :slight_smile:

First of all I have to point out that it is not possible to couple the (rotaitional) movement of a body with preCICE, so you can only couple the parameters suggested here (e.g. deformations, forces, …).
You either have to set a motion via the OpenFOAM configuration files or couple the motion via a custom link between you solvers. In my case I used a TCP socket connection to couple the motion data betwenn my structure and CFD simulation.

Having in mind that you have to deal with the motion as mentioned, with preCICE v2.2.0 it is possible to rotate one single body using the solidBodyMotion while coupling deformations with the displacementLaplacian solver via preCICE.

However it is not possible to move multiple bodies with the OpenFOAM v2012 solidBodyMotion while simultaniously deforming the bodies with the displacementLaplacian solver. The problem is that for such cases OpenFOAM provides the multiSolidBodyMotionSolver, which is not supported by preCICE (yet :wink:).

To handle this issue, @louisgag created a coustomized version of the solidBody motion solver, the solidBodyDisplacementLaplacianMultiZone solver.
With this adjustment OpenFOAM can handle the motion of multiple moving zones while using the displacementLaplacian solver.

So I’m not sure if I understand your explanation of “overset grid” correctly, but the simulation of a single moving/rotating body over a background grid (chimera method) works fine with preCICE. If you want to move the background mesh additionally to a body, you may look at my github case where I implemented this with the solidBodyDisplacementLaplacianMultiZone solver.


Hi Julian,
I’m trying to use overset mesh in OpenFOAM to study the possible large deformations of marine structures under wave loads. However, I don’t know how to set correct boundary conditions for the overset patch and the fluid-solid interface. Could you please share your case setting in OpenFOAM?

Hi Stan,

you can find an example case including its case settings here: https://darus.uni-stuttgart.de/file.xhtml?persistentId=doi:10.18419/darus-2232/8&version=2.0


Thank you for sharing your case setting! it will be of great help to me :smile:

Hi Stan,

When you say simulate the possible large deformations of marine structures using overset mesh, do you mean that you the overset mesh can deform to accommodate the deformation of the structures, while the background mesh doesn’t change? If so, can I please ask you which improvement did you made to the overset library in OpenFOAM, is it the library provided by @JulianSchl @luisgag? And then couple the external solver for the solid part?

Sorry for asking so many questions, since I’m struggling with similar problems.

​Hi Sunky,
Sorry for the late reply.
Yes, we want the overset mesh to deform according to the deformation of the structure while the background mesh doesn’t change. If you have only one structure, you don’t have to modify the overset library in OF. Otherwise, you need to try the library provided by @JulianSchl.​ In our test cases using OF and our solid solver, we found that preCICE worked well for single phase simulation when adopting overset mesh, while for multiphase simulation using overset mesh, the phase fraction often went wrong and then crashed. By the way, we are not focusing on this problem currently​, so I’m sorry that I cannot provide more advice to you.​…

Hi Stan,

Thanks for your reply! It’s very helpful. However, I can’t download the case file from the link shared by @JulianSchl. And for this modified library, is it possible for you to share your case setting up at OpenFOAM part? For the case you mentioned.

Thank you for your help!

Hi Sunky,
I found the case file which I downloaded before. Could you please provide an e-mail address? As the tar.gz package cannot be uploaded here.

Hi Stan,

Thanks a lot, just sent you a message. :grinning:

Hello Julian,

I am trying to generate waves in a numerical wave tank and see the response of a floating structure. I have found out that using a dynamic boundary (essentially a flap) is the best way to go for generating those waves, so deforming of the background mesh is required. For the motion of the overset mesh around the body though i should use a solver like sixDoFRigidBodyMotion or rigidBodyMotion, where the movement is not predefined as in solidBody.

So my questions are :
(1)Does openFOAM support overset meshes with mesh motion for the background mesh?
(2)Do you know if there has been any such implementation in the community?
(3)If the implementation doesn’t exist how difficult would it be to implement it myself?

Any answer/advice would be greatly appreciated, thank you in advance!