mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
sixDof motion pointPatchField
This commit is contained in:
@ -31,5 +31,8 @@ pointPatchFields/derived/oscillatingDisplacement/oscillatingDisplacementPointPat
|
|||||||
pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C
|
pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C
|
||||||
pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C
|
pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C
|
||||||
pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C
|
pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C
|
||||||
|
pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyDisplacementPointPatchVectorField.C
|
||||||
|
pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.C
|
||||||
|
pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionIO.C
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libfvMotionSolvers
|
LIB = $(FOAM_LIBBIN)/libfvMotionSolvers
|
||||||
|
|||||||
@ -2,10 +2,12 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/triSurface/lnInclude \
|
-I$(LIB_SRC)/triSurface/lnInclude \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
-I$(LIB_SRC)/postProcessing/functionObjects/forces/lnInclude \
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-ltriSurface \
|
-ltriSurface \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-ldynamicMesh \
|
-ldynamicMesh \
|
||||||
-lfiniteVolume
|
-lfiniteVolume \
|
||||||
|
-lforces
|
||||||
|
|||||||
@ -0,0 +1,211 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "sixDofRigidBodyDisplacementPointPatchVectorField.H"
|
||||||
|
#include "pointPatchFields.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "Time.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "uniformDimensionedFields.H"
|
||||||
|
#include "forces.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField::
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch& p,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchField<vector>(p, iF),
|
||||||
|
motion_(),
|
||||||
|
p0_(p.localPoints())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField::
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch& p,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchField<vector>(p, iF, dict),
|
||||||
|
motion_(dict)
|
||||||
|
{
|
||||||
|
if (!dict.found("value"))
|
||||||
|
{
|
||||||
|
updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dict.found("p0"))
|
||||||
|
{
|
||||||
|
p0_ = vectorField("p0", dict , p.size());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p0_ = p.localPoints();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField::
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const sixDofRigidBodyDisplacementPointPatchVectorField& ptf,
|
||||||
|
const pointPatch& p,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF,
|
||||||
|
const pointPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchField<vector>(ptf, p, iF, mapper),
|
||||||
|
motion_(ptf.motion_),
|
||||||
|
p0_(ptf.p0_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField::
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const sixDofRigidBodyDisplacementPointPatchVectorField& ptf,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchField<vector>(ptf, iF),
|
||||||
|
motion_(ptf.motion_),
|
||||||
|
p0_(ptf.p0_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void sixDofRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (this->updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const polyMesh& mesh = this->dimensionedInternalField().mesh()();
|
||||||
|
const Time& t = mesh.time();
|
||||||
|
const pointPatch& ptPatch = this->patch();
|
||||||
|
|
||||||
|
// Patch force data is valid for the current positions, so
|
||||||
|
// calculate the forces on the motion object from this data, then
|
||||||
|
// update the positions
|
||||||
|
|
||||||
|
motion_.updatePosition(t.deltaT().value());
|
||||||
|
|
||||||
|
dictionary forcesDict;
|
||||||
|
|
||||||
|
forcesDict.add("patches", wordList(1, ptPatch.name()));
|
||||||
|
forcesDict.add("rhoInf", 0.0);
|
||||||
|
forcesDict.add("CofR", motion_.centreOfMass());
|
||||||
|
|
||||||
|
forces f("forces", db(), forcesDict);
|
||||||
|
|
||||||
|
forces::forcesMoments fm = f.calcForcesMoment();
|
||||||
|
|
||||||
|
// Get the forces on the patch faces at the current positions
|
||||||
|
|
||||||
|
vector gravity = vector::zero;
|
||||||
|
|
||||||
|
if (db().foundObject<uniformDimensionedVectorField>("g"))
|
||||||
|
{
|
||||||
|
uniformDimensionedVectorField g =
|
||||||
|
db().lookupObject<uniformDimensionedVectorField>("g");
|
||||||
|
|
||||||
|
gravity = g.value();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uniformDimensionedVectorField g
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"g",
|
||||||
|
db().time().constant(),
|
||||||
|
db(),
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
gravity = g.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
motion_.updateForce
|
||||||
|
(
|
||||||
|
fm.first().first() + fm.first().second() + gravity*motion_.mass(),
|
||||||
|
fm.second().first() + fm.second().second(),
|
||||||
|
t.deltaT().value()
|
||||||
|
);
|
||||||
|
|
||||||
|
// motion_.updateForce
|
||||||
|
// (
|
||||||
|
// vector::zero,
|
||||||
|
// vector::zero,
|
||||||
|
// t.deltaT().value()
|
||||||
|
// );
|
||||||
|
|
||||||
|
Info<< motion_ << endl;
|
||||||
|
|
||||||
|
Field<vector>::operator=(motion_.generatePositions(p0_) - p0_);
|
||||||
|
|
||||||
|
fixedValuePointPatchField<vector>::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sixDofRigidBodyDisplacementPointPatchVectorField::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
pointPatchField<vector>::write(os);
|
||||||
|
motion_.write(os);
|
||||||
|
p0_.writeEntry("p0", os);
|
||||||
|
writeEntry("value", os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePointPatchTypeField
|
||||||
|
(
|
||||||
|
pointPatchVectorField,
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,153 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
|
||||||
|
Description
|
||||||
|
Foam::sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef sixDofRigidBodyDisplacementPointPatchVectorField_H
|
||||||
|
#define sixDofRigidBodyDisplacementPointPatchVectorField_H
|
||||||
|
|
||||||
|
#include "fixedValuePointPatchField.H"
|
||||||
|
#include "sixDofRigidBodyMotion.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class sixDofRigidBodyDisplacementPointPatchVectorField Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
:
|
||||||
|
public fixedValuePointPatchField<vector>
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Six dof motion object
|
||||||
|
sixDofRigidBodyMotion motion_;
|
||||||
|
|
||||||
|
//- Reference positions of points on the patch
|
||||||
|
pointField p0_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("sixDofRigidBodyDisplacement");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch&,
|
||||||
|
const DimensionedField<vector, pointMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch&,
|
||||||
|
const DimensionedField<vector, pointMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given patchField<vector> onto a new patch
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const sixDofRigidBodyDisplacementPointPatchVectorField&,
|
||||||
|
const pointPatch&,
|
||||||
|
const DimensionedField<vector, pointMesh>&,
|
||||||
|
const pointPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<pointPatchField<vector> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<pointPatchField<vector> >
|
||||||
|
(
|
||||||
|
new sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
*this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const sixDofRigidBodyDisplacementPointPatchVectorField&,
|
||||||
|
const DimensionedField<vector, pointMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual autoPtr<pointPatchField<vector> > clone
|
||||||
|
(
|
||||||
|
const DimensionedField<vector, pointMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return autoPtr<pointPatchField<vector> >
|
||||||
|
(
|
||||||
|
new sixDofRigidBodyDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
*this,
|
||||||
|
iF
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream&) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,208 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "sixDofRigidBodyMotion.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion()
|
||||||
|
:
|
||||||
|
centreOfMass_(vector::zero),
|
||||||
|
refCentreOfMass_(vector::zero),
|
||||||
|
momentOfInertia_(diagTensor::one*VSMALL),
|
||||||
|
mass_(VSMALL),
|
||||||
|
Q_(I),
|
||||||
|
v_(vector::zero),
|
||||||
|
a_(vector::zero),
|
||||||
|
pi_(vector::zero),
|
||||||
|
tau_(vector::zero)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion
|
||||||
|
(
|
||||||
|
const point& centreOfMass,
|
||||||
|
const point& refCentreOfMass,
|
||||||
|
const diagTensor& momentOfInertia,
|
||||||
|
scalar mass,
|
||||||
|
const tensor& Q,
|
||||||
|
const vector& v,
|
||||||
|
const vector& a,
|
||||||
|
const vector& pi,
|
||||||
|
const vector& tau
|
||||||
|
)
|
||||||
|
:
|
||||||
|
centreOfMass_(centreOfMass),
|
||||||
|
refCentreOfMass_(refCentreOfMass),
|
||||||
|
momentOfInertia_(momentOfInertia),
|
||||||
|
mass_(mass),
|
||||||
|
Q_(Q),
|
||||||
|
v_(v),
|
||||||
|
a_(a),
|
||||||
|
pi_(pi),
|
||||||
|
tau_(tau)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion(const dictionary& dict)
|
||||||
|
:
|
||||||
|
centreOfMass_(dict.lookup("centreOfMass")),
|
||||||
|
refCentreOfMass_(dict.lookupOrDefault("refCentreOfMass", centreOfMass_)),
|
||||||
|
momentOfInertia_(dict.lookup("momentOfInertia")),
|
||||||
|
mass_(readScalar(dict.lookup("mass"))),
|
||||||
|
Q_(dict.lookupOrDefault("Q", tensor(I))),
|
||||||
|
v_(dict.lookupOrDefault("v", vector::zero)),
|
||||||
|
a_(dict.lookupOrDefault("a", vector::zero)),
|
||||||
|
pi_(dict.lookupOrDefault("pi", vector::zero)),
|
||||||
|
tau_(dict.lookupOrDefault("tau", vector::zero))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion
|
||||||
|
(
|
||||||
|
const sixDofRigidBodyMotion& sDofRBM
|
||||||
|
)
|
||||||
|
:
|
||||||
|
centreOfMass_(sDofRBM.centreOfMass()),
|
||||||
|
refCentreOfMass_(sDofRBM.refCentreOfMass()),
|
||||||
|
momentOfInertia_(sDofRBM.momentOfInertia()),
|
||||||
|
mass_(sDofRBM.mass()),
|
||||||
|
Q_(sDofRBM.Q()),
|
||||||
|
v_(sDofRBM.v()),
|
||||||
|
a_(sDofRBM.a()),
|
||||||
|
pi_(sDofRBM.pi()),
|
||||||
|
tau_(sDofRBM.tau())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::sixDofRigidBodyMotion::~sixDofRigidBodyMotion()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::sixDofRigidBodyMotion::updatePosition
|
||||||
|
(
|
||||||
|
scalar deltaT
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// First leapfrog velocity adjust and motion part, required before
|
||||||
|
// force calculation
|
||||||
|
|
||||||
|
v_ += 0.5*deltaT*a_;
|
||||||
|
|
||||||
|
pi_ += 0.5*deltaT*tau_;
|
||||||
|
|
||||||
|
// Leapfrog move part
|
||||||
|
centreOfMass_ += deltaT*v_;
|
||||||
|
|
||||||
|
// Leapfrog orientation adjustment
|
||||||
|
|
||||||
|
tensor R;
|
||||||
|
|
||||||
|
R = rotationTensorX(0.5*deltaT*pi_.x()/momentOfInertia_.xx());
|
||||||
|
pi_ = pi_ & R;
|
||||||
|
Q_ = Q_ & R;
|
||||||
|
|
||||||
|
R = rotationTensorY(0.5*deltaT*pi_.y()/momentOfInertia_.yy());
|
||||||
|
pi_ = pi_ & R;
|
||||||
|
Q_ = Q_ & R;
|
||||||
|
|
||||||
|
R = rotationTensorZ(deltaT*pi_.z()/momentOfInertia_.zz());
|
||||||
|
pi_ = pi_ & R;
|
||||||
|
Q_ = Q_ & R;
|
||||||
|
|
||||||
|
R = rotationTensorY(0.5*deltaT*pi_.y()/momentOfInertia_.yy());
|
||||||
|
pi_ = pi_ & R;
|
||||||
|
Q_ = Q_ & R;
|
||||||
|
|
||||||
|
R = rotationTensorX(0.5*deltaT*pi_.x()/momentOfInertia_.xx());
|
||||||
|
pi_ = pi_ & R;
|
||||||
|
Q_ = Q_ & R;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::sixDofRigidBodyMotion::updateForce
|
||||||
|
(
|
||||||
|
const vector& fGlobal,
|
||||||
|
const vector& tauGlobal,
|
||||||
|
scalar deltaT
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Second leapfrog velocity adjust part, required after motion and
|
||||||
|
// force calculation part
|
||||||
|
|
||||||
|
a_ = fGlobal/mass_;
|
||||||
|
|
||||||
|
tau_ = (Q_.T() & tauGlobal);
|
||||||
|
|
||||||
|
v_ += 0.5*deltaT*a_;
|
||||||
|
|
||||||
|
pi_ += 0.5*deltaT*tau_;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::sixDofRigidBodyMotion::updateForce
|
||||||
|
(
|
||||||
|
const pointField& positions,
|
||||||
|
const vectorField& forces,
|
||||||
|
scalar deltaT
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Second leapfrog velocity adjust part, required after motion and
|
||||||
|
// force calculation part
|
||||||
|
|
||||||
|
a_ = vector::zero;
|
||||||
|
|
||||||
|
tau_ = vector::zero;
|
||||||
|
|
||||||
|
forAll(positions, i)
|
||||||
|
{
|
||||||
|
const vector& f = forces[i];
|
||||||
|
|
||||||
|
a_ += f/mass_;
|
||||||
|
|
||||||
|
tau_ += (positions[i] ^ (Q_.T() & f));
|
||||||
|
}
|
||||||
|
|
||||||
|
v_ += 0.5*deltaT*a_;
|
||||||
|
|
||||||
|
pi_ += 0.5*deltaT*tau_;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::pointField>
|
||||||
|
Foam::sixDofRigidBodyMotion::generatePositions(const pointField& pts) const
|
||||||
|
{
|
||||||
|
return (centreOfMass_ + (Q_ & (pts - refCentreOfMass_)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,267 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::sixDofRigidBodyMotion
|
||||||
|
|
||||||
|
Description
|
||||||
|
Six degree of freedom motion for a rigid body. Angular momentum stored in
|
||||||
|
body fixed reference frame. Reference orientation of the body must align
|
||||||
|
with the cartesian axes such that the Inertia tensor is in principle
|
||||||
|
component form.
|
||||||
|
|
||||||
|
Symplectic motion as per:
|
||||||
|
|
||||||
|
title = {Symplectic splitting methods for rigid body molecular dynamics},
|
||||||
|
publisher = {AIP},
|
||||||
|
year = {1997},
|
||||||
|
journal = {The Journal of Chemical Physics},
|
||||||
|
volume = {107},
|
||||||
|
number = {15},
|
||||||
|
pages = {5840-5851},
|
||||||
|
url = {http://link.aip.org/link/?JCP/107/5840/1},
|
||||||
|
doi = {10.1063/1.474310}
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
sixDofRigidBodyMotionI.H
|
||||||
|
sixDofRigidBodyMotion.C
|
||||||
|
sixDofRigidBodyMotionIO.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef sixDofRigidBodyMotion_H
|
||||||
|
#define sixDofRigidBodyMotion_H
|
||||||
|
|
||||||
|
#include "vector.H"
|
||||||
|
#include "diagTensor.H"
|
||||||
|
#include "pointField.H"
|
||||||
|
#include "mathConstants.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
|
class Istream;
|
||||||
|
class Ostream;
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
class sixDofRigidBodyMotion;
|
||||||
|
Istream& operator>>(Istream&, sixDofRigidBodyMotion&);
|
||||||
|
Ostream& operator<<(Ostream&, const sixDofRigidBodyMotion&);
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class sixDofRigidBodyMotion Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class sixDofRigidBodyMotion
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Current position of the centre of mass of the body
|
||||||
|
point centreOfMass_;
|
||||||
|
|
||||||
|
//- Centre of mass of reference state
|
||||||
|
point refCentreOfMass_;
|
||||||
|
|
||||||
|
//- Moment of inertia of the body in reference configuration
|
||||||
|
diagTensor momentOfInertia_;
|
||||||
|
|
||||||
|
//- Mass of the body
|
||||||
|
scalar mass_;
|
||||||
|
|
||||||
|
//- Orientation, stored as the rotation tensor to transform
|
||||||
|
// from the body to the global reference frame, i.e.:
|
||||||
|
// globalVector = Q_ & bodyLocalVector
|
||||||
|
// bodyLocalVector = Q_.T() & globalVector
|
||||||
|
tensor Q_;
|
||||||
|
|
||||||
|
// Linear velocity of body
|
||||||
|
vector v_;
|
||||||
|
|
||||||
|
// Total linear acceleration of body
|
||||||
|
vector a_;
|
||||||
|
|
||||||
|
//- Angular momentum of body, in body local reference frame
|
||||||
|
vector pi_;
|
||||||
|
|
||||||
|
//- Total torque on body, in body local reference frame
|
||||||
|
vector tau_;
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Calculate the rotation tensor around the body reference
|
||||||
|
// frame x-axis by the given angle
|
||||||
|
inline tensor rotationTensorX(scalar deltaT) const;
|
||||||
|
|
||||||
|
//- Calculate the rotation tensor around the body reference
|
||||||
|
// frame y-axis by the given angle
|
||||||
|
inline tensor rotationTensorY(scalar deltaT) const;
|
||||||
|
|
||||||
|
//- Calculate the rotation tensor around the body reference
|
||||||
|
// frame z-axis by the given angle
|
||||||
|
inline tensor rotationTensorZ(scalar deltaT) const;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct null
|
||||||
|
sixDofRigidBodyMotion();
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
sixDofRigidBodyMotion
|
||||||
|
(
|
||||||
|
const point& centreOfMass,
|
||||||
|
const point& refCentreOfMass,
|
||||||
|
const diagTensor& momentOfInertia,
|
||||||
|
scalar mass,
|
||||||
|
const tensor& Q,
|
||||||
|
const vector& v,
|
||||||
|
const vector& a,
|
||||||
|
const vector& pi,
|
||||||
|
const vector& tau
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from dictionary
|
||||||
|
sixDofRigidBodyMotion(const dictionary& dict);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
sixDofRigidBodyMotion(const sixDofRigidBodyMotion&);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
~sixDofRigidBodyMotion();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
void updatePosition
|
||||||
|
(
|
||||||
|
scalar deltaT
|
||||||
|
);
|
||||||
|
|
||||||
|
void updateForce
|
||||||
|
(
|
||||||
|
const vector& fGlobal,
|
||||||
|
const vector& tauGlobal,
|
||||||
|
scalar deltaT
|
||||||
|
);
|
||||||
|
|
||||||
|
void updateForce
|
||||||
|
(
|
||||||
|
const pointField& positions,
|
||||||
|
const vectorField& forces,
|
||||||
|
scalar deltaT
|
||||||
|
);
|
||||||
|
|
||||||
|
tmp<pointField> generatePositions(const pointField& pts) const;
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return access to the centre of mass
|
||||||
|
inline const point& centreOfMass() const;
|
||||||
|
|
||||||
|
//- Return access to the centre of mass
|
||||||
|
inline const point& refCentreOfMass() const;
|
||||||
|
|
||||||
|
//- Return access to the inertia tensor
|
||||||
|
inline const diagTensor& momentOfInertia() const;
|
||||||
|
|
||||||
|
//- Return access to the mass
|
||||||
|
inline scalar mass() const;
|
||||||
|
|
||||||
|
//- Return access to the orientation
|
||||||
|
inline const tensor& Q() const;
|
||||||
|
|
||||||
|
//- Return access to velocity
|
||||||
|
inline const vector& v() const;
|
||||||
|
|
||||||
|
//- Return access to acceleration
|
||||||
|
inline const vector& a() const;
|
||||||
|
|
||||||
|
//- Return access to angular momentum
|
||||||
|
inline const vector& pi() const;
|
||||||
|
|
||||||
|
//- Return access to torque
|
||||||
|
inline const vector& tau() const;
|
||||||
|
|
||||||
|
|
||||||
|
// Edit
|
||||||
|
|
||||||
|
//- Return non-const access to the centre of mass
|
||||||
|
inline point& centreOfMass();
|
||||||
|
|
||||||
|
//- Return access to the centre of mass
|
||||||
|
inline point& refCentreOfMass();
|
||||||
|
|
||||||
|
//- Return non-const access to the inertia tensor
|
||||||
|
inline diagTensor& momentOfInertia();
|
||||||
|
|
||||||
|
//- Return non-const access to the mass
|
||||||
|
inline scalar& mass();
|
||||||
|
|
||||||
|
//- Return non-const access to the orientation
|
||||||
|
inline tensor& Q();
|
||||||
|
|
||||||
|
//- Return non-const access to vector
|
||||||
|
inline vector& v();
|
||||||
|
|
||||||
|
//- Return non-const access to acceleration
|
||||||
|
inline vector& a();
|
||||||
|
|
||||||
|
//- Return non-const access to angular momentum
|
||||||
|
inline vector& pi();
|
||||||
|
|
||||||
|
//- Return non-const access to torque
|
||||||
|
inline vector& tau();
|
||||||
|
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
void write(Ostream&) const;
|
||||||
|
|
||||||
|
|
||||||
|
// IOstream Operators
|
||||||
|
|
||||||
|
friend Istream& operator>>(Istream&, sixDofRigidBodyMotion&);
|
||||||
|
friend Ostream& operator<<(Ostream&, const sixDofRigidBodyMotion&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "sixDofRigidBodyMotionI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,176 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline Foam::tensor
|
||||||
|
Foam::sixDofRigidBodyMotion::rotationTensorX(scalar phi) const
|
||||||
|
{
|
||||||
|
return tensor
|
||||||
|
(
|
||||||
|
1, 0, 0,
|
||||||
|
0, Foam::cos(phi), -Foam::sin(phi),
|
||||||
|
0, Foam::sin(phi), Foam::cos(phi)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::tensor
|
||||||
|
Foam::sixDofRigidBodyMotion::rotationTensorY(scalar phi) const
|
||||||
|
{
|
||||||
|
return tensor
|
||||||
|
(
|
||||||
|
Foam::cos(phi), 0, Foam::sin(phi),
|
||||||
|
0, 1, 0,
|
||||||
|
-Foam::sin(phi), 0, Foam::cos(phi)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::tensor
|
||||||
|
Foam::sixDofRigidBodyMotion::rotationTensorZ(scalar phi) const
|
||||||
|
{
|
||||||
|
return tensor
|
||||||
|
(
|
||||||
|
Foam::cos(phi), -Foam::sin(phi), 0,
|
||||||
|
Foam::sin(phi), Foam::cos(phi), 0,
|
||||||
|
0, 0, 1
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::point& Foam::sixDofRigidBodyMotion::centreOfMass() const
|
||||||
|
{
|
||||||
|
return centreOfMass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::point& Foam::sixDofRigidBodyMotion::refCentreOfMass() const
|
||||||
|
{
|
||||||
|
return refCentreOfMass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::diagTensor&
|
||||||
|
Foam::sixDofRigidBodyMotion::momentOfInertia() const
|
||||||
|
{
|
||||||
|
return momentOfInertia_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::sixDofRigidBodyMotion::mass() const
|
||||||
|
{
|
||||||
|
return mass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::tensor& Foam::sixDofRigidBodyMotion::Q() const
|
||||||
|
{
|
||||||
|
return Q_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::vector& Foam::sixDofRigidBodyMotion::v() const
|
||||||
|
{
|
||||||
|
return v_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::vector& Foam::sixDofRigidBodyMotion::a() const
|
||||||
|
{
|
||||||
|
return a_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::vector& Foam::sixDofRigidBodyMotion::pi() const
|
||||||
|
{
|
||||||
|
return pi_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::vector& Foam::sixDofRigidBodyMotion::tau() const
|
||||||
|
{
|
||||||
|
return tau_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::point& Foam::sixDofRigidBodyMotion::centreOfMass()
|
||||||
|
{
|
||||||
|
return centreOfMass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::point& Foam::sixDofRigidBodyMotion::refCentreOfMass()
|
||||||
|
{
|
||||||
|
return refCentreOfMass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::diagTensor& Foam::sixDofRigidBodyMotion::momentOfInertia()
|
||||||
|
{
|
||||||
|
return momentOfInertia_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar& Foam::sixDofRigidBodyMotion::mass()
|
||||||
|
{
|
||||||
|
return mass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::tensor& Foam::sixDofRigidBodyMotion::Q()
|
||||||
|
{
|
||||||
|
return Q_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::vector& Foam::sixDofRigidBodyMotion::v()
|
||||||
|
{
|
||||||
|
return v_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::vector& Foam::sixDofRigidBodyMotion::a()
|
||||||
|
{
|
||||||
|
return a_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::vector& Foam::sixDofRigidBodyMotion::pi()
|
||||||
|
{
|
||||||
|
return pi_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::vector& Foam::sixDofRigidBodyMotion::tau()
|
||||||
|
{
|
||||||
|
return tau_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,107 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "sixDofRigidBodyMotion.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::sixDofRigidBodyMotion::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
os.writeKeyword("centreOfMass")
|
||||||
|
<< centreOfMass_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("refCentreOfMass")
|
||||||
|
<< refCentreOfMass_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("momentOfInertia")
|
||||||
|
<< momentOfInertia_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("mass")
|
||||||
|
<< mass_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("Q")
|
||||||
|
<< Q_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("v")
|
||||||
|
<< v_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("a")
|
||||||
|
<< a_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("pi")
|
||||||
|
<< pi_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("tau")
|
||||||
|
<< tau_ << token::END_STATEMENT << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::Istream& Foam::operator>>(Istream& is, sixDofRigidBodyMotion& sDofRBM)
|
||||||
|
{
|
||||||
|
is >> sDofRBM.centreOfMass_
|
||||||
|
>> sDofRBM.refCentreOfMass_
|
||||||
|
>> sDofRBM.momentOfInertia_
|
||||||
|
>> sDofRBM.mass_
|
||||||
|
>> sDofRBM.Q_
|
||||||
|
>> sDofRBM.v_
|
||||||
|
>> sDofRBM.a_
|
||||||
|
>> sDofRBM.pi_
|
||||||
|
>> sDofRBM.tau_;
|
||||||
|
|
||||||
|
// Check state of Istream
|
||||||
|
is.check
|
||||||
|
(
|
||||||
|
"Foam::Istream& Foam::operator>>"
|
||||||
|
"(Foam::Istream&, Foam::sixDofRigidBodyMotion&)"
|
||||||
|
);
|
||||||
|
|
||||||
|
return is;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::Ostream& Foam::operator<<
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const sixDofRigidBodyMotion& sDofRBM
|
||||||
|
)
|
||||||
|
{
|
||||||
|
os << token::SPACE << sDofRBM.centreOfMass()
|
||||||
|
<< token::SPACE << sDofRBM.refCentreOfMass()
|
||||||
|
<< token::SPACE << sDofRBM.momentOfInertia()
|
||||||
|
<< token::SPACE << sDofRBM.mass()
|
||||||
|
<< token::SPACE << sDofRBM.Q()
|
||||||
|
<< token::SPACE << sDofRBM.v()
|
||||||
|
<< token::SPACE << sDofRBM.a()
|
||||||
|
<< token::SPACE << sDofRBM.pi()
|
||||||
|
<< token::SPACE << sDofRBM.tau();
|
||||||
|
|
||||||
|
// Check state of Ostream
|
||||||
|
os.check
|
||||||
|
(
|
||||||
|
"Foam::Ostream& Foam::operator<<(Foam::Ostream&, "
|
||||||
|
"const Foam::sixDofRigidBodyMotion&)"
|
||||||
|
);
|
||||||
|
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user