LCOV - code coverage report
Current view: top level - src/diagonalize - diagonalize.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 12 18 66.7 %
Date: 2025-04-29 15:56:08 Functions: 8 24 33.3 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2024 Pairinteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include "pairinteraction/diagonalize/diagonalize.hpp"
       5             : 
       6             : #include "pairinteraction/system/SystemAtom.hpp"
       7             : #include "pairinteraction/system/SystemPair.hpp"
       8             : #include "pairinteraction/utils/Range.hpp"
       9             : 
      10             : #include <complex>
      11             : #include <oneapi/tbb.h>
      12             : #include <optional>
      13             : 
      14             : namespace pairinteraction {
      15             : 
      16             : template <typename Derived>
      17           2 : void diagonalize(std::initializer_list<std::reference_wrapper<Derived>> systems,
      18             :                  const DiagonalizerInterface<typename Derived::scalar_t> &diagonalizer,
      19             :                  std::optional<typename Derived::real_t> min_eigenenergy,
      20             :                  std::optional<typename Derived::real_t> max_eigenenergy, double rtol) {
      21           2 :     oneapi::tbb::parallel_for(
      22          14 :         oneapi::tbb::blocked_range(systems.begin(), systems.end()), [&](const auto &range) {
      23           8 :             for (auto &system : range) {
      24           4 :                 system.get().diagonalize(diagonalizer, min_eigenenergy, max_eigenenergy, rtol);
      25             :             }
      26             :         });
      27           2 : }
      28             : 
      29             : template <typename Derived>
      30           2 : void diagonalize(std::vector<Derived> &systems,
      31             :                  const DiagonalizerInterface<typename Derived::scalar_t> &diagonalizer,
      32             :                  std::optional<typename Derived::real_t> min_eigenenergy,
      33             :                  std::optional<typename Derived::real_t> max_eigenenergy, double rtol) {
      34           2 :     oneapi::tbb::parallel_for(
      35          18 :         oneapi::tbb::blocked_range(systems.begin(), systems.end()), [&](const auto &range) {
      36          32 :             for (auto &system : range) {
      37          16 :                 system.diagonalize(diagonalizer, min_eigenenergy, max_eigenenergy, rtol);
      38             :             }
      39             :         });
      40           2 : }
      41             : 
      42             : template <typename Derived>
      43           0 : void diagonalize(std::vector<std::reference_wrapper<Derived>> systems,
      44             :                  const DiagonalizerInterface<typename Derived::scalar_t> &diagonalizer,
      45             :                  std::optional<typename Derived::real_t> min_eigenenergy,
      46             :                  std::optional<typename Derived::real_t> max_eigenenergy, double rtol) {
      47           0 :     oneapi::tbb::parallel_for(
      48           0 :         oneapi::tbb::blocked_range(systems.begin(), systems.end()), [&](const auto &range) {
      49           0 :             for (auto &system : range) {
      50           0 :                 system.get().diagonalize(diagonalizer, min_eigenenergy, max_eigenenergy, rtol);
      51             :             }
      52             :         });
      53           0 : }
      54             : 
      55             : // Explicit instantiations
      56             : // NOLINTBEGIN(bugprone-macro-parentheses, cppcoreguidelines-macro-usage)
      57             : #define INSTANTIATE_DIAGONALIZE_HELPER(SCALAR, TYPE)                                               \
      58             :     template void diagonalize(std::initializer_list<std::reference_wrapper<TYPE<SCALAR>>> systems, \
      59             :                               const DiagonalizerInterface<TYPE<SCALAR>::scalar_t> &diagonalizer,   \
      60             :                               std::optional<TYPE<SCALAR>::real_t> min_eigenenergy,                 \
      61             :                               std::optional<TYPE<SCALAR>::real_t> max_eigenenergy, double rtol);   \
      62             :     template void diagonalize(std::vector<TYPE<SCALAR>> &systems,                                  \
      63             :                               const DiagonalizerInterface<TYPE<SCALAR>::scalar_t> &diagonalizer,   \
      64             :                               std::optional<TYPE<SCALAR>::real_t> min_eigenenergy,                 \
      65             :                               std::optional<TYPE<SCALAR>::real_t> max_eigenenergy, double rtol);   \
      66             :     template void diagonalize(std::vector<std::reference_wrapper<TYPE<SCALAR>>> systems,           \
      67             :                               const DiagonalizerInterface<TYPE<SCALAR>::scalar_t> &diagonalizer,   \
      68             :                               std::optional<TYPE<SCALAR>::real_t> min_eigenenergy,                 \
      69             :                               std::optional<TYPE<SCALAR>::real_t> max_eigenenergy, double rtol);
      70             : #define INSTANTIATE_DIAGONALIZE(SCALAR)                                                            \
      71             :     INSTANTIATE_DIAGONALIZE_HELPER(SCALAR, SystemAtom)                                             \
      72             :     INSTANTIATE_DIAGONALIZE_HELPER(SCALAR, SystemPair)
      73             : // NOLINTEND(bugprone-macro-parentheses, cppcoreguidelines-macro-usage)
      74             : 
      75             : INSTANTIATE_DIAGONALIZE(double)
      76             : INSTANTIATE_DIAGONALIZE(std::complex<double>)
      77             : 
      78             : #undef INSTANTIATE_DIAGONALIZE_HELPER
      79             : #undef INSTANTIATE_DIAGONALIZE
      80             : 
      81             : } // namespace pairinteraction

Generated by: LCOV version 1.16