1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the
13 Free Software Foundation; either version 2 of the License, or (at your
14 option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM; if not, write to the Free Software Foundation,
23 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
30 Foam::sixDoFRigidBodyMotion::rotationTensorX(scalar phi) const
35 0, Foam::cos(phi), -Foam::sin(phi),
36 0, Foam::sin(phi), Foam::cos(phi)
42 Foam::sixDoFRigidBodyMotion::rotationTensorY(scalar phi) const
46 Foam::cos(phi), 0, Foam::sin(phi),
48 -Foam::sin(phi), 0, Foam::cos(phi)
54 Foam::sixDoFRigidBodyMotion::rotationTensorZ(scalar phi) const
58 Foam::cos(phi), -Foam::sin(phi), 0,
59 Foam::sin(phi), Foam::cos(phi), 0,
65 inline void Foam::sixDoFRigidBodyMotion::rotate
74 R = rotationTensorX(0.5*deltaT*pi.x()/momentOfInertia_.xx());
78 R = rotationTensorY(0.5*deltaT*pi.y()/momentOfInertia_.yy());
82 R = rotationTensorZ(deltaT*pi.z()/momentOfInertia_.zz());
86 R = rotationTensorY(0.5*deltaT*pi.y()/momentOfInertia_.yy());
90 R = rotationTensorX(0.5*deltaT*pi.x()/momentOfInertia_.xx());
96 inline const Foam::sixDoFRigidBodyMotionState&
97 Foam::sixDoFRigidBodyMotion::motionState() const
103 inline const Foam::PtrList<Foam::sixDoFRigidBodyMotionRestraint>&
104 Foam::sixDoFRigidBodyMotion::restraints() const
110 inline const Foam::wordList& Foam::sixDoFRigidBodyMotion::restraintNames() const
112 return restraintNames_;
116 inline const Foam::PtrList<Foam::sixDoFRigidBodyMotionConstraint>&
117 Foam::sixDoFRigidBodyMotion::constraints() const
123 inline const Foam::wordList&
124 Foam::sixDoFRigidBodyMotion::constraintNames() const
126 return constraintNames_;
130 inline Foam::label Foam::sixDoFRigidBodyMotion::maxConstraintIterations() const
132 return maxConstraintIterations_;
136 inline const Foam::point&
137 Foam::sixDoFRigidBodyMotion::initialCentreOfMass() const
139 return initialCentreOfMass_;
143 inline const Foam::tensor&
144 Foam::sixDoFRigidBodyMotion::initialQ() const
150 inline const Foam::tensor& Foam::sixDoFRigidBodyMotion::Q() const
152 return motionState_.Q();
156 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::v() const
158 return motionState_.v();
162 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::a() const
164 return motionState_.a();
168 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::pi() const
170 return motionState_.pi();
174 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::tau() const
176 return motionState_.tau();
180 inline Foam::point& Foam::sixDoFRigidBodyMotion::initialCentreOfMass()
182 return initialCentreOfMass_;
186 inline Foam::tensor& Foam::sixDoFRigidBodyMotion::initialQ()
192 inline Foam::tensor& Foam::sixDoFRigidBodyMotion::Q()
194 return motionState_.Q();
198 inline Foam::vector& Foam::sixDoFRigidBodyMotion::v()
200 return motionState_.v();
204 inline Foam::vector& Foam::sixDoFRigidBodyMotion::a()
206 return motionState_.a();
210 inline Foam::vector& Foam::sixDoFRigidBodyMotion::pi()
212 return motionState_.pi();
216 inline Foam::vector& Foam::sixDoFRigidBodyMotion::tau()
218 return motionState_.tau();
222 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
224 inline Foam::tmp<Foam::pointField>
225 Foam::sixDoFRigidBodyMotion::currentPosition(const pointField& pInitial) const
230 + (Q() & initialQ_.T() & (pInitial - initialCentreOfMass_)))
235 inline Foam::point Foam::sixDoFRigidBodyMotion::currentPosition
237 const point& pInitial
243 + (Q() & initialQ_.T() & (pInitial - initialCentreOfMass_))
248 inline Foam::vector Foam::sixDoFRigidBodyMotion::currentOrientation
250 const vector& vInitial
253 return (Q() & initialQ_.T() & vInitial);
257 inline const Foam::tensor&
258 Foam::sixDoFRigidBodyMotion::orientation() const
264 inline Foam::vector Foam::sixDoFRigidBodyMotion::omega() const
266 return Q() & (inv(momentOfInertia_) & pi());
270 inline Foam::point Foam::sixDoFRigidBodyMotion::currentVelocity
275 return (omega() ^ (pt - centreOfMass())) + v();
279 inline const Foam::point& Foam::sixDoFRigidBodyMotion::centreOfMass() const
281 return motionState_.centreOfMass();
285 inline const Foam::diagTensor&
286 Foam::sixDoFRigidBodyMotion::momentOfInertia() const
288 return momentOfInertia_;
292 inline Foam::scalar Foam::sixDoFRigidBodyMotion::mass() const
298 inline bool Foam::sixDoFRigidBodyMotion::report() const
304 inline Foam::point& Foam::sixDoFRigidBodyMotion::centreOfMass()
306 return motionState_.centreOfMass();
310 inline Foam::diagTensor& Foam::sixDoFRigidBodyMotion::momentOfInertia()
312 return momentOfInertia_;
316 inline Foam::scalar& Foam::sixDoFRigidBodyMotion::mass()
321 // ************************************************************************* //