From d7c1f1f3932a9172037378d46da3ca3a44d9f885 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Fri, 19 Nov 2010 10:50:46 +0000
Subject: [PATCH] transpose one gradient matrix.  This makes the code run, but
 it still doesn't work even for RealTuple<1>

[[Imported from SVN: r6547]]
---
 dune/gfe/harmonicenergystiffness.hh | 5 +++--
 dune/gfe/localgeodesicfefunction.hh | 4 ++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/dune/gfe/harmonicenergystiffness.hh b/dune/gfe/harmonicenergystiffness.hh
index 3fb31da5..66cf878f 100644
--- a/dune/gfe/harmonicenergystiffness.hh
+++ b/dune/gfe/harmonicenergystiffness.hh
@@ -146,14 +146,15 @@ assembleEmbeddedGradient(const Entity& element,
         // loop over all the element's degrees of freedom and compute the gradient wrt it
         for (size_t i=0; i<localSolution.size(); i++) {
          
-            Tensor3<double, TargetSpace::EmbeddedTangentVector::size, gridDim,TargetSpace::EmbeddedTangentVector::size> derivativeDerivative;
+            Tensor3<double, TargetSpace::EmbeddedTangentVector::size,TargetSpace::EmbeddedTangentVector::size,gridDim> derivativeDerivative;
             localGeodesicFEFunction.evaluateDerivativeOfGradientWRTCoefficient(quadPos, i, derivativeDerivative);
         
             for (int j=0; j<derivative.rows; j++) {
                 
                 for (int k=0; k<derivative.cols; k++) {
                     
-                    localGradient[i].axpy(weight*derivative[j][k], derivativeDerivative[j][k]);
+                    for (int l=0; l<TargetSpace::EmbeddedTangentVector::size; l++)
+                        localGradient[i][l] += weight*derivative[j][k] * derivativeDerivative[l][j][k];
                     
                 }
                 
diff --git a/dune/gfe/localgeodesicfefunction.hh b/dune/gfe/localgeodesicfefunction.hh
index bb2098ef..2045b0de 100644
--- a/dune/gfe/localgeodesicfefunction.hh
+++ b/dune/gfe/localgeodesicfefunction.hh
@@ -88,7 +88,7 @@ public:
     /** \brief Evaluate the derivative of the gradient of the function with respect to a coefficient */
     void evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>& local,
                                                     int coefficient,
-                                                    Tensor3<double, TargetSpace::EmbeddedTangentVector::size,dim,TargetSpace::EmbeddedTangentVector::size>& result) const;
+                                                    Tensor3<double, TargetSpace::EmbeddedTangentVector::size,TargetSpace::EmbeddedTangentVector::size,dim>& result) const;
 
 private:
 
@@ -280,7 +280,7 @@ template <int dim, class ctype, class TargetSpace>
 void LocalGeodesicFEFunction<dim,ctype,TargetSpace>::
 evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>& local,
                                            int coefficient,
-                                           Tensor3<double, TargetSpace::EmbeddedTangentVector::size,dim,TargetSpace::EmbeddedTangentVector::size>& result) const
+                                           Tensor3<double, TargetSpace::EmbeddedTangentVector::size,TargetSpace::EmbeddedTangentVector::size,dim>& result) const
 {
     const int embeddedDim = EmbeddedTangentVector::size;
     
-- 
GitLab