SpECTRE Documentation Coverage Report
Current view: top level - Parallel - DomainDiagnosticInfo.hpp Hit Total Coverage
Commit: 2c4f624839e832d3d5b2abc37601f7e1f9a600c9 Lines: 1 2 50.0 %
Date: 2024-05-04 01:01:37
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include <cstddef>
       7             : #include <sstream>
       8             : #include <string>
       9             : #include <vector>
      10             : 
      11             : #include "Parallel/GlobalCache.hpp"
      12             : #include "Parallel/Info.hpp"
      13             : #include "Utilities/ErrorHandling/Assert.hpp"
      14             : #include "Utilities/Numeric.hpp"
      15             : #include "Utilities/StdHelpers.hpp"
      16             : 
      17             : namespace domain {
      18             : /// Returns a `std::string` with diagnostic information about how elements and
      19             : /// grid points are distributed on the nodes and cores.
      20             : template <typename Metavariables>
      21           1 : std::string diagnostic_info(const size_t total_number_of_blocks,
      22             :                             const Parallel::GlobalCache<Metavariables>& cache,
      23             :                             const std::vector<size_t>& elements_per_core,
      24             :                             const std::vector<size_t>& elements_per_node,
      25             :                             const std::vector<size_t>& grid_points_per_core,
      26             :                             const std::vector<size_t>& grid_points_per_node) {
      27             :   const size_t total_number_of_elements =
      28             :       alg::accumulate(elements_per_node, 0_st);
      29             :   const size_t total_number_of_grid_points =
      30             :       alg::accumulate(grid_points_per_node, 0_st);
      31             :   const size_t number_of_cores = Parallel::number_of_procs<size_t>(cache);
      32             :   const size_t number_of_nodes = Parallel::number_of_nodes<size_t>(cache);
      33             : 
      34             :   // Sanity checks
      35             :   ASSERT(total_number_of_elements == alg::accumulate(elements_per_core, 0_st),
      36             :          "Number of elements determined from elements_per_core ("
      37             :              << alg::accumulate(elements_per_core, 0_st)
      38             :              << ") does not match number of elements determined from "
      39             :                 "elements_per_node ("
      40             :              << total_number_of_elements << ").");
      41             :   ASSERT(total_number_of_grid_points ==
      42             :              alg::accumulate(grid_points_per_core, 0_st),
      43             :          "Number of grid points determined from grid_points_per_core ("
      44             :              << alg::accumulate(grid_points_per_core, 0_st)
      45             :              << ") does not match number of grid points determined from "
      46             :                 "grid points_per_node ("
      47             :              << total_number_of_grid_points << ").");
      48             :   ASSERT(number_of_cores == elements_per_core.size(),
      49             :          "Number of cores determined from elements_per_core ("
      50             :              << elements_per_core.size()
      51             :              << ") does not match number of cores determined from "
      52             :                 "global cache ("
      53             :              << number_of_cores << ").");
      54             :   ASSERT(number_of_cores == grid_points_per_core.size(),
      55             :          "Number of cores determined from grid_points_per_core ("
      56             :              << grid_points_per_core.size()
      57             :              << ") does not match number of cores determined from "
      58             :                 "global cache ("
      59             :              << number_of_cores << ").");
      60             :   ASSERT(number_of_nodes == elements_per_node.size(),
      61             :          "Number of nodes determined from elements_per_node ("
      62             :              << elements_per_node.size()
      63             :              << ") does not match number of nodes determined from "
      64             :                 "global cache ("
      65             :              << number_of_nodes << ").");
      66             :   ASSERT(number_of_nodes == grid_points_per_node.size(),
      67             :          "Number of nodes determined from grid_points_per_node ("
      68             :              << grid_points_per_node.size()
      69             :              << ") does not match number of nodes determined from "
      70             :                 "global cache ("
      71             :              << number_of_nodes << ").");
      72             : 
      73             :   using ::operator<<;
      74             :   std::stringstream ss{};
      75             :   ss << "----- Domain Info -----\n"
      76             :      << "Total blocks: " << total_number_of_blocks << "\n"
      77             :      << "Total elements: " << total_number_of_elements << "\n"
      78             :      << "Total grid points: " << total_number_of_grid_points << "\n"
      79             :      << "Number of cores: " << number_of_cores << "\n"
      80             :      << "Number of nodes: " << number_of_nodes << "\n"
      81             :      << "Elements per core: " << elements_per_core << "\n"
      82             :      << "Elements per node: " << elements_per_node << "\n"
      83             :      << "Grid points per core: " << grid_points_per_core << "\n"
      84             :      << "Grid points per node: " << grid_points_per_node << "\n"
      85             :      << "-----------------------\n";
      86             : 
      87             :   return ss.str();
      88             : }
      89             : }  // namespace domain

Generated by: LCOV version 1.14