include/meltpooldg/utilities/cell_monitor.hpp Source File

Developer Documentation: include/meltpooldg/utilities/cell_monitor.hpp Source File
Developer Documentation
cell_monitor.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/convergence_table.h>
4#include <deal.II/base/table_handler.h>
5
6#include <algorithm>
7#include <map>
8#include <string>
9
10namespace MeltPoolDG
11{
12 template <typename number>
14 {
15 private:
17 {
18 CellStatistics(const unsigned int n_cells = 0,
19 const number cell_size_min = 0,
20 const number cell_size_max = 0)
21 : n_calls(1)
22 , cells_accumulated(n_cells)
23 , cells_min(n_cells)
24 , cells_max(n_cells)
27 {}
28
29 unsigned int n_calls;
30 unsigned int cells_accumulated;
31 unsigned int cells_min;
32 unsigned int cells_max;
33
36 };
37
38 public:
39 static void
40 add_info(const std::string label,
41 const unsigned int n_cells,
42 const number min_cell_size,
43 const number max_cell_size)
44 {
45 const auto ptr = stat_cells.find(label);
46
47 if (ptr == stat_cells.end())
48 {
49 stat_cells[label] = CellStatistics(n_cells, min_cell_size, max_cell_size);
50 }
51 else
52 {
53 ptr->second.n_calls += 1;
54 ptr->second.cells_accumulated += n_cells;
55 ptr->second.cells_min = std::min(ptr->second.cells_min, n_cells);
56 ptr->second.cells_max = std::max(ptr->second.cells_max, n_cells);
57 ptr->second.cell_size_min = min_cell_size;
58 ptr->second.cell_size_max = max_cell_size;
59 }
60 }
61
62 template <typename StreamType>
63 static void
64 print(StreamType &ss)
65 {
66 dealii::ConvergenceTable table;
67
68 for (const auto &entry : stat_cells)
69 {
70 table.add_value("label", entry.first);
71 table.add_value("no. calls", entry.second.n_calls);
72 table.add_value("n_cells avg",
73 static_cast<number>(entry.second.cells_accumulated) /
74 entry.second.n_calls);
75 table.set_precision("n_cells avg", 2);
76 table.add_value("n_cells min", entry.second.cells_min);
77 table.add_value("n_cells max", entry.second.cells_max);
78
79 table.add_value("cell size min", entry.second.cell_size_min);
80 table.add_value("cell size max", entry.second.cell_size_max);
81 table.set_scientific("cell size min", 4);
82 table.set_scientific("cell size max", 4);
83 }
84
85 if (ss.is_active())
86 table.write_text(ss.get_stream(), dealii::TableHandler::TextOutputFormat::org_mode_table);
87 }
88
89
90 private:
91 inline static std::map<std::string, CellStatistics> stat_cells;
92 };
93} // namespace MeltPoolDG
Definition cell_monitor.hpp:14
static void add_info(const std::string label, const unsigned int n_cells, const number min_cell_size, const number max_cell_size)
Definition cell_monitor.hpp:40
static void print(StreamType &ss)
Definition cell_monitor.hpp:64
static std::map< std::string, CellStatistics > stat_cells
Definition cell_monitor.hpp:91
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
Definition cell_monitor.hpp:17
unsigned int cells_max
Definition cell_monitor.hpp:32
unsigned int n_calls
Definition cell_monitor.hpp:29
number cell_size_min
Definition cell_monitor.hpp:34
unsigned int cells_accumulated
Definition cell_monitor.hpp:30
CellStatistics(const unsigned int n_cells=0, const number cell_size_min=0, const number cell_size_max=0)
Definition cell_monitor.hpp:18
number cell_size_max
Definition cell_monitor.hpp:35
unsigned int cells_min
Definition cell_monitor.hpp:31