Public Member Functions | Private Member Functions | Private Attributes | Friends
sixDoFRigidBodyMotion Class Reference

Six degree of freedom motion for a rigid body. More...

Collaboration diagram for sixDoFRigidBodyMotion:
Collaboration graph
[legend]

Public Member Functions

 sixDoFRigidBodyMotion ()
 Construct null. More...
 
 sixDoFRigidBodyMotion (const dictionary &dict, const dictionary &stateDict)
 Construct from constant and state dictionaries. More...
 
 sixDoFRigidBodyMotion (const sixDoFRigidBodyMotion &)
 Construct as copy. More...
 
 ~sixDoFRigidBodyMotion ()
 Destructor. More...
 
scalar mass () const
 Return the mass. More...
 
const diagTensormomentOfInertia () const
 Return the inertia tensor. More...
 
const sixDoFRigidBodyMotionStatestate () const
 Return the motion state. More...
 
const pointcentreOfRotation () const
 Return the current centre of rotation. More...
 
const pointinitialCentreOfMass () const
 Return the initial centre of mass. More...
 
point centreOfMass () const
 Return the current centre of mass. More...
 
const tensororientation () const
 Return the orientation tensor, Q. More...
 
vector omega () const
 Return the angular velocity in the global frame. More...
 
const vectorv () const
 Return the current velocity. More...
 
vector momentArm () const
 
bool report () const
 Return the report Switch. More...
 
void newTime ()
 Store the motion state at the beginning of the time-step. More...
 
pointcentreOfRotation ()
 Return non-const access to the centre of rotation. More...
 
void addRestraints (const dictionary &dict)
 Add restraints to the motion, public to allow external. More...
 
void addConstraints (const dictionary &dict)
 Add restraints to the motion, public to allow external. More...
 
void update (bool firstIter, const vector &fGlobal, const vector &tauGlobal, scalar deltaT, scalar deltaT0)
 Symplectic integration of velocities, orientation and position. More...
 
void status () const
 Report the status of the motion. More...
 
point velocity (const point &pt) const
 Return the velocity of a position. More...
 
point transform (const point &initialPoints) const
 Transform the given initial state point by the current motion. More...
 
tmp< pointFieldtransform (const pointField &initialPoints) const
 Transform the given initial state pointField by the current. More...
 
tmp< pointFieldtransform (const pointField &initialPoints, const scalarField &scale) const
 Transform the given initial state pointField by the current. More...
 
void write (Ostream &) const
 Write. More...
 
bool read (const dictionary &dict)
 Read coefficients dictionary and update system parameters,. More...
 

Private Member Functions

tensor rotationTensorX (scalar deltaT) const
 Calculate the rotation tensor around the body reference. More...
 
tensor rotationTensorY (scalar deltaT) const
 Calculate the rotation tensor around the body reference. More...
 
tensor rotationTensorZ (scalar deltaT) const
 Calculate the rotation tensor around the body reference. More...
 
Tuple2< tensor, vectorrotate (const tensor &Q0, const vector &pi, const scalar deltaT) const
 Apply rotation tensors to Q0 for the given torque (pi) and deltaT. More...
 
void applyRestraints ()
 Apply the restraints to the object. More...
 
void updateAcceleration (const vector &fGlobal, const vector &tauGlobal)
 Update and relax accelerations from the force and torque. More...
 
const PtrList< sixDoFRigidBodyMotionRestraint > & restraints () const
 Return the restraints. More...
 
const PtrList< sixDoFRigidBodyMotionConstraint > & constraints () const
 Return the constraints. More...
 
const pointinitialCentreOfRotation () const
 Return the initial centre of rotation. More...
 
const tensorinitialQ () const
 Return the initial orientation. More...
 
const tensorQ () const
 Return the orientation. More...
 
const vectora () const
 Return the current acceleration. More...
 
const vectorpi () const
 Return the current angular momentum. More...
 
const vectortau () const
 Return the current torque. More...
 
pointinitialCentreOfRotation ()
 Return the centre of rotation. More...
 
tensorinitialQ ()
 Return initial orientation. More...
 
