From 28c4cd3cd207ebd9ac97fa3cd377dff2783582d6 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Fri, 19 Nov 2010 10:02:23 +0000 Subject: [PATCH] factor out the computation of dFdw [[Imported from SVN: r6544]] --- dune/gfe/localgeodesicfefunction.hh | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/dune/gfe/localgeodesicfefunction.hh b/dune/gfe/localgeodesicfefunction.hh index c2fe8147..7b554c88 100644 --- a/dune/gfe/localgeodesicfefunction.hh +++ b/dune/gfe/localgeodesicfefunction.hh @@ -139,6 +139,18 @@ private: return V*UT; } + /** \brief Compute derivate of F(w,q) (the derivative of the weighted distance fctl) wrt to w */ + Dune::FieldMatrix<ctype,embeddedDim,dim+1> computeDFdw(const TargetSpace& q) const + { + Dune::FieldMatrix<ctype,embeddedDim,dim+1> dFdw; + for (int i=0; i<dim+1; i++) { + Dune::FieldVector<ctype,embeddedDim> tmp = TargetSpace::derivativeOfDistanceSquaredWRTSecondArgument(coefficients_[i], q); + for (int j=0; j<embeddedDim; j++) + dFdw[j][i] = tmp[j]; + } + return dFdw; + } + /** \brief The coefficient vector */ std::vector<TargetSpace> coefficients_; @@ -198,13 +210,7 @@ evaluateDerivative(const Dune::FieldVector<ctype, dim>& local) const Dune::FieldMatrix<ctype,dim+1,dim> B = referenceToBarycentricLinearPart(); // compute negative derivative of F(w,q) (the derivative of the weighted distance fctl) wrt to w - Dune::FieldMatrix<ctype,embeddedDim,dim+1> dFdw; - for (int i=0; i<dim+1; i++) { - Dune::FieldVector<ctype,embeddedDim> tmp = TargetSpace::derivativeOfDistanceSquaredWRTSecondArgument(coefficients_[i], q); - for (int j=0; j<embeddedDim; j++) - dFdw[j][i] = tmp[j]; - } - + Dune::FieldMatrix<ctype,embeddedDim,dim+1> dFdw = computeDFdw(q); dFdw *= -1; // multiply the two previous matrices: the result is the right hand side @@ -285,12 +291,7 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>& Dune::FieldMatrix<ctype,dim+1,dim> B = referenceToBarycentricLinearPart(); // compute derivate of F(w,q) (the derivative of the weighted distance fctl) wrt to w - Dune::FieldMatrix<ctype,embeddedDim,dim+1> dFdw; - for (int i=0; i<dim+1; i++) { - Dune::FieldVector<ctype,embeddedDim> tmp = TargetSpace::derivativeOfDistanceSquaredWRTSecondArgument(coefficients_[i], q); - for (int j=0; j<embeddedDim; j++) - dFdw[j][i] = tmp[j]; - } + Dune::FieldMatrix<ctype,embeddedDim,dim+1> dFdw = computeDFdw(q); // the actual system matrix std::vector<ctype> w = barycentricCoordinates(local); -- GitLab