From 9ee0e5e6505023d0b070220162e20b3c395bb8ed Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Mon, 18 Apr 2011 09:13:01 +0000 Subject: [PATCH] method to compute the actual Hesse matrix. For some strange reason this slows down convergence, rather than speeding it up. to be investigated [[Imported from SVN: r7173]] --- dune/gfe/averagedistanceassembler.hh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dune/gfe/averagedistanceassembler.hh b/dune/gfe/averagedistanceassembler.hh index 9a13a682..3e072407 100644 --- a/dune/gfe/averagedistanceassembler.hh +++ b/dune/gfe/averagedistanceassembler.hh @@ -73,6 +73,25 @@ public: matrix.axpy(weights_[i], TargetSpace::secondDerivativeOfDistanceSquaredWRTSecondArgument(coefficients_[i], x)); } + void assembleHessian(const TargetSpace& x, + Dune::FieldMatrix<double,size,size>& matrix) const + { + Dune::FieldMatrix<double,embeddedSize,embeddedSize> embeddedHessian; + assembleEmbeddedHessian(x,embeddedHessian); + + Dune::FieldMatrix<double,size,embeddedSize> frame = x.orthonormalFrame(); + + // this is frame * embeddedHessian * frame^T + for (int i=0; i<size; i++) + for (int j=0; j<size; j++) { + matrix[i][j] = 0; + for (int k=0; k<embeddedSize; k++) + for (int l=0; l<embeddedSize; l++) + matrix[i][j] += frame[i][k]*embeddedHessian[k][l]*frame[j][l]; + } + + } + const std::vector<TargetSpace> coefficients_; const std::vector<double> weights_; -- GitLab