From 160e7ea6dda5d26fe45b3b79959431fad19faf48 Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Tue, 17 Dec 2013 14:58:34 +0000
Subject: [PATCH] sixDoFRigidBodyMotion: support re-reading of motion
 coefficients

---
 .../motionSolver/motionSolver/motionSolver.C   | 15 +++++++++++++++
 .../motionSolver/motionSolver/motionSolver.H   |  3 +++
 .../sixDoFRigidBodyMotion.C                    | 18 ++++++++++++++++++
 .../sixDoFRigidBodyMotion.H                    |  5 +++++
 .../sixDoFRigidBodyMotionSolver.C              | 15 +++++++++++++++
 .../sixDoFRigidBodyMotionSolver.H              |  3 +++
 6 files changed, 59 insertions(+)

diff --git a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.C b/src/dynamicMesh/motionSolver/motionSolver/motionSolver.C
index 01f37cbf622..5613ac6b410 100644
--- a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.C
+++ b/src/dynamicMesh/motionSolver/motionSolver/motionSolver.C
@@ -190,4 +190,19 @@ bool Foam::motionSolver::writeObject
 }
 
 
+bool Foam::motionSolver::read()
+{
+    if (regIOobject::read())
+    {
+        coeffDict_ = subDict(type() + "Coeffs");
+
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
 // ************************************************************************* //
diff --git a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.H b/src/dynamicMesh/motionSolver/motionSolver/motionSolver.H
index 7a53d4e81d7..651c0d9d183 100644
--- a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.H
+++ b/src/dynamicMesh/motionSolver/motionSolver/motionSolver.H
@@ -156,6 +156,9 @@ public:
             IOstream::versionNumber ver,
             IOstream::compressionType cmp
         ) const;
+
+        //- Read dynamicMeshDict dictionary
+        virtual bool read();
 };
 
 
diff --git a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C
index 99d3728c06e..db88b739620 100644
--- a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C
+++ b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C
@@ -493,4 +493,22 @@ Foam::tmp<Foam::pointField> Foam::sixDoFRigidBodyMotion::scaledPosition
 }
 
 
+bool Foam::sixDoFRigidBodyMotion::read(const dictionary& dict)
+{
+    dict.lookup("momentOfInertia") >> momentOfInertia_;
+    dict.lookup("mass") >> mass_;
+    aRelax_ = dict.lookupOrDefault<scalar>("accelerationRelaxation", 1.0);
+    aDamp_ = dict.lookupOrDefault<scalar>("accelerationDamping", 1.0);
+    report_ = dict.lookupOrDefault<Switch>("report", false);
+
+    restraints_.clear();
+    addRestraints(dict);
+
+    constraints_.clear();
+    addConstraints(dict);
+
+    return true;
+}
+
+
 // ************************************************************************* //
diff --git a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H
index 0e4ab39da26..a2d4c3236ff 100644
--- a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H
+++ b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H
@@ -404,6 +404,11 @@ public:
         void write(Ostream&) const;
 
 
+        //- Read coefficients dictionary and update system parameters,
+        //  constraints and restraints but not the current state
+        bool read(const dictionary& dict);
+
+
     // IOstream Operators
 
         friend Istream& operator>>(Istream&, sixDoFRigidBodyMotion&);
diff --git a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.C b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.C
index 2e208340428..d19ac3fb158 100644
--- a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.C
+++ b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.C
@@ -250,4 +250,19 @@ bool Foam::sixDoFRigidBodyMotionSolver::writeObject
 }
 
 
+bool Foam::sixDoFRigidBodyMotionSolver::read()
+{
+    if (displacementMotionSolver::read())
+    {
+        motion_.read(coeffDict());
+
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
 // ************************************************************************* //
diff --git a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.H b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.H
index 410745d96cd..4f4e1ca31c5 100644
--- a/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.H
+++ b/src/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.H
@@ -133,6 +133,9 @@ public:
             IOstream::versionNumber ver,
             IOstream::compressionType cmp
         ) const;
+
+        //- Read dynamicMeshDict dictionary
+        virtual bool read();
 };
 
 
-- 
GitLab