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

motionSolverLibs    (rigidBodyMeshMotion);

dynamicFvMesh       dynamicOversetFvMesh;

motionSolver        rigidBodyMotion;

report          on;

solver
{
    type Newmark;
    //gamma   0.1;    // Velocity integration coefficient
    //beta    0.1;    // Position integration coefficient
}

accelerationRelaxation 0.4;

// prescribedRotation requires some sub-iterations to converge faster
// to desired value of omega.
nIter   3;

bodies
{
    hull
    {
        type            rigidBody;
        parent          root;

        // To get Tensor of Inertia (symmetrical) use surfaceInertia
        // here hull is empty shell

        mass            0.552;
        inertia            (0.0033 0 0 0.01 0 0.0095);
        centreOfMass    (0.2857 -0.07 0); // relative to the centreOfMass
                                        // of parent body
                                        // (here root = global coord system)

        // Transformation tensor and centre of rotation (CoR)
        transform       (1 0 0 0 1 0 0 0 1) (0.2857 -0.07 0);

        joint
        {
        // These constrains are applied only to body hull,
        // other bodies need to have their own set
        // Constraints used for faster run

            type            composite;
            joints
            (
                {
                    type Px;  // Allow translation in X -
                }
                {
                    type Ry;  // Allow rotation along Y axis
                                // (local - body CS)
                }
            );
        }

        patches         (hullWall);
        innerDistance   100;    // With overset we want to avoid the mesh
                                // deformation so have large innerDistance
        outerDistance   200;
    }

    propeller
    {

        type            rigidBody;
        parent          hull;

        centreOfMass    (-0.2847 0.03 0);    // Relative to parent CoM
        mass            0.0288;
        inertia         (7.6e-6 0 0 4.2e-6 0 4.2e-6);
        // transform and CoR - relative to parent CoR
        transform       (1 0 0 0 1 0 0 0 1) (-0.2757 0.03 0);
        patches        (propellerWall);
        innerDistance   100;
        outerDistance   200;
        joint
        {
            type            Rx;
        }
    }

    rudder
    {
        type            rigidBody;
        parent          hull;
        centreOfMass    (-0.3602 -0.0055 0);
        mass            0.0746;
        inertia         (3.3e-5 0 0 4.7e-6 0 3.4e-5);
        // transform and CoR - relative to parent CoR
        transform       (1 0 0 0 1 0 0 0 1) (-0.3487 -0.04 0);
        patches        (rudderWall);
        innerDistance   100;
        outerDistance   200;
        joint
        {
            type            Ry;
        }
    }
}

restraints
{
    rudderRotation
    {
        type                    prescribedRotation;
        body                    rudder;
        referenceOrientation    (1 0 0 0 1 0 0 0 1);
        axis                    (0 1 0);    // Axis of rotation
        omega                   sine;       // Function1 entry
        omegaCoeffs
        {
            frequency   4;
            amplitude   0.2;
            scale       (0 1 0);
            level       (0 1 0);
        }
    }
    propellerRotation
    {
        type                    prescribedRotation;
        body                    propeller;
        referenceOrientation    (1 0 0 0 1 0 0 0 1);
        axis                    (1 0 0);
        omega                   table
        (
            (0 (0 0 0))
            (1 (16 0 0))
        );
    }
}


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