From 7a00ee214816b95128ad1d0d9b452fc49af2e15b Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Fri, 17 May 2019 12:06:45 +0200
Subject: [PATCH] Properly convert SymmetricMatrix to FieldMatrix

---
 dune/gfe/symmetricmatrix.hh          | 12 ++++++++++++
 test/localgeodesicfestiffnesstest.cc |  4 ++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/dune/gfe/symmetricmatrix.hh b/dune/gfe/symmetricmatrix.hh
index a8d847bb..8eae7135 100644
--- a/dune/gfe/symmetricmatrix.hh
+++ b/dune/gfe/symmetricmatrix.hh
@@ -2,6 +2,7 @@
 #define DUNE_GFE_SYMMETRICMATRIX_HH
 
 #include <dune/common/fvector.hh>
+#include <dune/common/fmatrix.hh>
 
 namespace Dune {
 
@@ -79,6 +80,17 @@ public:
       data_.axpy(a,other.data_);
     }
 
+        /** \brief Return the FieldMatrix representation of the symmetric tensor.*/
+    Dune::FieldMatrix<T,N,N> matrix() const
+    {
+      Dune::FieldMatrix<T,N,N> mat;
+      for (int i=0; i<N; i++)
+        for (int j=0; j<=i; j++)
+          mat[j][i] = mat[i][j] = this->operator()(i,j);
+
+      return mat;
+    }
+
 private:
     Dune::FieldVector<T,N*(N+1)/2> data_;
 };
diff --git a/test/localgeodesicfestiffnesstest.cc b/test/localgeodesicfestiffnesstest.cc
index 9f79510e..cbde11a7 100644
--- a/test/localgeodesicfestiffnesstest.cc
+++ b/test/localgeodesicfestiffnesstest.cc
@@ -151,10 +151,10 @@ void testHessian()
         embeddedHessian = 0;
         
         embeddedHessian[0][0] = TargetSpace::secondDerivativeOfDistanceSquaredWRTSecondArgument(coefficients[1],
-                                                                                                coefficients[0]);
+                                                                                                coefficients[0]).matrix();
 
         embeddedHessian[1][1] = TargetSpace::secondDerivativeOfDistanceSquaredWRTSecondArgument(coefficients[0],
-                                                                                                coefficients[1]);
+                                                                                                coefficients[1]).matrix();
 
         embeddedHessian[0][1] = TargetSpace::secondDerivativeOfDistanceSquaredWRTFirstAndSecondArgument(coefficients[0],
                                                                                                         coefficients[1]);
-- 
GitLab