From b195c86abdfe9c87af1c12a2e3c046a576dfd2cd Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Sat, 18 Jan 2020 15:10:58 +0100 Subject: [PATCH] Collect some statistics about trust-region runs Automatic testing of the RiemannianTrustRegionSolver class requires to know what it did on the previous run. This patch adds some infrastructure to collect this information. --- dune/gfe/riemanniantrsolver.cc | 5 ++++- dune/gfe/riemanniantrsolver.hh | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 778effaa..bacafb19 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -351,7 +351,8 @@ void RiemannianTrustRegionSolver<Basis,TargetSpace>::solve() localMapper, 0); #endif - for (int i=0; i<maxTrustRegionSteps_; i++) { + auto& i = statistics_.finalIteration; + for (i=0; i<maxTrustRegionSteps_; i++) { /* std::cout << "current iterate:\n"; for (size_t j=0; j<x_.size(); j++) @@ -643,4 +644,6 @@ void RiemannianTrustRegionSolver<Basis,TargetSpace>::solve() // ////////////////////////////////////////////// if (instrumented_) fclose(fp); + + statistics_.finalEnergy = oldEnergy; } diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh index add3d56d..7c91aac1 100644 --- a/dune/gfe/riemanniantrsolver.hh +++ b/dune/gfe/riemanniantrsolver.hh @@ -92,6 +92,16 @@ class RiemannianTrustRegionSolver typedef typename MapperFactory<typename Basis::GridView,Basis>::LocalMapper LocalMapper; #endif + /** \brief Records information about the last run of the RiemannianTrustRegionSolver + * + * This is used primarily for unit testing. + */ + struct Statistics + { + std::size_t finalIteration; + + field_type finalEnergy; + }; public: @@ -144,6 +154,8 @@ public: SolutionType getSol() const {return x_;} + const Statistics& getStatistics() const {return statistics_;} + protected: #if HAVE_MPI @@ -163,7 +175,7 @@ protected: Dune::FieldVector<double,blocksize> scaling_; /** \brief Maximum number of trust-region steps */ - int maxTrustRegionSteps_; + std::size_t maxTrustRegionSteps_; /** \brief Maximum number of multigrid iterations */ int innerIterations_; @@ -195,6 +207,8 @@ protected: /** \brief If set to true we log convergence speed and other stuff */ bool instrumented_; + /** \brief Store information about solver runs for unit testing */ + Statistics statistics_; }; #include "riemanniantrsolver.cc" -- GitLab