Skip to content
Snippets Groups Projects
Commit 7c54adb1 authored by Henry's avatar Henry
Browse files

sixDoFRigidBodyMotion: support acceleration relaxation and damping

parent 89053fe3
Branches
Tags
No related merge requests found
......@@ -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_)
{
......
......@@ -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
);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment