From d7989aa83ab5b3f0fdd08de299aa7c96a0df7ae6 Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Tue, 9 Jul 2019 11:07:51 +0200 Subject: [PATCH] Use SymmetricMatrix for the embedded Hesse matrix This makes the methods AverageDistanceAssembler::assembleHessian compile again. And it should be a wee bit faster two, because matrix symmetry is now exploited better. --- dune/gfe/averagedistanceassembler.hh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/dune/gfe/averagedistanceassembler.hh b/dune/gfe/averagedistanceassembler.hh index 3c23d232..be41bba0 100644 --- a/dune/gfe/averagedistanceassembler.hh +++ b/dune/gfe/averagedistanceassembler.hh @@ -81,20 +81,15 @@ public: void assembleHessian(const TargetSpace& x, Dune::FieldMatrix<ctype,size,size>& matrix) const { - Dune::FieldMatrix<ctype,embeddedSize,embeddedSize> embeddedHessian; + Dune::SymmetricMatrix<ctype,embeddedSize> embeddedHessian; assembleEmbeddedHessian(x,embeddedHessian); Dune::FieldMatrix<ctype,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]; - } - + for (int j=0; j<size; j++) + matrix[i][j] = embeddedHessian.energyScalarProduct(frame[i], frame[j]); } const std::vector<TargetSpace> coefficients_; -- GitLab