/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1912                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dynamicFvMesh   dynamicOversetFvMesh;

solvers
{
     VF
     {
        motionSolverLibs (fvMotionSolvers);

        motionSolver            solidBody;
        solidBodyMotionFunction drivenLinearMotion;

        cellSet                 c0;
        CofGvelocity            CofG;
        normal                  (0 0 1);
    }

    cube
    {
        motionSolverLibs   (sixDoFRigidBodyMotion);
        motionSolver        sixDoFRigidBodyMotion;

        cellSet         c1;

        patches         (floatingObject);
        innerDistance   1000.0;
        outerDistance   1001.0;

        centreOfMass    (0.5 0.5 0.4);
        CofGvelocity    CofG;

        // Cuboid dimensions
        Lx              0.24;
        Ly              0.24;
        Lz              0.4;

        // Density of the solid
        rhoSolid        500;

        // Cuboid mass
        mass            #eval{ $rhoSolid*$Lx*$Ly*$Lz };

        // Cuboid moment of inertia about the centre of mass
        momentOfInertia #codeStream
        {
            codeInclude
            #{
                #include "diagTensor.H"
            #};

            code
            #{
                scalar sqrLx = sqr($Lx);
                scalar sqrLy = sqr($Ly);
                scalar sqrLz = sqr($Lz);
                os  <<
                    $mass
                *diagTensor(sqrLy + sqrLz, sqrLx + sqrLz, sqrLx + sqrLy)/12.0;
            #};
        };

        report          on;
        accelerationRelaxation 0.6;
        accelerationDamping    1;

        solver
        {
            type Newmark;
        }

        constraints
        {

            fixedAxis
            {
                sixDoFRigidBodyMotionConstraint plane;
                normal (0 0 1);
            }
        }

        restraints
        {

            linearSpring
            {
                sixDoFRigidBodyMotionRestraint linearSpring;
                anchor            (0 0.5 0.4);
                refAttachmentPt   (0.5 0.5 0.4);
                stiffness         100;
                damping           0;
                restLength        0;
            }

        }
    }
}

// ************************************************************************* //
