diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C index 4e218fc0d316944711bffbe75cf7cdb2663fdec7..7f6c58b150b31f207fed247026f48927e62128aa 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C @@ -175,6 +175,7 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion() momentOfInertia_(diagTensor::one*VSMALL), mass_(VSMALL), aRelax_(1.0), + aDamp_(1.0), report_(false) {} @@ -192,6 +193,7 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion const tensor& initialQ, const diagTensor& momentOfInertia, scalar aRelax, + scalar aDamp, bool report ) : @@ -215,6 +217,7 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion momentOfInertia_(momentOfInertia), mass_(mass), aRelax_(aRelax), + aDamp_(aDamp), report_(report) {} @@ -239,6 +242,7 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion(const dictionary& dict) momentOfInertia_(dict.lookup("momentOfInertia")), mass_(readScalar(dict.lookup("mass"))), aRelax_(dict.lookupOrDefault<scalar>("accelerationRelaxation", 1.0)), + aDamp_(dict.lookupOrDefault<scalar>("accelerationDamping", 1.0)), report_(dict.lookupOrDefault<Switch>("report", false)) { addRestraints(dict); @@ -264,6 +268,7 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion momentOfInertia_(sDoFRBM.momentOfInertia_), mass_(sDoFRBM.mass_), aRelax_(sDoFRBM.aRelax_), + aDamp_(sDoFRBM.aDamp_), report_(sDoFRBM.report_) {} @@ -375,8 +380,8 @@ void Foam::sixDoFRigidBodyMotion::updatePosition if (Pstream::master()) { - v() = v0() + 0.5*deltaT0*a(); - pi() = pi0() + 0.5*deltaT0*tau(); + v() = v0() + aDamp_*0.5*deltaT0*a(); + pi() = pi0() + aDamp_*0.5*deltaT0*tau(); // Leapfrog move part centreOfMass() = centreOfMass0() + deltaT*v(); @@ -426,8 +431,8 @@ void Foam::sixDoFRigidBodyMotion::updateAcceleration applyConstraints(deltaT); // Correct velocities - v() += 0.5*deltaT*a(); - pi() += 0.5*deltaT*tau(); + v() += aDamp_*0.5*deltaT*a(); + pi() += aDamp_*0.5*deltaT*tau(); if (report_) { @@ -446,8 +451,8 @@ void Foam::sixDoFRigidBodyMotion::updateVelocity(scalar deltaT) if (Pstream::master()) { - v() += 0.5*deltaT*a(); - pi() += 0.5*deltaT*tau(); + v() += aDamp_*0.5*deltaT*a(); + pi() += aDamp_*0.5*deltaT*tau(); if (report_) { diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H index dcdc9f441bbd26f8d07ff9515cfb78aa10c5af2f..2a9d6dcfa19fdc4ae739edae0dcef0d32dae419e 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H @@ -122,6 +122,9 @@ class sixDoFRigidBodyMotion //- Acceleration relaxation coefficient scalar aRelax_; + //- Acceleration damping coefficient (for steady-state simulations) + scalar aDamp_; + //- Switch to turn reporting of motion data on and off Switch report_; @@ -264,6 +267,7 @@ public: const tensor& initialQ, const diagTensor& momentOfInertia, scalar aRelax = 1.0, + scalar aDamp = 1.0, bool report = false );