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

dynamicFvMesh   dynamicMotionSolverFvMesh;

motionSolverLibs (sixDoFRigidBodyMotion);

motionSolver    sixDoFRigidBodyMotion;

// Not necessarily useful here, but can have different motion updates types
updateControl   timeStep;
updateInterval  1;


patches         (wing);
innerDistance   0.3;
outerDistance   1;

mass            22.9;
centreOfMass    (0.25 0.007 0.125);
centreOfRotation (0.25 0.007 0.125);
momentOfInertia (1.958864357 3.920839234 40.6452);
orientation
(
    0.9953705935 0.09611129781 0
    -0.09611129781 0.9953705935 0
    0 0 1
);
velocity        (0 0 0);
acceleration    (0 0 0);
angularMomentum (0 0 54.948246);
g               (0 0 0);
rho             rhoInf;
rhoInf          1e-10;//1.225;
report          on;

solver
{
    //type symplectic; //2nd order explicit
    type     Newmark; //2nd order implicit with outer correction
    gamma    0.5; //Velocity integration coefficient
    beta     0.25; //Position integration coefficient

}

constraints
{
    zAxis
    {
        sixDoFRigidBodyMotionConstraint axis;
        axis                (0 0 1);
    }
    
    pointConstrating
    {
        sixDoFRigidBodyMotionConstraint   point;
        centreOfRotation                              (0.25 0.007 0.125);
    };
}

restraints
{
    
    rotSpring
    {
        sixDoFRigidBodyMotionRestraint nonLinearAxialAngularSpring;

        axis            (0 0 1);
        modelType       stiffnessList;

        stiffnessList
        {
            interpolationType linear;
            outOfBounds       EXTRAPOLATE;

            values
            (
                ( 0.0    0.0 )
                ( 1.0    8000.0 )
            );
        }

        dampingModelType         dampingList;
        listType          angularVelocity;

        dampingList
        {
            interpolationType linear;
            outOfBounds       EXTRAPOLATE;

            values
            (
                ( 0.0    0.0 )
                ( 1.0    20.0 )
            );
        }
        
        referenceOrientation $orientation;
    }
}


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