diff --git a/applications/test/rigidBodyDynamics/spring/spring.C b/applications/test/rigidBodyDynamics/spring/spring.C index e6f36524c6..1388fe1010 100644 --- a/applications/test/rigidBodyDynamics/spring/spring.C +++ b/applications/test/rigidBodyDynamics/spring/spring.C @@ -71,13 +71,7 @@ int main(int argc, char *argv[]) for (label i=0; i& fx ) { + deltaT_ = deltaT; + if (Pstream::master()) { - solver_->solve(deltaT, deltaT0, tau, fx); + solver_->solve(tau, fx); if (report_) { diff --git a/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotion.H b/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotion.H index 632ec8b46e..398528a3b6 100644 --- a/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotion.H +++ b/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotion.H @@ -79,6 +79,12 @@ class rigidBodyMotion //- Motion state data object for previous time-step rigidBodyModelState motionState0_; + //- The current time-step + scalar deltaT_; + + //- The previous time-step + scalar deltaT0_; + //- Acceleration relaxation coefficient scalar aRelax_; @@ -140,11 +146,11 @@ public: // Update state - //- Integration of velocities, orientation and position. - void update + //- Integrate velocities, orientation and position + // for the given time-step + void solve ( scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ); diff --git a/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotionI.H b/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotionI.H index 9052f9386d..e9a430320d 100644 --- a/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotionI.H +++ b/src/rigidBodyDynamics/rigidBodyMotion/rigidBodyMotionI.H @@ -41,8 +41,10 @@ Foam::RBD::rigidBodyMotion::state() const inline void Foam::RBD::rigidBodyMotion::newTime() { motionState0_ = motionState_; + deltaT0_ = deltaT_; } + /* inline Foam::point Foam::RBD::rigidBodyMotion::transform ( diff --git a/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.C b/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.C index 694e1f003c..895e9b9e61 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.C +++ b/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.C @@ -65,8 +65,6 @@ Foam::RBD::rigidBodySolvers::CrankNicolson::~CrankNicolson() void Foam::RBD::rigidBodySolvers::CrankNicolson::solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ) @@ -79,10 +77,10 @@ void Foam::RBD::rigidBodySolvers::CrankNicolson::solve model_.forwardDynamics(state(), tau, rfx); // Correct velocity - qDot() = qDot0() + aDamp()*deltaT*(aoc_*qDdot() + (1 - aoc_)*qDdot0()); + qDot() = qDot0() + aDamp()*deltaT()*(aoc_*qDdot() + (1 - aoc_)*qDdot0()); // Correct position - q() = q0() + deltaT*(voc_*qDot() + (1 - voc_)*qDot0()); + q() = q0() + deltaT()*(voc_*qDot() + (1 - voc_)*qDot0()); // Update the body-state model_.forwardDynamicsCorrection(state()); diff --git a/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.H b/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.H index 048e6f967c..0aa3a387ab 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.H +++ b/src/rigidBodyDynamics/rigidBodySolvers/CrankNicolson/CrankNicolson.H @@ -104,11 +104,9 @@ public: // Member Functions - //- Integrate the rigid-body joint-state one time-step + //- Integrate the rigid-body motion for one time-step virtual void solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ); diff --git a/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.C b/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.C index 8d8b8c767b..72e2eecea4 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.C +++ b/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.C @@ -72,8 +72,6 @@ Foam::RBD::rigidBodySolvers::Newmark::~Newmark() void Foam::RBD::rigidBodySolvers::Newmark::solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ) @@ -86,12 +84,13 @@ void Foam::RBD::rigidBodySolvers::Newmark::solve model_.forwardDynamics(state(), tau, rfx); // Correct velocity - qDot() = qDot0() + aDamp()*deltaT*(gamma_*qDdot() + (1 - gamma_)*qDdot0()); + qDot() = qDot0() + + aDamp()*deltaT()*(gamma_*qDdot() + (1 - gamma_)*qDdot0()); // Correct position q() = q0() - + deltaT*qDot0() - + sqr(deltaT)*beta_*qDdot() + sqr(deltaT)*(0.5 - beta_)*qDdot0(); + + deltaT()*qDot0() + + sqr(deltaT())*beta_*qDdot() + sqr(deltaT())*(0.5 - beta_)*qDdot0(); // Update the body-state model_.forwardDynamicsCorrection(state()); diff --git a/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.H b/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.H index 79adb8fc9f..b6745e2732 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.H +++ b/src/rigidBodyDynamics/rigidBodySolvers/Newmark/Newmark.H @@ -102,11 +102,9 @@ public: // Member Functions - //- Integrate the rigid-body joint-state one time-step + //- Integrate the rigid-body motion for one time-step virtual void solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ); diff --git a/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.H b/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.H index c4137d4b9a..a1959991b1 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.H +++ b/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.H @@ -62,9 +62,14 @@ protected: //- Return the motion state inline rigidBodyModelState& state(); - //- Return the motion state + //- Return the previous motion state inline const rigidBodyModelState& state0() const; + //- Return the current time-step + inline scalar deltaT() const; + + //- Return the previous time-step + inline scalar deltaT0() const; //- Return the current joint position and orientation inline scalarField& q(); @@ -138,11 +143,9 @@ public: // Member Functions - //- Integrate the rigid-body joint-state one time-step + //- Integrate the rigid-body motion for one time-step virtual void solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ) = 0; diff --git a/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolverI.H b/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolverI.H index b3d8043fa2..d1ddbd6880 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolverI.H +++ b/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolverI.H @@ -38,6 +38,18 @@ Foam::RBD::rigidBodySolver::state0() const } +inline Foam::scalar Foam::RBD::rigidBodySolver::deltaT() const +{ + return model_.deltaT_; +} + + +inline Foam::scalar Foam::RBD::rigidBodySolver::deltaT0() const +{ + return model_.deltaT0_; +} + + inline Foam::scalarField& Foam::RBD::rigidBodySolver::q() { return state().q(); diff --git a/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.C b/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.C index b05c5a567b..76807a32b2 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.C +++ b/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.C @@ -63,8 +63,6 @@ Foam::RBD::rigidBodySolvers::symplectic::~symplectic() void Foam::RBD::rigidBodySolvers::symplectic::solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx ) @@ -72,8 +70,8 @@ void Foam::RBD::rigidBodySolvers::symplectic::solve // First simplectic step: // Half-step for linear and angular velocities // Update position and orientation - qDot() = qDot0() + aDamp()*0.5*deltaT0*qDdot(); - q() = q0() + deltaT*qDot(); + qDot() = qDot0() + aDamp()*0.5*deltaT0()*qDdot(); + q() = q0() + deltaT()*qDot(); // Update the body-state prior to the evaluation of the restraints model_.forwardDynamicsCorrection(state()); @@ -88,7 +86,7 @@ void Foam::RBD::rigidBodySolvers::symplectic::solve // Second simplectic step: // Complete update of linear and angular velocities - qDot() += aDamp()*0.5*deltaT*qDdot(); + qDot() += aDamp()*0.5*deltaT()*qDdot(); } diff --git a/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.H b/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.H index e15a73b59a..ec3f91d048 100644 --- a/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.H +++ b/src/rigidBodyDynamics/rigidBodySolvers/symplectic/symplectic.H @@ -101,11 +101,9 @@ public: // Member Functions - //- Integrate the rigid-body joint-state one time-step + //- Integrate the rigid-body motion for one time-step virtual void solve ( - scalar deltaT, - scalar deltaT0, const scalarField& tau, const Field& fx );