tensorQ ()
 Return non-const access to the orientation. More...
 
vectorv ()
 Return non-const access to vector. More...
 
vectora ()
 Return non-const access to acceleration. More...
 
vectorpi ()
 Return non-const access to angular momentum. More...
 
vectortau ()
 Return non-const access to torque. More...
 

Private Attributes

sixDoFRigidBodyMotionState motionState_
 Motion state data object. More...
 
sixDoFRigidBodyMotionState motionState0_
 Motion state data object for previous time-step. More...
 
PtrList< sixDoFRigidBodyMotionRestraintrestraints_
 Motion restraints. More...
 
PtrList< sixDoFRigidBodyMotionConstraintconstraints_
 Motion constaints. More...
 
tensor tConstraints_
 Translational constraint tensor. More...
 
tensor rConstraints_
 Rotational constraint tensor. More...
 
point initialCentreOfMass_
 Centre of mass of initial state. More...
 
point initialCentreOfRotation_
 Centre of rotation of initial state. More...
 
tensor initialQ_
 Orientation of initial state. More...
 
scalar mass_
 Mass of the body. More...
 
diagTensor momentOfInertia_
 Moment of inertia of the body in reference configuration. More...
 
scalar aRelax_
 Acceleration relaxation coefficient. More...
 
scalar aDamp_
 Acceleration damping coefficient (for steady-state simulations) More...
 
Switch report_
 Switch to turn reporting of motion data on and off. More...
 
autoPtr< sixDoFSolversolver_
 Motion solver. More...
 

Friends

class sixDoFSolver
 

Detailed Description

Six degree of freedom motion for a rigid body.

Angular momentum stored in body fixed reference frame. Reference orientation of the body (where Q = I) must align with the cartesian axes such that the Inertia tensor is in principle component form. Can add restraints (e.g. a spring) and constraints (e.g. motion may only be on a plane).

The time-integrator for the motion is run-time selectable with options for symplectic (explicit), Crank-Nicolson and Newmark schemes.

Source files

Definition at line 66 of file sixDoFRigidBodyMotion.H.

Constructor & Destructor Documentation

◆ sixDoFRigidBodyMotion() [1/3]

Construct null.

Definition at line 73 of file sixDoFRigidBodyMotion.C.

◆ sixDoFRigidBodyMotion() [2/3]

sixDoFRigidBodyMotion ( const dictionary dict,
const dictionary stateDict 
)

Construct from constant and state dictionaries.

Definition at line 94 of file sixDoFRigidBodyMotion.C.

References Foam::diag(), dict, dictionary::found(), Foam::I, Foam::magSqr(), R, and Foam::sqr().

Here is the call graph for this function:

◆ sixDoFRigidBodyMotion() [3/3]

Construct as copy.

Definition at line 156 of file sixDoFRigidBodyMotion.C.

◆ ~sixDoFRigidBodyMotion()

Destructor.

Definition at line 179 of file sixDoFRigidBodyMotion.C.

Member Function Documentation

◆ rotationTensorX()

Foam::tensor rotationTensorX ( scalar  deltaT) const
inlineprivate

Calculate the rotation tensor around the body reference.

frame x-axis by the given angle

Definition at line 29 of file sixDoFRigidBodyMotionI.H.

References Foam::cos(), phi, and Foam::sin().

Here is the call graph for this function:

◆ rotationTensorY()

Foam::tensor rotationTensorY ( scalar  deltaT) const
inlineprivate

Calculate the rotation tensor around the body reference.

frame y-axis by the given angle

Definition at line 43 of file sixDoFRigidBodyMotionI.H.

References Foam::cos(), phi, and Foam::sin().

Here is the call graph for this function:

◆ rotationTensorZ()

Foam::tensor rotationTensorZ ( scalar  deltaT) const
inlineprivate

Calculate the rotation tensor around the body reference.

frame z-axis by the given angle

Definition at line 57 of file sixDoFRigidBodyMotionI.H.

References Foam::cos(), phi, and Foam::sin().

Here is the call graph for this function:

◆ rotate()

