pairinteraction
A Rydberg Interaction Calculator
KetPair.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
8
9#include <complex>
10#include <initializer_list>
11#include <memory>
12#include <string>
13#include <type_traits>
14#include <vector>
15
16namespace pairinteraction {
17template <typename Scalar>
18class BasisPairCreator;
19
20template <typename Scalar>
21class BasisAtom;
22
23template <typename Scalar>
24class KetPair : public Ket {
26
27 using real_t = typename traits::NumTraits<Scalar>::real_t;
28
29 friend class BasisPairCreator<Scalar>;
30 struct Private {};
31
32public:
33 KetPair(Private /*unused*/, std::initializer_list<size_t> atomic_indices,
34 std::initializer_list<std::shared_ptr<const BasisAtom<Scalar>>> atomic_bases,
36
37 std::string get_label() const override;
38 std::shared_ptr<KetPair<Scalar>>
39 get_ket_for_different_quantum_number_m(real_t new_quantum_number_m) const;
40 std::vector<std::shared_ptr<const BasisAtom<Scalar>>> get_atomic_states() const;
41
42 bool operator==(const KetPair<Scalar> &other) const;
43 bool operator!=(const KetPair<Scalar> &other) const;
44
45 struct hash {
46 std::size_t operator()(const KetPair<Scalar> &k) const;
47 };
48
49private:
50 std::vector<size_t> atomic_indices;
51 std::vector<std::shared_ptr<const BasisAtom<Scalar>>> atomic_bases;
52 static real_t
53 calculate_quantum_number_f(const std::vector<size_t> &indices,
54 const std::vector<std::shared_ptr<const BasisAtom<Scalar>>> &bases);
55 static real_t
56 calculate_quantum_number_m(const std::vector<size_t> &indices,
57 const std::vector<std::shared_ptr<const BasisAtom<Scalar>>> &bases);
58 static Parity
59 calculate_parity(const std::vector<size_t> &indices,
60 const std::vector<std::shared_ptr<const BasisAtom<Scalar>>> &bases);
61};
62
63extern template class KetPair<double>;
64extern template class KetPair<std::complex<double>>;
65} // namespace pairinteraction
Class for creating a basis of atomic kets.
Definition: BasisAtom.hpp:40
bool operator==(const KetPair< Scalar > &other) const
Definition: KetPair.cpp:64
std::string get_label() const override
Definition: KetPair.cpp:30
std::vector< std::shared_ptr< const BasisAtom< Scalar > > > get_atomic_states() const
Definition: KetPair.cpp:54
bool operator!=(const KetPair< Scalar > &other) const
Definition: KetPair.cpp:70
std::shared_ptr< KetPair< Scalar > > get_ket_for_different_quantum_number_m(real_t new_quantum_number_m) const
Definition: KetPair.cpp:45
KetPair(Private, std::initializer_list< size_t > atomic_indices, std::initializer_list< std::shared_ptr< const BasisAtom< Scalar > > > atomic_bases, real_t energy)
Definition: KetPair.cpp:16
Base class for a ket.
Definition: Ket.hpp:25
std::size_t operator()(const KetPair< Scalar > &k) const
Definition: KetPair.cpp:75
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35