Fluid Structure Interaction: mooring lines

The video of a wave-energy converter in the Gallery page suggests that GPUSPH has the capability of modelling mooring lines for floating objects. The guides are somewhat short on modelling FSI, as far as I could see.
Is this feature generally available with the current distribution of GPUSPH? Is this planned for a specific future release?
Thanks for dealing with this


currently the integration of GPUSPH with Chrono is limited to rigid bodies, and does not support more sophisticated forms of fluid/structure interaction (in particular, no deformations).

To model the mooring lines, the Gallery example (that was designed for an even older GPUSPH version that still used ODE instead of Chrono) actually computed the mooring forces semi-analytically (from the tension derived from the position of the frame attachment point).

I’ll contact the author and see if they allow the inclusion of the Problem (or a simplified version of it) among the examples, since it does illustrate some of the more advanced features of GPUSPH.

The mooring lines in the Gallery example were modelled using a semi-analytical mooring tension computation.

Can this mooring feature be used for solving towing problems as well?

@giuseppe.bilotta Thanks for the reply. I then understand that the mooring lines are modelled as point forces applied to the floating bodies in response to their displacements. This can still be pretty useful.

If this understanding is correct, are there any handles in the source code (empty variables, data structures, etc) in order to customize such mooring forces at the user’s own discretion? Or did the adaptations for the wave-converter simulation remained an isolated edit and not make it to the subsequent releases?


@sph_tudelft_nl yes, the mooring lines were modelled as point forces applied to the floating body. To achieve this, you can override bodies_forces_callback, a Problem method that allows you to modify the forces and torques applied to moving bodies before they are used for integration. With the current API, the hardest part in this is that you have to track the position in global space of the anchor point on the body yourself, using the moving body kinematic data (rotation and displacement). If there’s a growing interest for this kind of applications, we may also consider improving the API to make this information more accessible.

@James I’m guessing the same approach could be used for towing as well, by moving the “ground” anchor point during the simulation. The involved callback has all information about the current time and integration step, so I see no apparent issue.

Thanks for this addition. At this stage I am not in the condition to provide anything like a business case to motivate the tracking of a body’s (generalized) coordinates and velocities. However, this is certainly useful for a variety of applications involving floating objects; these relate to harbour and ocean engineering. Think of vessels, reservoirs and platforms subject to wave motion captured by SPH simulations.

@giuseppe.bilotta As @sph_tudelft_nl has pointed out, there is a VERY large interest in this for coastal and ocean engineers (which I suspect is a large user group of GPUSPH). In fact, it would be a great marketing feature of GPUSPH!! Unless the submerged/floating body is drifting with the waves/current, it must be attached to something. An improvement in the API to attach non-rigid bodies (cables, chains, rope, etc) would be VERY helpful.

I know you said, “If there’s a growing interest for this kind of applications”, which there deceivingly appears to be little in this discussion, but can you elaborate on how to overcome this challenge:

I did see over on a Chrono post that cables are supported ( http://api.projectchrono.org/tutorial_demo__f_e_a_cables.html ). But after reading:

it sounds like it’s GPUSPH (stable release) that is lacking in support?

Having said that, I see in the GPUSPH list of references a paper “Modeling of wave energy converters by GPUSPH and Project Chrono” ( https://www.sciencedirect.com/science/article/pii/S0029801818317608?via%3Dihub ), in which it sounds like they have overcome the challenges? Is there a development version of GPUSPH which includes these features?

EDIT: I now see that the gallery image is captioned with “Coastal Studies Institute” and in the abstract of the paper, I see them reference the “CSI-device”, which I believe brings me full circle in this discussion. Nevertheless, I would like to see further support for mooring applications.

1 Like

@GWAVE as I mentioned, for the CSI problem the mooring was solved semi-analytically, not using Chrono features. I have it on my TODO list to make the CSI problem public (updated to the latest APIs) as an example of how these things can be achieved.

@giuseppe.bilotta looking forward to the added mooring features!

In the mean time, can you tell me if there exists an easy way to anchor a rigid floating body? It seems like the tools might be available already, I’m just not fully aware of them. Imagine the “flap wavemaker” as a floating rigid body, where the anchor point would be the pivot at the seafloor. The main difference would be, I’m not forcing the “flap wavemaker”, instead it moves due to the surrounding flow field as a simple floating rigid body. I know the “flap wavemaker” and “floating bodies” exists, I’m just not sure how to create the anchor point. Any advice?

Hello @GWAVE, for rigid body motion GPUSPH relies on the Chrono Project integration. The Problem class provides a (virtual) initializeObjectJoints() member function that you can override in your problem file to set up the necessary constraints on your defined objects. This is usually made using the Chrono API for links. The Objects test case that ships with GPUSPH can probably be used as a starting point to see how this is done.

Does anyone have an example case code for the application of mooring lines to share?