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/convergence_table.h>
4
5namespace MeltPoolDG
6{
7 template <typename number>
9 {
10 private:
12 {
13 LinearIterationStatistics(const unsigned int n_iterations = 0)
14 : n_calls(1)
15 , iterations_accumulated(n_iterations)
16 , iterations_min(n_iterations)
17 , iterations_max(n_iterations)
18 {}
19
20 unsigned int n_calls;
22 unsigned int iterations_min;
23 unsigned int iterations_max;
24 };
25
26 public:
27 static void
28 add_linear_iterations(const std::string label, const unsigned int n_iterations)
29 {
30 const auto ptr = stat_linear.find(label);
31
32 if (ptr == stat_linear.end())
33 {
34 stat_linear[label] = LinearIterationStatistics(n_iterations);
35 }
36 else
37 {
38 ptr->second.n_calls += 1;
39 ptr->second.iterations_accumulated += n_iterations;
40 ptr->second.iterations_min = std::min(ptr->second.iterations_min, n_iterations);
41 ptr->second.iterations_max = std::max(ptr->second.iterations_max, n_iterations);
42 }
43 }
44
45 template <typename StreamType>
46 static void
47 print(StreamType &ss)
48 {
49 dealii::ConvergenceTable table;
50
51 for (const auto &entry : stat_linear)
52 {
53 table.add_value("label", entry.first);
54 table.add_value("no. calls", entry.second.n_calls);
55 table.add_value("iter avg",
56 static_cast<number>(entry.second.iterations_accumulated) /
57 entry.second.n_calls);
58 table.set_precision("iter avg", 2);
59 table.add_value("iter min", entry.second.iterations_min);
60 table.add_value("iter max", entry.second.iterations_max);
61 }
62
63 if (ss.is_active())
64 table.write_text(ss.get_stream(), dealii::TableHandler::TextOutputFormat::org_mode_table);
65 }
66
67
68 private:
69 inline static std::map<std::string, LinearIterationStatistics> stat_linear;
70 };
71} // namespace MeltPoolDG
Definition iteration_monitor.hpp:9
static void add_linear_iterations(const std::string label, const unsigned int n_iterations)
Definition iteration_monitor.hpp:28
static std::map< std::string, LinearIterationStatistics > stat_linear
Definition iteration_monitor.hpp:69
static void print(StreamType &ss)
Definition iteration_monitor.hpp:47
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
LinearIterationStatistics(const unsigned int n_iterations=0)
Definition iteration_monitor.hpp:13
unsigned int iterations_min
Definition iteration_monitor.hpp:22
unsigned int iterations_max
Definition iteration_monitor.hpp:23
unsigned int n_calls
Definition iteration_monitor.hpp:20
unsigned int iterations_accumulated
Definition iteration_monitor.hpp:21