Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 inline Foam::tensor
00029 Foam::sixDoFRigidBodyMotion::rotationTensorX(scalar phi) const
00030 {
00031     return tensor
00032     (
00033         1, 0, 0,
00034         0, Foam::cos(phi), -Foam::sin(phi),
00035         0, Foam::sin(phi), Foam::cos(phi)
00036     );
00037 }
00038 
00039 
00040 inline Foam::tensor
00041 Foam::sixDoFRigidBodyMotion::rotationTensorY(scalar phi) const
00042 {
00043     return tensor
00044     (
00045         Foam::cos(phi), 0, Foam::sin(phi),
00046         0, 1, 0,
00047         -Foam::sin(phi), 0, Foam::cos(phi)
00048     );
00049 }
00050 
00051 
00052 inline Foam::tensor
00053 Foam::sixDoFRigidBodyMotion::rotationTensorZ(scalar phi) const
00054 {
00055     return tensor
00056     (
00057         Foam::cos(phi), -Foam::sin(phi), 0,
00058         Foam::sin(phi), Foam::cos(phi), 0,
00059         0, 0, 1
00060     );
00061 }
00062 
00063 
00064 inline void Foam::sixDoFRigidBodyMotion::rotate
00065 (
00066     tensor& Q,
00067     vector& pi,
00068     scalar deltaT
00069 ) const
00070 {
00071     tensor R;
00072 
00073     R = rotationTensorX(0.5*deltaT*pi.x()/momentOfInertia_.xx());
00074     pi = pi & R;
00075     Q = Q & R;
00076 
00077     R = rotationTensorY(0.5*deltaT*pi.y()/momentOfInertia_.yy());
00078     pi = pi & R;
00079     Q = Q & R;
00080 
00081     R = rotationTensorZ(deltaT*pi.z()/momentOfInertia_.zz());
00082     pi = pi & R;
00083     Q = Q & R;
00084 
00085     R = rotationTensorY(0.5*deltaT*pi.y()/momentOfInertia_.yy());
00086     pi = pi & R;
00087     Q = Q & R;
00088 
00089     R = rotationTensorX(0.5*deltaT*pi.x()/momentOfInertia_.xx());
00090     pi = pi & R;
00091     Q = Q & R;
00092 }
00093 
00094 
00095 inline const Foam::sixDoFRigidBodyMotionState&
00096 Foam::sixDoFRigidBodyMotion::motionState() const
00097 {
00098     return motionState_;
00099 }
00100 
00101 
00102 inline const Foam::PtrList<Foam::sixDoFRigidBodyMotionRestraint>&
00103 Foam::sixDoFRigidBodyMotion::restraints() const
00104 {
00105     return restraints_;
00106 }
00107 
00108 
00109 inline const Foam::wordList& Foam::sixDoFRigidBodyMotion::restraintNames() const
00110 {
00111     return restraintNames_;
00112 }
00113 
00114 
00115 inline const Foam::PtrList<Foam::sixDoFRigidBodyMotionConstraint>&
00116 Foam::sixDoFRigidBodyMotion::constraints() const
00117 {
00118     return constraints_;
00119 }
00120 
00121 
00122 inline const Foam::wordList&
00123 Foam::sixDoFRigidBodyMotion::constraintNames() const
00124 {
00125     return constraintNames_;
00126 }
00127 
00128 
00129 inline Foam::label Foam::sixDoFRigidBodyMotion::maxConstraintIterations() const
00130 {
00131     return maxConstraintIterations_;
00132 }
00133 
00134 
00135 inline const Foam::point&
00136 Foam::sixDoFRigidBodyMotion::initialCentreOfMass() const
00137 {
00138     return initialCentreOfMass_;
00139 }
00140 
00141 
00142 inline const Foam::tensor&
00143 Foam::sixDoFRigidBodyMotion::initialQ() const
00144 {
00145     return initialQ_;
00146 }
00147 
00148 
00149 inline const Foam::tensor& Foam::sixDoFRigidBodyMotion::Q() const
00150 {
00151     return motionState_.Q();
00152 }
00153 
00154 
00155 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::v() const
00156 {
00157     return motionState_.v();
00158 }
00159 
00160 
00161 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::a() const
00162 {
00163     return motionState_.a();
00164 }
00165 
00166 
00167 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::pi() const
00168 {
00169     return motionState_.pi();
00170 }
00171 
00172 
00173 inline const Foam::vector& Foam::sixDoFRigidBodyMotion::tau() const
00174 {
00175     return motionState_.tau();
00176 }
00177 
00178 
00179 inline Foam::point& Foam::sixDoFRigidBodyMotion::initialCentreOfMass()
00180 {
00181     return initialCentreOfMass_;
00182 }
00183 
00184 
00185 inline Foam::tensor& Foam::sixDoFRigidBodyMotion::initialQ()
00186 {
00187     return initialQ_;
00188 }
00189 
00190 
00191 inline Foam::tensor& Foam::sixDoFRigidBodyMotion::Q()
00192 {
00193     return motionState_.Q();
00194 }
00195 
00196 
00197 inline Foam::vector& Foam::sixDoFRigidBodyMotion::v()
00198 {
00199     return motionState_.v();
00200 }
00201 
00202 
00203 inline Foam::vector& Foam::sixDoFRigidBodyMotion::a()
00204 {
00205     return motionState_.a();
00206 }
00207 
00208 
00209 inline Foam::vector& Foam::sixDoFRigidBodyMotion::pi()
00210 {
00211     return motionState_.pi();
00212 }
00213 
00214 
00215 inline Foam::vector& Foam::sixDoFRigidBodyMotion::tau()
00216 {
00217     return motionState_.tau();
00218 }
00219 
00220 
00221 
00222 
00223 inline Foam::tmp<Foam::pointField>
00224 Foam::sixDoFRigidBodyMotion::currentPosition(const pointField& pInitial) const
00225 {
00226     return
00227     (
00228         centreOfMass()
00229       + (Q() & initialQ_.T() & (pInitial - initialCentreOfMass_)))
00230     ;
00231 }
00232 
00233 
00234 inline Foam::point Foam::sixDoFRigidBodyMotion::currentPosition
00235 (
00236     const point& pInitial
00237 ) const
00238 {
00239     return
00240     (
00241         centreOfMass()
00242       + (Q() & initialQ_.T() & (pInitial - initialCentreOfMass_))
00243     );
00244 }
00245 
00246 
00247 inline Foam::vector Foam::sixDoFRigidBodyMotion::currentOrientation
00248 (
00249     const vector& vInitial
00250 ) const
00251 {
00252     return (Q() & initialQ_.T() & vInitial);
00253 }
00254 
00255 
00256 inline const Foam::tensor&
00257 Foam::sixDoFRigidBodyMotion::orientation() const
00258 {
00259     return Q();
00260 }
00261 
00262 
00263 inline Foam::vector Foam::sixDoFRigidBodyMotion::omega() const
00264 {
00265     return  Q() & (inv(momentOfInertia_) & pi());
00266 }
00267 
00268 
00269 inline Foam::point Foam::sixDoFRigidBodyMotion::currentVelocity
00270 (
00271     const point& pt
00272 ) const
00273 {
00274     return (omega() ^ (pt - centreOfMass())) + v();
00275 }
00276 
00277 
00278 inline const Foam::point& Foam::sixDoFRigidBodyMotion::centreOfMass() const
00279 {
00280     return motionState_.centreOfMass();
00281 }
00282 
00283 
00284 inline const Foam::diagTensor&
00285 Foam::sixDoFRigidBodyMotion::momentOfInertia() const
00286 {
00287     return momentOfInertia_;
00288 }
00289 
00290 
00291 inline Foam::scalar Foam::sixDoFRigidBodyMotion::mass() const
00292 {
00293     return mass_;
00294 }
00295 
00296 
00297 inline bool Foam::sixDoFRigidBodyMotion::report() const
00298 {
00299     return report_;
00300 }
00301 
00302 
00303 inline Foam::point& Foam::sixDoFRigidBodyMotion::centreOfMass()
00304 {
00305     return motionState_.centreOfMass();
00306 }
00307 
00308 
00309 inline Foam::diagTensor& Foam::sixDoFRigidBodyMotion::momentOfInertia()
00310 {
00311     return momentOfInertia_;
00312 }
00313 
00314 
00315 inline Foam::scalar& Foam::sixDoFRigidBodyMotion::mass()
00316 {
00317     return mass_;
00318 }
00319 
00320