From 75f4976e86369eaad4676a56a2e03453f627e460 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Thu, 16 Apr 2009 13:07:38 +0000
Subject: [PATCH] The class 'Configuration' is now called 'RigidBodyMotion',
 and can be parametrized by the space dimension

[[Imported from SVN: r4003]]
---
 dirneucoupling.cc        | 12 ++++------
 rod3d.cc                 |  4 ++--
 src/averageinterface.hh  |  4 ++--
 src/rigidbodymotion.hh   | 16 +++++++------
 src/rodassembler.cc      | 46 ++++++++++++++++++------------------
 src/rodassembler.hh      | 20 ++++++++--------
 src/roddifference.hh     |  4 ++--
 src/rodlocalstiffness.hh | 22 +++++++++---------
 src/rodsolver.cc         |  2 +-
 src/rodsolver.hh         |  8 +++----
 src/rodwriter.hh         |  4 ++--
 test/fdcheck.hh          | 50 +++++++++++++++++++++-------------------
 12 files changed, 97 insertions(+), 95 deletions(-)

diff --git a/dirneucoupling.cc b/dirneucoupling.cc
index aab88cb2..3c7f63ce 100644
--- a/dirneucoupling.cc
+++ b/dirneucoupling.cc
@@ -29,7 +29,7 @@
 
 #include "src/quaternion.hh"
 #include "src/rodassembler.hh"
-#include "src/configuration.hh"
+#include "src/rigidbodymotion.hh"
 #include "src/averageinterface.hh"
 #include "src/rodsolver.hh"
 #include "src/roddifference.hh"
@@ -45,7 +45,7 @@ using std::vector;
 // Some types that I need
 //typedef BCRSMatrix<FieldMatrix<double, dim, dim> > OperatorType;
 //typedef BlockVector<FieldVector<double, dim> >     VectorType;
-typedef vector<Configuration>                      RodSolutionType;
+typedef vector<RigidBodyMotion<dim> >              RodSolutionType;
 typedef BlockVector<FieldVector<double, 6> >       RodDifferenceType;
 
 
@@ -89,8 +89,6 @@ int main (int argc, char *argv[]) try
     // Some types that I need
     typedef BCRSMatrix<FieldMatrix<double, dim, dim> >   MatrixType;
     typedef BlockVector<FieldVector<double, dim> >       VectorType;
-    typedef std::vector<Configuration>                   RodSolutionType;
-    typedef BlockVector<FieldVector<double, 6> >         RodDifferenceType;
 
     // parse data file
     ConfigParser parameterSet;
@@ -357,8 +355,8 @@ int main (int argc, char *argv[]) try
     // /////////////////////////////////////////////////////
 
     // Init interface value
-    Configuration referenceInterface = rodX[0];
-    Configuration lambda = referenceInterface;
+    RigidBodyMotion<3> referenceInterface = rodX[0];
+    RigidBodyMotion<3> lambda = referenceInterface;
     FieldVector<double,3> lambdaForce(0);
     FieldVector<double,3> lambdaTorque(0);
 
@@ -432,7 +430,7 @@ int main (int argc, char *argv[]) try
         //   Extract new interface position and orientation
         // ///////////////////////////////////////////////////////////
 
-        Configuration averageInterface;
+        RigidBodyMotion<3> averageInterface;
         computeAverageInterface(interfaceBoundary[toplevel], x3d, averageInterface);
 
         //averageInterface.r[0] = averageInterface.r[1] = 0;
diff --git a/rod3d.cc b/rod3d.cc
index b5eaa1aa..ab0205bf 100644
--- a/rod3d.cc
+++ b/rod3d.cc
@@ -11,7 +11,7 @@
 #include <dune-solvers/solvers/iterativesolver.hh>
 #include <dune-solvers/norms/energynorm.hh>
 
-#include "src/configuration.hh"
+#include "src/rigidbodymotion.hh"
 #include "src/roddifference.hh"
 #include "src/rodwriter.hh"
 #include "src/rotation.hh"