Foam::Tuple2< Foam::tensor, Foam::vector > rotate ( const tensor Q0,
const vector pi,
const scalar  deltaT 
) const
inlineprivate

Apply rotation tensors to Q0 for the given torque (pi) and deltaT.

and return the rotated Q and pi as a tuple

Definition at line 72 of file sixDoFRigidBodyMotionI.H.

References Tuple2::first(), Foam::constant::mathematical::pi(), R, and Tuple2::second().

Here is the call graph for this function:

◆ applyRestraints()

void applyRestraints ( )
private

◆ updateAcceleration()

void updateAcceleration ( const vector fGlobal,
const vector tauGlobal 
)
private

Update and relax accelerations from the force and torque.

Definition at line 270 of file sixDoFRigidBodyMotion.C.

◆ restraints()

const Foam::PtrList< Foam::sixDoFRigidBodyMotionRestraint > & restraints ( ) const
inlineprivate

Return the restraints.

Definition at line 107 of file sixDoFRigidBodyMotionI.H.

References sixDoFRigidBodyMotion::restraints_.

◆ constraints()

const Foam::PtrList< Foam::sixDoFRigidBodyMotionConstraint > & constraints ( ) const
inlineprivate

Return the constraints.

Definition at line 114 of file sixDoFRigidBodyMotionI.H.

◆ initialCentreOfRotation() [1/2]

Foam::point & initialCentreOfRotation ( ) const
inlineprivate

Return the initial centre of rotation.

Definition at line 121 of file sixDoFRigidBodyMotionI.H.

◆ initialQ() [1/2]

Foam::tensor & initialQ ( ) const
inlineprivate

Return the initial orientation.

Definition at line 128 of file sixDoFRigidBodyMotionI.H.

◆ Q() [1/2]

Foam::tensor & Q ( ) const
inlineprivate

Return the orientation.

Definition at line 134 of file sixDoFRigidBodyMotionI.H.

Referenced by sixDoFRigidBodyMotion::applyRestraints().

Here is the caller graph for this function:

◆ a() [1/2]

Foam::vector & a ( ) const
inlineprivate

Return the current acceleration.

Definition at line 146 of file sixDoFRigidBodyMotionI.H.

Referenced by sixDoFRigidBodyMotion::applyRestraints().

Here is the caller graph for this function:

◆ pi() [1/2]

Foam::vector & pi ( ) const
inlineprivate

Return the current angular momentum.

Definition at line 152 of file sixDoFRigidBodyMotionI.H.

◆ tau() [1/2]

Foam::vector & tau ( ) const
inlineprivate

Return the current torque.

Definition at line 158 of file sixDoFRigidBodyMotionI.H.

Referenced by sixDoFRigidBodyMotion::applyRestraints().

Here is the caller graph for this function:

◆ initialCentreOfRotation() [2/2]

point& initialCentreOfRotation ( )
inlineprivate

Return the centre of rotation.

◆ initialQ() [2/2]

tensor& initialQ ( )
inlineprivate

Return initial orientation.

◆ Q() [2/2]

tensor& Q ( )
inlineprivate

Return non-const access to the orientation.

◆ v() [1/2]

Foam::vector & v ( )
inlineprivate

Return non-const access to vector.

Definition at line 140 of file sixDoFRigidBodyMotionI.H.

Referenced by linearDamper::restrain().

Here is the caller graph for this function:

◆ a() [2/2]

vector& a ( )
inlineprivate

Return non-const access to acceleration.

◆ pi() [2/2]

vector& pi ( )
inlineprivate

Return non-const access to angular momentum.

◆ tau() [2/2]

vector& tau ( )
inlineprivate

Return non-const access to torque.

◆ mass()

Foam::scalar mass ( ) const
inline

Return the mass.

Definition at line 208 of file sixDoFRigidBodyMotionI.H.

Referenced by uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs(), and sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs().

Here is the caller graph for this function:

◆ momentOfInertia()

const Foam::diagTensor & momentOfInertia ( ) const
inline

Return the inertia tensor.

Definition at line 215 of file sixDoFRigidBodyMotionI.H.

