Hello @sph_tudelft_nl

first of all, sorry for the late reply, we’ve been kind of busy with the release of GPUSPH v5 first and the SPHERIC International Workshop next. Now on to the actual answer, starting with some terminology.

GPUSPH differentiates rigid bodies in three categories:

- moving bodies: these are rigid bodies that move; the motion may be prescribed by the user in an arbitrary manner (as it is typically done for pistons, paddles, gates, etc), or it can be derived by some other mean (e.g. via the integration with Chrono);
- compute-forces bodies: these are bodies for which we compute the total force (and torque) that the fluid exerts on the body; this can be used on its own just to compute e.g. the impact of a wave on a pilon even though the pilon itself is never moved;
- “floating” objects: these are moving bodies whose motion is computed (via Chrono, but again it could be any other means) from the forces (and torques) exerted by the fluid on it (so they are both compute-forces and moving).

To keep track of the motion of floating objects we use a local reference frame for the body, with origin in the center of mass of the body, and oriented according to the principal axes of inertia; the rotation of the local system wrt to the global reference system is tracked by the object’s Euler parameters.

Objects (regardless of their nature) are not “fully” discretized. Instead, their discretization follows the standard boundary model discretization (e.g. single-layer boundary for LJ or MK, multiple layers for DYN, etc). These boundary particles are only used to compute the forces (and torques) that the fluid exerts on the object. The resulting forces and torques are then passed to Chrono (after an optional modification that the test case can request, e.g. to model mooring); Chrono computes the object position update (including new center of mass velocity, angular velocity around the center of mass etc), and we reflect these changes on the body’s particles position and velocity during integration. Note that since the body particles are only used to track the boundary and for force feedback, their mass is not related to the actual mass distribution inside the body, but it’s a uniform mass computed from the (average) body density and the chosen particle spacing.

Non-uniform bodies are supported by allowing the user to override the default center of mass position and principal moments of inertia. Note that this does not affect the distribution or mass of the particles used to model the body in GPUSPH, since they are only used to enforce boundary conditions and track the force the fluid exerts on the object.

I hope this answers your questions, but feel free to ask for more details as needed.