@@ -36,7 +36,7 @@ double computeEnergyNormSquared(const BlockVector<FieldVector<double,6> >& x,
 
 int main (int argc, char *argv[]) try
 {
-    typedef std::vector<Configuration> SolutionType;
+    typedef std::vector<RigidBodyMotion<3> > SolutionType;
 
     // parse data file
     ConfigParser parameterSet;
diff --git a/src/averageinterface.hh b/src/averageinterface.hh
index 25442149..1ee094f0 100644
--- a/src/averageinterface.hh
+++ b/src/averageinterface.hh
@@ -409,7 +409,7 @@ template <class GridType>
 void computeAveragePressure(const Dune::FieldVector<double,GridType::dimension>& resultantForce,
                             const Dune::FieldVector<double,GridType::dimension>& resultantTorque,
                             const BoundaryPatch<GridType>& interface,
-                            const Configuration& crossSection,
+                            const RigidBodyMotion<3>& crossSection,
                             Dune::BlockVector<Dune::FieldVector<double, GridType::dimension> >& pressure)
 {
     const GridType& grid = interface.getGrid();
@@ -640,7 +640,7 @@ void computeAveragePressure(const Dune::FieldVector<double,GridType::dimension>&
 template <class GridType>
 void computeAverageInterface(const BoundaryPatch<GridType>& interface,
                              const Dune::BlockVector<Dune::FieldVector<double,GridType::dimension> > deformation,
-                             Configuration& average)
+                             RigidBodyMotion<3>& average)
 {
     using namespace Dune;
 
diff --git a/src/rigidbodymotion.hh b/src/rigidbodymotion.hh
index 2f7081ce..04ea26e9 100644
--- a/src/rigidbodymotion.hh
+++ b/src/rigidbodymotion.hh
@@ -1,22 +1,24 @@
-#ifndef CONFIGURATION_HH
-#define CONFIGURATION_HH
+#ifndef RIGID_BODY_MOTION_HH
+#define RIGID_BODY_MOTION_HH
 
 #include <dune/common/fvector.hh>
 #include "rotation.hh"
 
-/** \brief Configuration of a nonlinear rod in 3d */
-struct Configuration 
+/** \brief A rigid-body motion in, R^d, i.e., a member of SE(d) */
+template <int dim, class ctype=double>
+struct RigidBodyMotion
 {
     // Translational part
-    Dune::FieldVector<double,3> r;
+    Dune::FieldVector<ctype, dim> r;
 
     // Rotational part
-    Rotation<3,double> q;
+    Rotation<dim,ctype> q;
 
 };
 
 //! Send configuration to output stream
-std::ostream& operator<< (std::ostream& s, const Configuration& c)
+template <int dim, class ctype>
+std::ostream& operator<< (std::ostream& s, const RigidBodyMotion<dim,ctype>& c)
   {
       s << "(" << c.r << ")  (" << c.q << ")";
       return s;
diff --git a/src/rodassembler.cc b/src/rodassembler.cc
index 80ca3ea5..ff1f4dde 100644
--- a/src/rodassembler.cc
+++ b/src/rodassembler.cc
@@ -48,7 +48,7 @@ getNeighborsPerVertex(Dune::MatrixIndexSet& nb) const
 
 template <class GridType>
 void RodAssembler<GridType>::
-assembleMatrix(const std::vector<Configuration>& sol,
+assembleMatrix(const std::vector<RigidBodyMotion<3> >& sol,
                Dune::BCRSMatrix<MatrixBlock>& matrix) const
 {
     using namespace Dune;
@@ -74,7 +74,7 @@ assembleMatrix(const std::vector<Configuration>& sol,
         mat.setSize(numOfBaseFct, numOfBaseFct);
 
         // Extract local solution
-        std::vector<Configuration> localSolution(numOfBaseFct);
+        std::vector<RigidBodyMotion<3> > localSolution(numOfBaseFct);
         
         for (int i=0; i<numOfBaseFct; i++)
             localSolution[i] = sol[indexSet.template subIndex<gridDim>(*it,i)];
@@ -102,7 +102,7 @@ assembleMatrix(const std::vector<Configuration>& sol,
 
 template <class GridType>
 void RodAssembler<GridType>::
-assembleMatrixFD(const std::vector<Configuration>& sol,
+assembleMatrixFD(const std::vector<RigidBodyMotion<3> >& sol,
                  Dune::BCRSMatrix<MatrixBlock>& matrix) const
 {
     using namespace Dune;
@@ -114,13 +114,13 @@ assembleMatrixFD(const std::vector<Configuration>& sol,
     // ///////////////////////////////////////////////////////////
     //   Compute gradient by finite-difference approximation
     // ///////////////////////////////////////////////////////////
-    std::vector<Configuration> forwardSolution = sol;
-    std::vector<Configuration> backwardSolution = sol;
+    std::vector<RigidBodyMotion<3> > forwardSolution = sol;
+    std::vector<RigidBodyMotion<3> > backwardSolution = sol;
 
-    std::vector<Configuration> forwardForwardSolution = sol;
-    std::vector<Configuration> forwardBackwardSolution = sol;
-    std::vector<Configuration> backwardForwardSolution = sol;
-    std::vector<Configuration> backwardBackwardSolution = sol;
+    std::vector<RigidBodyMotion<3> > forwardForwardSolution = sol;
+    std::vector<RigidBodyMotion<3> > forwardBackwardSolution = sol;
+    std::vector<RigidBodyMotion<3> > backwardForwardSolution = sol;
+    std::vector<RigidBodyMotion<3> > backwardBackwardSolution = sol;
 
     // ////////////////////////////////////////////////////
     //   Create local assembler
@@ -144,8 +144,8 @@ assembleMatrixFD(const std::vector<Configuration>& sol,
     for (; eIt!=eEndIt; ++eIt)
         elements[indexSet.index(*eIt)] = eIt;
 
-    Dune::array<Configuration,2> localReferenceConfiguration;
-    Dune::array<Configuration,2> localSolution;
+    Dune::array<RigidBodyMotion<3>,2> localReferenceConfiguration;
+    Dune::array<RigidBodyMotion<3>,2> localSolution;
 
     // ///////////////////////////////////////////////////////////////
     //   Loop over all blocks of the outer matrix
@@ -353,7 +353,7 @@ assembleMatrixFD(const std::vector<Configuration>& sol,
 
 template <class GridType>
 void RodAssembler<GridType>::
-assembleGradient(const std::vector<Configuration>& sol,
+assembleGradient(const std::vector<RigidBodyMotion<3> >& sol,
                  Dune::BlockVector<Dune::FieldVector<double, blocksize> >& grad) const
 {
     using namespace Dune;
@@ -385,13 +385,13 @@ assembleGradient(const std::vector<Configuration>& sol,
         const int nDofs = 2;
 
         // Extract local solution
-        array<Configuration,nDofs> localSolution;
+        array<RigidBodyMotion<3>,nDofs> localSolution;
         
         for (int i=0; i<nDofs; i++)
             localSolution[i] = sol[indexSet.subIndex(*it,i,gridDim)];
 
         // Extract local reference configuration
-        array<Configuration,nDofs> localReferenceConfiguration;
+        array<RigidBodyMotion<3>,nDofs> localReferenceConfiguration;
         
         for (int i=0; i<nDofs; i++)
             localReferenceConfiguration[i] = referenceConfiguration_[indexSet.subIndex(*it,i,gridDim)];
@@ -412,7 +412,7 @@ assembleGradient(const std::vector<Configuration>& sol,
 
 template <class GridType>
 double RodAssembler<GridType>::
-computeEnergy(const std::vector<Configuration>& sol) const
+computeEnergy(const std::vector<RigidBodyMotion<3> >& sol) const
 {
     using namespace Dune;
 
@@ -431,8 +431,8 @@ computeEnergy(const std::vector<Configuration>& sol) const
     Dune::array<double,3> A = {A_[0], A_[1], A_[2]};
     RodLocalStiffness<typename GridType::LeafGridView,double> localStiffness(K, A);
 
-    Dune::array<Configuration,2> localReferenceConfiguration;
-    Dune::array<Configuration,2> localSolution;
+    Dune::array<RigidBodyMotion<3>,2> localReferenceConfiguration;
+    Dune::array<RigidBodyMotion<3>,2> localSolution;
 
     ElementLeafIterator it    = grid_->template leafbegin<0>();
     ElementLeafIterator endIt = grid_->template leafend<0>();
@@ -458,7 +458,7 @@ computeEnergy(const std::vector<Configuration>& sol) const
 
 template <class GridType>
 void RodAssembler<GridType>::
-getStrain(const std::vector<Configuration>& sol,
+getStrain(const std::vector<RigidBodyMotion<3> >& sol,
           Dune::BlockVector<Dune::FieldVector<double, blocksize> >& strain) const
 {
     using namespace Dune;
@@ -493,7 +493,7 @@ getStrain(const std::vector<Configuration>& sol,
             = Dune::LagrangeShapeFunctions<double, double, gridDim>::general(it->type(), elementOrder);
         int numOfBaseFct = baseSet.size();
 
-        array<Configuration,2> localSolution;
+        array<RigidBodyMotion<3>,2> localSolution;
         
         for (int i=0; i<numOfBaseFct; i++)
             localSolution[i] = sol[indexSet.subIndex(*it,i,gridDim)];
@@ -530,7 +530,7 @@ getStrain(const std::vector<Configuration>& sol,
 
 template <class GridType>
 void RodAssembler<GridType>::
-getStress(const std::vector<Configuration>& sol,
+getStress(const std::vector<RigidBodyMotion<3> >& sol,
           Dune::BlockVector<Dune::FieldVector<double, blocksize> >& stress) const
 {
     // Get the strain
@@ -552,7 +552,7 @@ getStress(const std::vector<Configuration>& sol,
 template <class GridType>
 Dune::FieldVector<double,3> RodAssembler<GridType>::
 getResultantForce(const BoundaryPatch<GridType>& boundary, 
-                  const std::vector<Configuration>& sol,
+                  const std::vector<RigidBodyMotion<3> >& sol,
                   Dune::FieldVector<double,3>& canonicalTorque) const
 {
     using namespace Dune;
@@ -598,9 +598,9 @@ getResultantForce(const BoundaryPatch<GridType>& boundary,
 
             double pos = nIt->intersectionSelfLocal().corner(0);
 
-            Dune::array<Configuration,2> localSolution = {sol[indexSet.template subIndex<1>(*eIt,0)],
+            Dune::array<RigidBodyMotion<3>,2> localSolution = {sol[indexSet.template subIndex<1>(*eIt,0)],
                                                           sol[indexSet.template subIndex<1>(*eIt,1)]};
-            Dune::array<Configuration,2> localRefConf  = {referenceConfiguration_[indexSet.template subIndex<1>(*eIt,0)],
+            Dune::array<RigidBodyMotion<3>,2> localRefConf  = {referenceConfiguration_[indexSet.template subIndex<1>(*eIt,0)],
                                                           referenceConfiguration_[indexSet.template subIndex<1>(*eIt,1)]};
 
             FieldVector<double, blocksize> strain          = localStiffness.getStrain(localSolution, *eIt, pos);
diff --git a/src/rodassembler.hh b/src/rodassembler.hh
index 06a68c99..a466fc18 100644
--- a/src/rodassembler.hh
+++ b/src/rodassembler.hh
@@ -8,7 +8,7 @@
 #include <dune/disc/operators/localstiffness.hh>
 
 #include <dune/ag-common/boundarypatch.hh>
-#include "configuration.hh"
+#include "rigidbodymotion.hh"
 
 
     /** \brief The FEM operator for an extensible, shearable rod
@@ -41,10 +41,10 @@
         Dune::array<double,3> A_;
 
         /** \brief The stress-free configuration */
-        std::vector<Configuration> referenceConfiguration_;
+        std::vector<RigidBodyMotion<3> > referenceConfiguration_;
 
         /** \todo Only for the fd approximations */
-        static void infinitesimalVariation(Configuration& c, double eps, int i)
+        static void infinitesimalVariation(RigidBodyMotion<3>& c, double eps, int i)
         {
             if (i<3)
                 c.r[i] += eps;
@@ -118,33 +118,33 @@
 
         /** \brief Assemble the tangent stiffness matrix
          */
-        void assembleMatrix(const std::vector<Configuration>& sol,
+        void assembleMatrix(const std::vector<RigidBodyMotion<3> >& sol,
                             Dune::BCRSMatrix<MatrixBlock>& matrix) const;
 
         /** \brief Assemble the tangent stiffness matrix using a finite difference approximation
          */
-        void assembleMatrixFD(const std::vector<Configuration>& sol,
+        void assembleMatrixFD(const std::vector<RigidBodyMotion<3> >& sol,
                               Dune::BCRSMatrix<MatrixBlock>& matrix) const;
 
-        void assembleGradient(const std::vector<Configuration>& sol,
+        void assembleGradient(const std::vector<RigidBodyMotion<3> >& sol,
                               Dune::BlockVector<Dune::FieldVector<double, blocksize> >& grad) const;
 
         /** \brief Compute the energy of a deformation state */
-        double computeEnergy(const std::vector<Configuration>& sol) const;
+        double computeEnergy(const std::vector<RigidBodyMotion<3> >& sol) const;
 
         void getNeighborsPerVertex(Dune::MatrixIndexSet& nb) const;
 
-        void getStrain(const std::vector<Configuration>& sol, 
+        void getStrain(const std::vector<RigidBodyMotion<3> >& sol, 
                        Dune::BlockVector<Dune::FieldVector<double, blocksize> >& strain) const;
 
-        void getStress(const std::vector<Configuration>& sol, 
+        void getStress(const std::vector<RigidBodyMotion<3> >& sol, 
                        Dune::BlockVector<Dune::FieldVector<double, blocksize> >& stress) const;
 
         /** \brief Return resultant force across boundary in canonical coordinates 
 
         \note Linear run-time in the size of the grid */
         Dune::FieldVector<double,3> getResultantForce(const BoundaryPatch<GridType>& boundary, 
-                                                      const std::vector<Configuration>& sol,
+                                                      const std::vector<RigidBodyMotion<3> >& sol,
                                                       Dune::FieldVector<double,3>& canonicalTorque) const;
 
     protected:
diff --git a/src/roddifference.hh b/src/roddifference.hh
index 5cd16ebd..0bb03b61 100644
--- a/src/roddifference.hh
+++ b/src/roddifference.hh
@@ -1,8 +1,8 @@
 #ifndef ROD_DIFFERENCE_HH
 #define ROD_DIFFERENCE_HH
 
-Dune::BlockVector<Dune::FieldVector<double,6> > computeRodDifference(const std::vector<Configuration>& a,
-                                                                     const std::vector<Configuration>& b)
+Dune::BlockVector<Dune::FieldVector<double,6> > computeRodDifference(const std::vector<RigidBodyMotion<3> >& a,
+                                                                     const std::vector<RigidBodyMotion<3> >& b)
 {
     if (a.size() != b.size())
         DUNE_THROW(Dune::Exception, "a and b have to have the same length!");
diff --git a/src/rodlocalstiffness.hh b/src/rodlocalstiffness.hh
index 9bf885ca..d70df8cc 100644
--- a/src/rodlocalstiffness.hh
+++ b/src/rodlocalstiffness.hh
@@ -8,7 +8,7 @@
 #include <dune/disc/operators/localstiffness.hh>
 
 #include <dune/ag-common/boundarypatch.hh>
-#include "configuration.hh"
+#include "rigidbodymotion.hh"
 
 template<class GridView, class RT>
 class RodLocalStiffness 
@@ -94,8 +94,8 @@ public:
 
     
     RT energy (const Entity& e,
-               const Dune::array<Configuration,2>& localSolution,
-               const Dune::array<Configuration,2>& localReferenceConfiguration,
+               const Dune::array<RigidBodyMotion<3>,2>& localSolution,
+               const Dune::array<RigidBodyMotion<3>,2>& localReferenceConfiguration,
                int k=1);
 
     static void interpolationDerivative(const Rotation<3,RT>& q0, const Rotation<3,RT>& q1, double s,
@@ -104,14 +104,14 @@ public:
     static void interpolationVelocityDerivative(const Rotation<3,RT>& q0, const Rotation<3,RT>& q1, double s,
                                                 double intervalLength, Dune::array<Quaternion<double>,6>& grad);
 
-    Dune::FieldVector<double, 6> getStrain(const Dune::array<Configuration,2>& localSolution,
+    Dune::FieldVector<double, 6> getStrain(const Dune::array<RigidBodyMotion<3>,2>& localSolution,
                                            const Entity& element,
                                            const Dune::FieldVector<double,1>& pos) const;
 
     /** \brief Assemble the element gradient of the energy functional */
     void assembleGradient(const Entity& element,
-                          const Dune::array<Configuration,2>& solution,
-                          const Dune::array<Configuration,2>& referenceConfiguration,
+                          const Dune::array<RigidBodyMotion<3>,2>& solution,
+                          const Dune::array<RigidBodyMotion<3>,2>& referenceConfiguration,
                           Dune::array<Dune::FieldVector<double,6>, 2>& gradient) const;
     
     template <class T>
@@ -131,8 +131,8 @@ public:
 template <class GridType, class RT>
 RT RodLocalStiffness<GridType, RT>::
 energy(const Entity& element,
-       const Dune::array<Configuration,2>& localSolution,
-       const Dune::array<Configuration,2>& localReferenceConfiguration,
+       const Dune::array<RigidBodyMotion<3>,2>& localSolution,
+       const Dune::array<RigidBodyMotion<3>,2>& localReferenceConfiguration,
        int k)
 {
     RT energy = 0;
@@ -404,7 +404,7 @@ interpolationVelocityDerivative(const Rotation<3,RT>& q0, const Rotation<3,RT>&
 
 template <class GridType, class RT>
 Dune::FieldVector<double, 6> RodLocalStiffness<GridType, RT>::
-getStrain(const Dune::array<Configuration,2>& localSolution,
+getStrain(const Dune::array<RigidBodyMotion<3>,2>& localSolution,
           const Entity& element,
           const Dune::FieldVector<double,1>& pos) const
 {
@@ -480,8 +480,8 @@ getStrain(const Dune::array<Configuration,2>& localSolution,
 template <class GridType, class RT>
 void RodLocalStiffness<GridType, RT>::
 assembleGradient(const Entity& element,
-                 const Dune::array<Configuration,2>& solution,
-                 const Dune::array<Configuration,2>& referenceConfiguration,
+                 const Dune::array<RigidBodyMotion<3>,2>& solution,
+                 const Dune::array<RigidBodyMotion<3>,2>& referenceConfiguration,
                  Dune::array<Dune::FieldVector<double,6>, 2>& gradient) const
 {
     using namespace Dune;
diff --git a/src/rodsolver.cc b/src/rodsolver.cc
index 48eaea69..cd940206 100644
--- a/src/rodsolver.cc
+++ b/src/rodsolver.cc
@@ -15,7 +15,7 @@
 #include <dune-solvers/norms/energynorm.hh>
 #include <dune-solvers/norms/h1seminorm.hh>
 
-#include "configuration.hh"
+#include "rigidbodymotion.hh"
 #include "quaternion.hh"
 #include "maxnormtrustregion.hh"
 
diff --git a/src/rodsolver.hh b/src/rodsolver.hh
index 6af9804b..2fe4c45c 100644
--- a/src/rodsolver.hh
+++ b/src/rodsolver.hh
@@ -14,11 +14,11 @@
 
 #include "rodassembler.hh"
 
-#include "configuration.hh"
+#include "rigidbodymotion.hh"
 
 /** \brief Riemannian trust-region solver for 3d Cosserat rod problems */
 template <class GridType>
-class RodSolver : public IterativeSolver<std::vector<Configuration>, Dune::BitSetVector<6> >
+class RodSolver : public IterativeSolver<std::vector<RigidBodyMotion<3> >, Dune::BitSetVector<6> >
 { 
     const static int blocksize = 6;
 
@@ -28,12 +28,12 @@ class RodSolver : public IterativeSolver<std::vector<Configuration>, Dune::BitSe
     // Some types that I need
     typedef Dune::BCRSMatrix<Dune::FieldMatrix<field_type, blocksize, blocksize> > MatrixType;
     typedef Dune::BlockVector<Dune::FieldVector<field_type, blocksize> >           CorrectionType;
-    typedef std::vector<Configuration>                                             SolutionType;
+    typedef std::vector<RigidBodyMotion<3> >                                             SolutionType;
 
 public:
 
     RodSolver()
-        : IterativeSolver<std::vector<Configuration>, Dune::BitSetVector<6> >(0,100,NumProc::FULL),
+        : IterativeSolver<std::vector<RigidBodyMotion<3> >, Dune::BitSetVector<6> >(0,100,NumProc::FULL),
           hessianMatrix_(NULL), h1SemiNorm_(NULL)
     {}
 
diff --git a/src/rodwriter.hh b/src/rodwriter.hh
index 33772e83..97b49e8d 100644
--- a/src/rodwriter.hh
+++ b/src/rodwriter.hh
@@ -5,7 +5,7 @@
 
 #include <dune/common/exceptions.hh>
 
-#include "configuration.hh"
+#include "rigidbodymotion.hh"
 
 /** \brief Write a planar rod
  */
@@ -89,7 +89,7 @@ void writeRod(const Dune::BlockVector<Dune::FieldVector<double,3> >& rod,
 
 /** \brief Write a spatial rod
  */
-void writeRod(const std::vector<Configuration>& rod, 
+void writeRod(const std::vector<RigidBodyMotion<3> >& rod, 
               const std::string& filename)
 {
     int nPoints = rod.size();
diff --git a/test/fdcheck.hh b/test/fdcheck.hh
index c6ecb58a..f9b3f81d 100644
--- a/test/fdcheck.hh
+++ b/test/fdcheck.hh
@@ -1,9 +1,11 @@
 #ifndef ASSEMBLER_FINITE_DIFFERENCE_CHECK
 #define ASSEMBLER_FINITE_DIFFERENCE_CHECK
 
+#include "src/rigidbodymotion.hh"
+
 #define ABORT_ON_ERROR
 
-void infinitesimalVariation(Configuration& c, double eps, int i)
+void infinitesimalVariation(RigidBodyMotion<3>& c, double eps, int i)
 {
     if (i<3)
         c.r[i] += eps;
@@ -14,7 +16,7 @@ void infinitesimalVariation(Configuration& c, double eps, int i)
 }
 
 template <class GridType>
-void strainFD(const std::vector<Configuration>& x, 
+void strainFD(const std::vector<RigidBodyMotion<3> >& x, 
               double pos,
               Dune::array<Dune::FieldMatrix<double,2,6>, 6>& fdStrainDerivatives,
               const RodAssembler<GridType>& assembler) 
@@ -27,8 +29,8 @@ void strainFD(const std::vector<Configuration>& x,
     // ///////////////////////////////////////////////////////////
     //   Compute gradient by finite-difference approximation
     // ///////////////////////////////////////////////////////////
-    std::vector<Configuration> forwardSolution = x;
-    std::vector<Configuration> backwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardSolution = x;
     
     for (size_t i=0; i<x.size(); i++) {
         
@@ -59,7 +61,7 @@ void strainFD(const std::vector<Configuration>& x,
 
 
 template <class GridType>
-void strain2ndOrderFD(const std::vector<Configuration>& x, 
+void strain2ndOrderFD(const std::vector<RigidBodyMotion<3> >& x, 
                       double pos,
                       Dune::array<Dune::Matrix<Dune::FieldMatrix<double,6,6> >, 3>& translationDer,
                       Dune::array<Dune::Matrix<Dune::FieldMatrix<double,3,3> >, 3>& rotationDer,
@@ -83,13 +85,13 @@ void strain2ndOrderFD(const std::vector<Configuration>& x,
     // ///////////////////////////////////////////////////////////
     //   Compute gradient by finite-difference approximation
     // ///////////////////////////////////////////////////////////
-    std::vector<Configuration> forwardSolution = x;
-    std::vector<Configuration> backwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardSolution = x;
     
-    std::vector<Configuration> forwardForwardSolution = x;
-    std::vector<Configuration> forwardBackwardSolution = x;
-    std::vector<Configuration> backwardForwardSolution = x;
-    std::vector<Configuration> backwardBackwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardForwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardBackwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardForwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardBackwardSolution = x;
 
     for (int i=0; i<2; i++) {
         
@@ -168,7 +170,7 @@ void strain2ndOrderFD(const std::vector<Configuration>& x,
 
 
 template <class GridType>
-void strain2ndOrderFD2(const std::vector<Configuration>& x, 
+void strain2ndOrderFD2(const std::vector<RigidBodyMotion<3> >& x, 
                        double pos,
                        Dune::FieldVector<double,1> shapeGrad[2],
                        Dune::FieldVector<double,1> shapeFunction[2],
@@ -192,8 +194,8 @@ void strain2ndOrderFD2(const std::vector<Configuration>& x,
     // ///////////////////////////////////////////////////////////
     //   Compute gradient by finite-difference approximation
     // ///////////////////////////////////////////////////////////
-    std::vector<Configuration> forwardSolution = x;
-    std::vector<Configuration> backwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardSolution = x;
     
     for (int k=0; k<2; k++) {
         
@@ -301,7 +303,7 @@ void expHessianFD()
 
 
 template <class GridType>
-void gradientFDCheck(const std::vector<Configuration>& x, 
+void gradientFDCheck(const std::vector<RigidBodyMotion<3> >& x, 
                      const Dune::BlockVector<Dune::FieldVector<double,6> >& gradient, 
                      const RodAssembler<GridType>& assembler)
 {
@@ -315,8 +317,8 @@ void gradientFDCheck(const std::vector<Configuration>& x,
     //   Compute gradient by finite-difference approximation
     // ///////////////////////////////////////////////////////////
 
-    std::vector<Configuration> forwardSolution = x;
-    std::vector<Configuration> backwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardSolution = x;
 
     for (size_t i=0; i<x.size(); i++) {
         
@@ -359,7 +361,7 @@ void gradientFDCheck(const std::vector<Configuration>& x,
 
 
 template <class GridType>
-void hessianFDCheck(const std::vector<Configuration>& x, 
+void hessianFDCheck(const std::vector<RigidBodyMotion<3> >& x, 
                     const Dune::BCRSMatrix<Dune::FieldMatrix<double,6,6> >& hessian, 
                     const RodAssembler<GridType>& assembler)
 {
@@ -373,13 +375,13 @@ void hessianFDCheck(const std::vector<Configuration>& x,
     // ///////////////////////////////////////////////////////////
     //   Compute gradient by finite-difference approximation
     // ///////////////////////////////////////////////////////////
-    std::vector<Configuration> forwardSolution = x;
-    std::vector<Configuration> backwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardSolution = x;
 
-    std::vector<Configuration> forwardForwardSolution = x;
-    std::vector<Configuration> forwardBackwardSolution = x;
-    std::vector<Configuration> backwardForwardSolution = x;
-    std::vector<Configuration> backwardBackwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardForwardSolution = x;
+    std::vector<RigidBodyMotion<3> > forwardBackwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardForwardSolution = x;
+    std::vector<RigidBodyMotion<3> > backwardBackwardSolution = x;
     
 
     // ///////////////////////////////////////////////////////////////
-- 
GitLab