From 7c54adb178dfb562923731226fa85287ac770999 Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Fri, 6 Dec 2013 15:41:17 +0000
Subject: [PATCH] sixDoFRigidBodyMotion: support acceleration relaxation and
 damping

---
 .../sixDoFRigidBodyMotion.C                     | 17 +++++++++++------
 .../sixDoFRigidBodyMotion.H                     |  4 ++++
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C
index 4e218fc0d31..7f6c58b150b 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 dcdc9f441bb..2a9d6dcfa19 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
         );
 
-- 
GitLab