From cd44250b7d5d5bd591efb830e2442af04f21952a Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Mon, 10 Jan 2011 07:55:15 +0000
Subject: [PATCH] add a dummy method
 derivativeOfDistanceSquaredWRTSecondArgument.

[[Imported from SVN: r6707]]
---
 dune/gfe/rigidbodymotion.hh | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/dune/gfe/rigidbodymotion.hh b/dune/gfe/rigidbodymotion.hh
index f7ce7f78..34da7efb 100644
--- a/dune/gfe/rigidbodymotion.hh
+++ b/dune/gfe/rigidbodymotion.hh
@@ -67,12 +67,42 @@ struct RigidBodyMotion
 
         return result;
     }
+    
+    static EmbeddedTangentVector derivativeOfDistanceSquaredWRTSecondArgument(const RigidBodyMotion<dim,ctype>& a,
+                                                                              const RigidBodyMotion<dim,ctype>& b) {
+
+        // linear part
+        Dune::FieldVector<ctype,dim> linearDerivative = a.r;
+        linearDerivative -= b.r;
+        linearDerivative *= -2;
+
+        // rotation part
+        typename Rotation<dim,ctype>::EmbeddedTangentVector rotationDerivative 
+                = Rotation<dim,ctype>::derivativeOfDistanceSquaredWRTSecondArgument(a.q, b.q);
+        
+        return concat(linearDerivative, rotationDerivative);
+    }
 
     // Translational part
-    Dune::FieldVector<ctype, dim> r;
+    Dune::FieldVector<ctype, dim> r;;
 
     // Rotational part
     Rotation<dim,ctype> q;
+    
+private:
+    
+    /** \brief Concatenate two FieldVectors */
+    template <int N, int M>
+    static Dune::FieldVector<ctype,N+M> concat(const Dune::FieldVector<ctype,N>& a,
+                                               const Dune::FieldVector<ctype,M>& b)
+    {
+        Dune::FieldVector<ctype,N+M> result;
+        for (int i=0; i<N; i++)
+            result[i] = a[i];
+        for (int i=0; i<M; i++)
+            result[i+N] = b[i];
+        return result;
+    }
 
 };
 
-- 
GitLab