pairinteraction
A Rydberg Interaction Calculator
diagonalize.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
6#include <functional>
7#include <initializer_list>
8#include <optional>
9#include <vector>
10
11namespace pairinteraction {
12template <typename Scalar>
13class DiagonalizerInterface;
14
15// Note that although a vector is also constructible from a list, the overload resolution
16// will prefer the initializer list overload because of less conversions required.
17
18template <typename Derived>
19void diagonalize(std::initializer_list<std::reference_wrapper<Derived>> systems,
20 const DiagonalizerInterface<typename Derived::scalar_t> &diagonalizer,
21 std::optional<typename Derived::real_t> min_eigenenergy = {},
22 std::optional<typename Derived::real_t> max_eigenenergy = {}, double rtol = 1e-6);
23
24template <typename Derived>
25void diagonalize(std::vector<Derived> &systems,
26 const DiagonalizerInterface<typename Derived::scalar_t> &diagonalizer,
27 std::optional<typename Derived::real_t> min_eigenenergy = {},
28 std::optional<typename Derived::real_t> max_eigenenergy = {}, double rtol = 1e-6);
29
30template <typename Derived>
31void diagonalize(std::vector<std::reference_wrapper<Derived>> systems,
32 const DiagonalizerInterface<typename Derived::scalar_t> &diagonalizer,
33 std::optional<typename Derived::real_t> min_eigenenergy = {},
34 std::optional<typename Derived::real_t> max_eigenenergy = {}, double rtol = 1e-6);
35
36} // namespace pairinteraction
void diagonalize(std::initializer_list< std::reference_wrapper< Derived > > systems, const DiagonalizerInterface< typename Derived::scalar_t > &diagonalizer, std::optional< typename Derived::real_t > min_eigenenergy={}, std::optional< typename Derived::real_t > max_eigenenergy={}, double rtol=1e-6)
Definition: diagonalize.cpp:17