diff --git a/dune/gfe/linearalgebra.hh b/dune/gfe/linearalgebra.hh index a7a6ea7e512325e8588ca19f6b0560830c7f9169..2118de2d6ba50d7b6e6d5d9523dafb221f09a38c 100644 --- a/dune/gfe/linearalgebra.hh +++ b/dune/gfe/linearalgebra.hh @@ -4,7 +4,6 @@ #include <random> #include <dune/common/fmatrix.hh> -#include <dune/common/version.hh> #include <dune/istl/scaledidmatrix.hh> @@ -63,22 +62,6 @@ namespace Dune { } #endif -#if !DUNE_VERSION_NEWER(DUNE_COMMON, 2, 8) - /** \brief Multiplication of a ScaledIdentityMatrix with another FieldMatrix */ - template <class T, int N, int otherCols> - Dune::FieldMatrix<T,N,otherCols> operator* ( const Dune::ScaledIdentityMatrix<T, N>& diagonalMatrix, - const Dune::FieldMatrix<T, N, otherCols>& matrix) - { - Dune::FieldMatrix<T,N,otherCols> result(0); - - for (size_t i = 0; i < N; ++i) - for (size_t j = 0; j < otherCols; ++j) - result[i][j] = diagonalMatrix[i][i]*matrix[i][j]; - - return result; - } -#endif - /** \brief Return the trace of a matrix */ template <class T, int n> static T trace(const FieldMatrix<T,n,n>& A) diff --git a/dune/gfe/mixedriemanniantrsolver.cc b/dune/gfe/mixedriemanniantrsolver.cc index 625836ecbd941095ef38859d4de21adbfe48bb16..890be19551821fc1a33ab9c13b4e4b8778916212 100644 --- a/dune/gfe/mixedriemanniantrsolver.cc +++ b/dune/gfe/mixedriemanniantrsolver.cc @@ -528,7 +528,7 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis,Basis0,TargetSpace0,Basis1, recomputeGradientHessian = true; - } else if (solvedByInnerSolver && (oldEnergy-energy) / modelDecrease > 0.01 + } else if ((solvedByInnerSolver && (oldEnergy-energy) / modelDecrease > 0.01) || std::abs(oldEnergy-energy) < 1e-12) { // successful iteration x_ = newIterate; diff --git a/dune/gfe/riemannianpnsolver.cc b/dune/gfe/riemannianpnsolver.cc index 70452c0562254ac6ecea9ccd28cc65fd3aa45569..6339f72711e72ceb5cfa652e1190ac348fde6a63 100644 --- a/dune/gfe/riemannianpnsolver.cc +++ b/dune/gfe/riemannianpnsolver.cc @@ -409,12 +409,19 @@ void RiemannianProximalNewtonSolver<Basis,TargetSpace,Assembler>::solve() if (solved) { if (this->verbosity_ == NumProc::FULL && rank==0) - if (normType_ == ErrorNormType::infinity) + switch (normType_) + { + case ErrorNormType::infinity : std::cout << "infinity norm of the correction: " << corrGlobalNorm << std::endl; - else if (normType_ == ErrorNormType::H1semi) + break; + + case ErrorNormType::H1semi : std::cout << "H1-semi norm of the correction: " << corrGlobalNorm << std::endl; - else + break; + + default : DUNE_THROW(Dune::Exception, "Unknown norm type for stopping criterion!"); + } if (corrGlobalNorm < this->tolerance_ && corrGlobalNorm < 1/regularization) { if (this->verbosity_ == NumProc::FULL and rank==0)