3#if defined(TTK_ENABLE_MPI) && defined(TTK_ENABLE_OPENMP)
8#include <unordered_map>
10ttk::DiscreteMorseSandwichMPI::DiscreteMorseSandwichMPI() {
11 this->setDebugMsgPrefix(
"DiscreteMorseSandwichMPI");
13 hasMPISupport_ =
true;
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 {
25 const auto dim = this->dg_.getDimensionality();
28 std::vector<std::vector<std::string>> rows{
29 {
" #Min-saddle pairs",
31 std::count_if(pairs.begin(), pairs.end(),
33 {
" #Saddle-saddle pairs",
34 std::to_string(dim == 3 ? std::count_if(
35 pairs.begin(), pairs.end(),
38 {
" #Saddle-max pairs",
39 std::to_string(std::count_if(
40 pairs.begin(), pairs.end(),
45 std::vector<size_t> nCritCells(dim + 1);
46 std::vector<size_t> nNonPairedCritCells(dim + 1);
48 for(
int i = 0; i < dim + 1; ++i) {
49 nCritCells[i] = criticalCellsByDim[i].size();
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])) {
59 nNonPairedCritCells[i] = nNonPaired;
62 std::vector<std::string> critCellsLabels{
"Minima"};
64 critCellsLabels.emplace_back(
"1-saddles");
67 critCellsLabels.emplace_back(
"2-saddles");
69 critCellsLabels.emplace_back(
"Maxima");
71 for(
int i = 0; i < dim + 1; ++i) {
72 const std::string unpaired{nNonPairedCritCells[i] == 0
74 :
" (" + std::to_string(nNonPairedCritCells[i])
77 rows.emplace_back(std::vector<std::string>{
78 " #" + critCellsLabels[i], std::to_string(nCritCells[i]) + unpaired});
printMsg(debug::output::BOLD+" | | | | | . \\ | | (__| | / __/| |_| / __/| (_) |"+debug::output::ENDCOLOR, debug::Priority::PERFORMANCE, debug::LineMode::NEW, stream)