◆ state()

const Foam::sixDoFRigidBodyMotionState & state ( ) const
inline

Return the motion state.

Definition at line 222 of file sixDoFRigidBodyMotionI.H.

◆ centreOfRotation() [1/2]

Foam::point & centreOfRotation ( ) const
inline

◆ initialCentreOfMass()

const Foam::point & initialCentreOfMass ( ) const
inline

Return the initial centre of mass.

Definition at line 235 of file sixDoFRigidBodyMotionI.H.

◆ centreOfMass()

Foam::point centreOfMass ( ) const
inline

Return the current centre of mass.

Definition at line 241 of file sixDoFRigidBodyMotionI.H.

References Foam::transform().

Here is the call graph for this function:

◆ orientation()

const Foam::tensor & orientation ( ) const
inline

Return the orientation tensor, Q.

globalVector = Q & bodyLocalVector bodyLocalVector = Q.T() & globalVector

Definition at line 254 of file sixDoFRigidBodyMotionI.H.

Referenced by sphericalAngularSpring::restrain(), linearAxialAngularSpring::restrain(), and tabulatedAxialAngularSpring::restrain().

Here is the caller graph for this function:

◆ omega()

Foam::vector omega ( ) const
inline

Return the angular velocity in the global frame.

Definition at line 260 of file sixDoFRigidBodyMotionI.H.

References Foam::inv(), and Foam::constant::mathematical::pi().

Referenced by sphericalAngularDamper::restrain(), sphericalAngularSpring::restrain(), linearAxialAngularSpring::restrain(), and tabulatedAxialAngularSpring::restrain().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ v() [2/2]

const vector& v ( ) const
inline

Return the current velocity.

◆ momentArm()

Foam::vector momentArm ( ) const
inline

Definition at line 247 of file sixDoFRigidBodyMotionI.H.

Referenced by sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs().

Here is the caller graph for this function:

◆ report()

bool report ( ) const
inline

◆ newTime()

void newTime ( )
inline

Store the motion state at the beginning of the time-step.

Definition at line 272 of file sixDoFRigidBodyMotionI.H.

Referenced by uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs(), and sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs().

Here is the caller graph for this function:

◆ centreOfRotation() [2/2]

point& centreOfRotation ( )
inline

Return non-const access to the centre of rotation.

◆ addRestraints()

void addRestraints ( const dictionary dict)

Add restraints to the motion, public to allow external.

addition of restraints after construction

Definition at line 186 of file sixDoFRigidBodyMotion.C.

References dict, forAllConstIter(), dictionary::found(), sixDoFRigidBodyMotionRestraint::New(), and dictionary::subDict().

Referenced by sixDoFRigidBodyMotion::read().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ addConstraints()

void addConstraints ( const dictionary dict)

Add restraints to the motion, public to allow external.

addition of restraints after construction

Definition at line 220 of file sixDoFRigidBodyMotion.C.

References pointConstraint::constraintTransformation(), dict, Foam::endl(), forAllConstIter(), dictionary::found(), Foam::Info, sixDoFRigidBodyMotionConstraint::New(), Foam::nl, and dictionary::subDict().

Referenced by sixDoFRigidBodyMotion::read().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update()

void update ( bool  firstIter,
const vector fGlobal,
const vector tauGlobal,
scalar  deltaT,
scalar  deltaT0 
)

Symplectic integration of velocities, orientation and position.

Changes to Crank-Nicolson integration for subsequent iterations.

Definition at line 298 of file sixDoFRigidBodyMotion.C.

References UPstream::master(), and Pstream::scatter().

Referenced by uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs(), and sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ status()

void status ( ) const

Report the status of the motion.

Definition at line 320 of file sixDoFRigidBodyMotion.C.

References Foam::endl(), Foam::Info, and Foam::nl.

Here is the call graph for this function:

◆ velocity()

Foam::point velocity ( const point pt) const
inline

Return the velocity of a position.

Definition at line 285 of file sixDoFRigidBodyMotionI.H.

Referenced by linearSpring::restrain().

Here is the caller graph for this function:

◆ transform() [1/3]

