Close

# OpenFOAM 2.3.0: Mesh Motion

## Mesh Morphing

In previous versions, rigid body motion simulations use one of the generic motion solvers, e.g. `displacementSBRStress` that solves an elliptic equation for the displacement. These motion solvers suffer from a tendency of cells to shear, and despite various attempts to stiffen cells against shearing particularly near rotating boundaries, mesh quality can often degrade under fairly modest rotations.

In this version the rigid body motion framework uses a specialised motion solver, which uses an interpolation of displacement and rotation based on the distance to the object to move. The interpolation method is spherical linear interpolation, or Slerp , which enforces smoothness and the distance function has a cosine profile to preserve shape of cells close to the moving surface.

## Solid Body Motion

OpenFOAM supports mesh morphing six degree of freedom (6-DoF) body motion, e.g. to simulate a floating object prescribed by centre of mass, mass, moment of inertia, etc.. A 6-DoF solid body can be specified through a boundary condition on a patch prescribing the boundary of the solid body. This existing functionality is still supported in version 2.3.0, but `sixDoFRigidBodyMotion` can additionally be specified as a mesh morphing `solver` within the dynamicMeshDict file, e.g.

```dynamicFvMesh       dynamicMotionSolverFvMesh;
motionSolverLibs    ("libsixDoFRigidBodyMotion.so");
solver              sixDoFRigidBodyMotion;

sixDoFRigidBodyMotionCoeffs
{
patches         (hull);
innerDistance   0.3;   // Extent of the solid-body motion region around body
outerDistance   1;     // Extent of mesh-morphing region around body

centreOfMass    (2.929541 0 0.2);
mass            412.73;
momentOfInertia (40 921 921);
rhoInf          1;
report          on;
accelerationRelaxation 0.3;
value           uniform (0 0 0);

constraints
{
zAxis
{
sixDoFRigidBodyMotionConstraint line;
direction     (0 0 1);
}
yPlane
{
sixDoFRigidBodyMotionConstraint axis;
axis          (0 1 0);
}
}

restraints
{
translationDamper
{
sixDoFRigidBodyMotionRestraint linearDamper;
coeff         8596;
}
rotationDamper
{
sixDoFRigidBodyMotionRestraint sphericalAngularDamper;
coeff         11586;
}
}
}
```

This example uses the constraints and restraints system, which has been overhauled to use explicit correction of the motion rather than force adjustment, to obey constraints while avoiding high-frequency force fluctuations induced by the force correction. The naming and coefficient specification has been rationalised to improve control and usability.

#### Source code

• 6-DoF rigid body motion
`\$FOAM``_SRC/sixDoFRigidBodyMotion`

#### Examples

• wing motion
`\$FOAM``_TUTORIALS/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam`
• floating object
`\$FOAM``_TUTORIALS/multiphase/interDyMFoam/ras/floatingObject`
• DTC hull
`\$FOAM``_TUTORIALS/multiphase/interDyMFoam/ras/DTCHull`

17th February 2014