TTK
Loading...
Searching...
No Matches
DiscreteMorseSandwichMPI.cpp
Go to the documentation of this file.
2
3#if defined(TTK_ENABLE_MPI) && defined(TTK_ENABLE_OPENMP)
4#include <algorithm>
5#include <array>
6#include <random>
7#include <string>
8#include <unordered_map>
9
10ttk::DiscreteMorseSandwichMPI::DiscreteMorseSandwichMPI() {
11 this->setDebugMsgPrefix("DiscreteMorseSandwichMPI");
12#ifdef TTK_ENABLE_MPI
13 hasMPISupport_ = true;
14#endif
15}
16
17void ttk::DiscreteMorseSandwichMPI::displayStats(
18 const std::vector<PersistencePair> &pairs,
19 const std::array<std::vector<SimplexId>, 4> &criticalCellsByDim,
20 const std::vector<bool> &pairedMinima,
21 const std::vector<bool> &paired1Saddles,
22 const std::vector<bool> &paired2Saddles,
23 const std::vector<bool> &pairedMaxima) const {
24
25 const auto dim = this->dg_.getDimensionality();
26
27 // display number of pairs per pair type
28 std::vector<std::vector<std::string>> rows{
29 {" #Min-saddle pairs",
30 std::to_string(
31 std::count_if(pairs.begin(), pairs.end(),
32 [](const PersistencePair &a) { return a.type == 0; }))},
33 {" #Saddle-saddle pairs",
34 std::to_string(dim == 3 ? std::count_if(
35 pairs.begin(), pairs.end(),
36 [](const PersistencePair &a) { return a.type == 1; })
37 : 0)},
38 {" #Saddle-max pairs",
39 std::to_string(std::count_if(
40 pairs.begin(), pairs.end(),
41 [dim](const PersistencePair &a) { return a.type == dim - 1; }))},
42 };
43
44 // display number of critical cells (paired and unpaired)
45 std::vector<size_t> nCritCells(dim + 1);
46 std::vector<size_t> nNonPairedCritCells(dim + 1);
47
48 for(int i = 0; i < dim + 1; ++i) {
49 nCritCells[i] = criticalCellsByDim[i].size();
50 size_t nNonPaired{};
51 for(size_t j = 0; j < criticalCellsByDim[i].size(); ++j) {
52 const auto cell = criticalCellsByDim[i][j];
53 if((i == 0 && !pairedMinima[cell]) || (i == 1 && !paired1Saddles[cell])
54 || (i == 2 && dim == 3 && !paired2Saddles[cell])
55 || (i == dim && !pairedMaxima[cell])) {
56 nNonPaired++;
57 }
58 }
59 nNonPairedCritCells[i] = nNonPaired;
60 }
61
62 std::vector<std::string> critCellsLabels{"Minima"};
63 if(dim >= 2) {
64 critCellsLabels.emplace_back("1-saddles");
65 }
66 if(dim >= 3) {
67 critCellsLabels.emplace_back("2-saddles");
68 }
69 critCellsLabels.emplace_back("Maxima");
70
71 for(int i = 0; i < dim + 1; ++i) {
72 const std::string unpaired{nNonPairedCritCells[i] == 0
73 ? " (all paired)"
74 : " (" + std::to_string(nNonPairedCritCells[i])
75 + " unpaired)"};
76
77 rows.emplace_back(std::vector<std::string>{
78 " #" + critCellsLabels[i], std::to_string(nCritCells[i]) + unpaired});
79 }
81}
82
83#endif // TTK_ENABLE_MPI
printMsg(debug::output::BOLD+" | | | | | . \\ | | (__| | / __/| |_| / __/| (_) |"+debug::output::ENDCOLOR, debug::Priority::PERFORMANCE, debug::LineMode::NEW, stream)