Foam::point transform ( const point initialPoints) const
inline

Transform the given initial state point by the current motion.

state

Definition at line 294 of file sixDoFRigidBodyMotionI.H.

Referenced by linearSpring::restrain(), uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs(), and sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs().

Here is the caller graph for this function:

◆ transform() [2/3]

Foam::tmp< Foam::pointField > transform ( const pointField initialPoints) const

Transform the given initial state pointField by the current.

motion state

Definition at line 333 of file sixDoFRigidBodyMotion.C.

◆ transform() [3/3]

Foam::tmp< Foam::pointField > transform ( const pointField initialPoints,
const scalarField scale 
) const

Transform the given initial state pointField by the current.

motion state scaled by the given scale

Definition at line 346 of file sixDoFRigidBodyMotion.C.

References forAll, septernion::I, points, s(), Foam::slerp(), Foam::T(), Foam::transform(), and septernion::transform().

Here is the call graph for this function:

◆ write()

void write ( Ostream os) const

Write.

Definition at line 49 of file sixDoFRigidBodyMotionIO.C.

References token::BEGIN_BLOCK, Foam::decrIndent(), token::END_BLOCK, token::END_STATEMENT, Foam::endl(), forAll, Foam::incrIndent(), Foam::indent(), IOstream::name(), Foam::nl, and Ostream::writeKeyword().

Referenced by sixDoFRigidBodyDisplacementPointPatchVectorField::write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read()

bool read ( const dictionary dict)

Friends And Related Function Documentation

◆ sixDoFSolver

friend class sixDoFSolver
friend

Definition at line 68 of file sixDoFRigidBodyMotion.H.

Field Documentation

◆ motionState_

sixDoFRigidBodyMotionState motionState_
private

Motion state data object.

Definition at line 73 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFSolver::centreOfRotation().

◆ motionState0_

sixDoFRigidBodyMotionState motionState0_
private

Motion state data object for previous time-step.

Definition at line 76 of file sixDoFRigidBodyMotion.H.

◆ restraints_

◆ constraints_

Motion constaints.

Definition at line 82 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFRigidBodyMotion::read().

◆ tConstraints_

tensor tConstraints_
private

Translational constraint tensor.

Definition at line 85 of file sixDoFRigidBodyMotion.H.

◆ rConstraints_

tensor rConstraints_
private

Rotational constraint tensor.

Definition at line 88 of file sixDoFRigidBodyMotion.H.

◆ initialCentreOfMass_

point initialCentreOfMass_
private

Centre of mass of initial state.

Definition at line 91 of file sixDoFRigidBodyMotion.H.

◆ initialCentreOfRotation_

point initialCentreOfRotation_
private

Centre of rotation of initial state.

Definition at line 94 of file sixDoFRigidBodyMotion.H.

◆ initialQ_

tensor initialQ_
private

Orientation of initial state.

Definition at line 97 of file sixDoFRigidBodyMotion.H.

◆ mass_

scalar mass_
private

Mass of the body.

Definition at line 100 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFRigidBodyMotion::applyRestraints(), and sixDoFRigidBodyMotion::read().

◆ momentOfInertia_

diagTensor momentOfInertia_
private

Moment of inertia of the body in reference configuration.

(Q = I)

Definition at line 104 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFRigidBodyMotion::read().

◆ aRelax_

scalar aRelax_
private

Acceleration relaxation coefficient.

Definition at line 107 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFRigidBodyMotion::read().

◆ aDamp_

scalar aDamp_
private

Acceleration damping coefficient (for steady-state simulations)

Definition at line 110 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFRigidBodyMotion::read().

◆ report_

Switch report_
private

Switch to turn reporting of motion data on and off.

Definition at line 113 of file sixDoFRigidBodyMotion.H.

Referenced by sixDoFRigidBodyMotion::applyRestraints(), and sixDoFRigidBodyMotion::read().

◆ solver_

autoPtr<sixDoFSolver> solver_
private

Motion solver.

Definition at line 116 of file sixDoFRigidBodyMotion.H.


The documentation for this class was generated from the following files: