diff --git a/src/dynamicFvMesh/Make/files b/src/dynamicFvMesh/Make/files index 31036fca6ee9cfd9c21c7885aa8cee71a7ab64f6..42105a9a60d3f17ca134598ab8c0264f7f22c2cc 100644 --- a/src/dynamicFvMesh/Make/files +++ b/src/dynamicFvMesh/Make/files @@ -14,6 +14,7 @@ $(solidBodyMotionFunctions)/SDA/SDA.C $(solidBodyMotionFunctions)/tabulated6DoFMotion/tabulated6DoFMotion.C $(solidBodyMotionFunctions)/linearMotion/linearMotion.C $(solidBodyMotionFunctions)/rotatingMotion/rotatingMotion.C +$(solidBodyMotionFunctions)/axisRotationMotion/axisRotationMotion.C $(solidBodyMotionFunctions)/multiMotion/multiMotion.C $(solidBodyMotionFunctions)/oscillatingLinearMotion/oscillatingLinearMotion.C $(solidBodyMotionFunctions)/oscillatingRotatingMotion/oscillatingRotatingMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C new file mode 100644 index 0000000000000000000000000000000000000000..456441026f4ffd25db01b776da4067dd8491a517 --- /dev/null +++ b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "axisRotationMotion.H" +#include "addToRunTimeSelectionTable.H" +#include "unitConversion.H" + +using namespace Foam::constant::mathematical; + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace solidBodyMotionFunctions +{ + defineTypeNameAndDebug(axisRotationMotion, 0); + addToRunTimeSelectionTable + ( + solidBodyMotionFunction, + axisRotationMotion, + dictionary + ); +} +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::solidBodyMotionFunctions::axisRotationMotion::axisRotationMotion +( + const dictionary& SBMFCoeffs, + const Time& runTime +) +: + solidBodyMotionFunction(SBMFCoeffs, runTime) +{ + read(SBMFCoeffs); +} + + +// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * // + +Foam::solidBodyMotionFunctions::axisRotationMotion::~axisRotationMotion() +{} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::septernion +Foam::solidBodyMotionFunctions::axisRotationMotion::transformation() const +{ + scalar t = time_.value(); + + // Motion around a centre of gravity + + // Rotation around centre of gravity (in radians) + vector omega + ( + t*degToRad(radialVelocity_.x()), + t*degToRad(radialVelocity_.y()), + t*degToRad(radialVelocity_.z()) + ); + + scalar magOmega = mag(omega); + + scalar cosHalfTheta = cos(0.5*magOmega); + + quaternion R(cosHalfTheta, omega/magOmega); + septernion TR(septernion(CofG_)*R*septernion(-CofG_)); + + Info<< "solidBodyMotionFunctions::axisRotationMotion::transformation(): " + << "Time = " << t << " transformation: " << TR << endl; + + return TR; +} + + +bool Foam::solidBodyMotionFunctions::axisRotationMotion::read +( + const dictionary& SBMFCoeffs +) +{ + solidBodyMotionFunction::read(SBMFCoeffs); + + SBMFCoeffs_.lookup("CofG") >> CofG_; + SBMFCoeffs_.lookup("radialVelocity") >> radialVelocity_; + + return true; +} + +// ************************************************************************* // diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H new file mode 100644 index 0000000000000000000000000000000000000000..d372d824804dd638797e804fded808c326beef9e --- /dev/null +++ b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H @@ -0,0 +1,115 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::solidBodyMotionFunctions::axisRotationMotion + +Description + Constant velocity rotation around CoG. Similar to rotatingMotion but + motion specified as rotation vector. + +SourceFiles + axisRotationMotion.C + +\*---------------------------------------------------------------------------*/ + +#ifndef axisRotationMotion_H +#define axisRotationMotion_H + +#include "solidBodyMotionFunction.H" +#include "primitiveFields.H" +#include "point.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace solidBodyMotionFunctions +{ + +/*---------------------------------------------------------------------------*\ + Class axisRotationMotion Declaration +\*---------------------------------------------------------------------------*/ + +class axisRotationMotion +: + public solidBodyMotionFunction +{ + // Private data + + //- Centre of gravity + point CofG_; + + //- Rotational velocity (deg/s) + vector radialVelocity_; + + + // Private Member Functions + + //- Disallow copy construct + axisRotationMotion(const axisRotationMotion&); + + //- Disallow default bitwise assignment + void operator=(const axisRotationMotion&); + + +public: + + //- Runtime type information + TypeName("axisRotationMotion"); + + + // Constructors + + //- Construct from components + axisRotationMotion + ( + const dictionary& SBMFCoeffs, + const Time& runTime + ); + + + //- Destructor + virtual ~axisRotationMotion(); + + + // Member Functions + + //- Return the solid-body motion transformation septernion + virtual septernion transformation() const; + + //- Update properties from given dictionary + virtual bool read(const dictionary& SBMFCoeffs); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace solidBodyMotionFunctions +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //