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