sixDoFMotion: Adding restraints and constraints to the motion of objects.
[OpenFOAM-1.6.x.git] / src / postProcessing / functionObjects / forces / pointPatchFields / derived / sixDoFRigidBodyMotion / sixDoFRigidBodyMotionI.H
blob2335dcf8eb8b900832ab0073494993852bf69d54
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2009-2009 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
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
19     for more details.
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  * * * * * * * * * * * //
29 inline Foam::tensor
30 Foam::sixDoFRigidBodyMotion::rotationTensorX(scalar phi) const
32     return tensor
33     (
34         1, 0, 0,
35         0, Foam::cos(phi), -Foam::sin(phi),
36         0, Foam::sin(phi), Foam::cos(phi)
37     );
41 inline Foam::tensor
42 Foam::sixDoFRigidBodyMotion::rotationTensorY(scalar phi) const
44     return tensor
45     (
46         Foam::cos(phi), 0, Foam::sin(phi),
47         0, 1, 0,
48         -Foam::sin(phi), 0, Foam::cos(phi)
49     );
53 inline Foam::tensor
54 Foam::sixDoFRigidBodyMotion::rotationTensorZ(scalar phi) const
56     return tensor
57     (
58         Foam::cos(phi), -Foam::sin(phi), 0,
59         Foam::sin(phi), Foam::cos(phi), 0,
60         0, 0, 1
61     );
65 inline void Foam::sixDoFRigidBodyMotion::rotate
67     tensor& Q,
68     vector& pi,
69     scalar deltaT
70 ) const
72     tensor R;
74     R = rotationTensorX(0.5*deltaT*pi.x()/momentOfInertia_.xx());
75     pi = pi & R;
76     Q = Q & R;
78     R = rotationTensorY(0.5*deltaT*pi.y()/momentOfInertia_.yy());
79     pi = pi & R;
80     Q = Q & R;
82     R = rotationTensorZ(deltaT*pi.z()/momentOfInertia_.zz());
83     pi = pi & R;
84     Q = Q & R;
86     R = rotationTensorY(0.5*deltaT*pi.y()/momentOfInertia_.yy());
87     pi = pi & R;
88     Q = Q & R;
90     R = rotationTensorX(0.5*deltaT*pi.x()/momentOfInertia_.xx());
91     pi = pi & R;
92     Q = Q & R;
96 inline const Foam::sixDoFRigidBodyMotionState&
97 Foam::sixDoFRigidBodyMotion::motionState() const
99     return motionState_;
103 inline const Foam::PtrList<Foam::sixDoFRigidBodyMotionRestraint>&
104 Foam::sixDoFRigidBodyMotion::restraints() const
106     return restraints_;
110 inline const Foam::wordList& Foam::sixDoFRigidBodyMotion::restraintNames() const
112     return restraintNames_;
116 inline const Foam::PtrList<Foam::sixDoFRigidBodyMotionConstraint>&
117 Foam::sixDoFRigidBodyMotion::constraints() const
119     return constraints_;
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
146     return initialQ_;
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()
188     return 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
227     return
228     (
229         centreOfMass()
230       + (Q() & initialQ_.T() & (pInitial - initialCentreOfMass_)))
231     ;
235 inline Foam::point Foam::sixDoFRigidBodyMotion::currentPosition
237     const point& pInitial
238 ) const
240     return
241     (
242         centreOfMass()
243       + (Q() & initialQ_.T() & (pInitial - initialCentreOfMass_))
244     );
248 inline Foam::vector Foam::sixDoFRigidBodyMotion::currentOrientation
250     const vector& vInitial
251 ) const
253     return (Q() & initialQ_.T() & vInitial);
257 inline const Foam::tensor&
258 Foam::sixDoFRigidBodyMotion::orientation() const
260     return Q();
264 inline Foam::vector Foam::sixDoFRigidBodyMotion::omega() const
266     return  Q() & (inv(momentOfInertia_) & pi());
270 inline Foam::point Foam::sixDoFRigidBodyMotion::currentVelocity
272     const point& pt
273 ) const
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
294     return mass_;
298 inline bool Foam::sixDoFRigidBodyMotion::report() const
300     return report_;
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()
318     return mass_;
321 // ************************************************************************* //