include/meltpooldg/utilities/iteration_monitor.hpp Source File

Developer Documentation: include/meltpooldg/utilities/iteration_monitor.hpp Source File
Developer Documentation
iteration_monitor.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/table_handler.h>
4
6
7#include <sstream>
8
9namespace MeltPoolDG
10{
11 template <typename number>
13 {
14 private:
16 {
17 LinearIterationStatistics(const unsigned int n_iterations = 0)
18 : n_calls(1)
19 , iterations_accumulated(n_iterations)
20 , iterations_min(n_iterations)
21 , iterations_max(n_iterations)
22 {}
23
24 unsigned int n_calls;
26 unsigned int iterations_min;
27 unsigned int iterations_max;
28 };
29
30 public:
31 static void
32 add_linear_iterations(const std::string label, const unsigned int n_iterations)
33 {
34 const auto ptr = stat_linear.find(label);
35
36 if (ptr == stat_linear.end())
37 {
38 stat_linear[label] = LinearIterationStatistics(n_iterations);
39 }
40 else
41 {
42 ptr->second.n_calls += 1;
43 ptr->second.iterations_accumulated += n_iterations;
44 ptr->second.iterations_min = std::min(ptr->second.iterations_min, n_iterations);
45 ptr->second.iterations_max = std::max(ptr->second.iterations_max, n_iterations);
46 }
47 }
48
49 template <typename StreamType>
50 static void
51 print(StreamType &ss, const std::string &title)
52 {
53 dealii::TableHandler table;
54
55 for (const auto &entry : stat_linear)
56 {
57 table.add_value("label", entry.first);
58 table.add_value("no. calls", entry.second.n_calls);
59 table.add_value("iter avg",
60 static_cast<number>(entry.second.iterations_accumulated) /
61 entry.second.n_calls);
62 table.set_precision("iter avg", 2);
63 table.add_value("iter min", entry.second.iterations_min);
64 table.add_value("iter max", entry.second.iterations_max);
65 }
66
67 if (ss.is_active())
68 Journal::print_table(ss, title, table);
69 }
70
71 static bool
73 {
74 return not stat_linear.empty();
75 }
76
77 private:
78 inline static std::map<std::string, LinearIterationStatistics> stat_linear;
79 };
80} // namespace MeltPoolDG
Definition iteration_monitor.hpp:13
static void print(StreamType &ss, const std::string &title)
Definition iteration_monitor.hpp:51
static bool has_statistics()
Definition iteration_monitor.hpp:72
static void add_linear_iterations(const std::string label, const unsigned int n_iterations)
Definition iteration_monitor.hpp:32
static std::map< std::string, LinearIterationStatistics > stat_linear
Definition iteration_monitor.hpp:78
void print_table(const ConditionalOStream &pcout, const std::string &title, const dealii::TableHandler &table)
Print a multi-line preconfigured table inside a single bordered box with a title row.
Definition journal.cpp:49
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
LinearIterationStatistics(const unsigned int n_iterations=0)
Definition iteration_monitor.hpp:17
unsigned int iterations_min
Definition iteration_monitor.hpp:26
unsigned int iterations_max
Definition iteration_monitor.hpp:27
unsigned int n_calls
Definition iteration_monitor.hpp:24
unsigned int iterations_accumulated
Definition iteration_monitor.hpp:25