dune-pdelab 2.8
Loading...
Searching...
No Matches
solverstatistics.hh
Go to the documentation of this file.
1// -*- tab-width: 2; indent-tabs-mode: nil -*-
2// vi: set et ts=2 sw=2 sts=2:
3
4#ifndef DUNE_PDELAB_BACKEND_ISTL_MATRIXFREE_SOLVERSTATISTICS_HH
5#define DUNE_PDELAB_BACKEND_ISTL_MATRIXFREE_SOLVERSTATISTICS_HH
6
7#include <vector>
8#include <algorithm>
9#include <numeric>
10#include <iostream>
11
12
13namespace Dune{
14 namespace PDELab{
15
22 template <typename T>
24 T minimum; // Global minimum
25 T maximum; // Global maximum
26 double avg; // Global average
27 double stddev; // Standard deviation
28 size_t size; // Total number of invocations
29 };
30
38 template <typename T>
40 public:
46 : data(), comm(comm_) {}
47
52 void append(const T x) {
53 data.push_back(x);
54 }
55
58 void clear() {
59 data.clear();
60 }
61
66 const size_t size() const {
67 size_t local_size = data.size();
68 size_t global_size = comm.sum(local_size);
69 return global_size;
70 }
71
76 const double avg() const {
77 double s_local = (double) std::accumulate(data.begin(),data.end(),0);
78 size_t local_size = data.size();
79 double global_size = (double) comm.sum(local_size);
80 double s_global = comm.sum(s_local);
81 return s_global / global_size;
82 }
83
88 const double stddev() const {
89 using std::sqrt;
90 double s_local = (double) std::accumulate(data.begin(),data.end(),0);
91 double ss_local = (double) std::inner_product(data.begin(),data.end(),
92 data.begin(),0);
93 size_t local_size = data.size();
94 double global_size = (double) comm.sum(local_size);
95 double s_global = comm.sum(s_local);
96 double ss_global = comm.sum(ss_local);
97 return sqrt(1./(global_size-1.)*(ss_global-s_global*s_global/global_size));
98 }
99
104 const T min() const {
105 T min_local = *std::min_element(data.begin(),data.end());
106 T min_global = comm.min(min_local);
107 return min_global;
108 }
109
114 const T max() const {
115 T max_local = *std::max_element(data.begin(),data.end());
116 T max_global = comm.max(max_local);
117 return max_global;
118 }
119
124 result.minimum = min();
125 result.maximum = max();
126 result.avg = avg();
127 result.stddev = stddev();
128 result.size = size();
129 return result;
130 }
131
132 private:
133 // \brief local data
134 std::vector<T> data;
135 // \brief Collective communication object
137 };
138
140 template <typename T>
142 os << "#calls = " << result.size;
143 os << ", min = " << std::fixed << result.minimum;
144 os << ", avg = " << std::fixed << result.avg;
145 os << ", stddev = " << std::fixed << result.stddev;
146 os << ", max = " << std::fixed << result.maximum;
147 return os;
148 }
149
150 } // namespace PDELab
151} // namespace Dune
152
153#endif
std::ostream & operator<<(std::ostream &os, const StatisticsResult< T > &result)
Write statistics result to out stream.
Definition solverstatistics.hh:141
For backward compatibility – Do not use this!
Statistics result structure.
Definition solverstatistics.hh:23
double stddev
Definition solverstatistics.hh:27
T maximum
Definition solverstatistics.hh:25
T minimum
Definition solverstatistics.hh:24
size_t size
Definition solverstatistics.hh:28
double avg
Definition solverstatistics.hh:26
Class for collecting statistics over several invocations.
Definition solverstatistics.hh:39
const size_t size() const
Total number of calls.
Definition solverstatistics.hh:66
const double stddev() const
Calculate standard deviation.
Definition solverstatistics.hh:88
const StatisticsResult< T > result() const
Convert to statistics result.
Definition solverstatistics.hh:122
SolverStatistics(const Dune::CollectiveCommunication< MPI_Comm > &comm_)
Create new instance of class.
Definition solverstatistics.hh:45
void append(const T x)
Add new data point.
Definition solverstatistics.hh:52
void clear()
clear out data
Definition solverstatistics.hh:58
const T max() const
Calculate global maximum.
Definition solverstatistics.hh:114
const T min() const
Calculate global minimum.
Definition solverstatistics.hh:104
const double avg() const
Calculate global average.
Definition solverstatistics.hh:76
T accumulate(T... args)
T fixed(T... args)
T inner_product(T... args)
T max_element(T... args)
T min_element(T... args)
T sqrt(T... args)