pairinteraction
A Rydberg Interaction Calculator
BasisAtom.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 <memory>
11#include <string>
12#include <unordered_map>
13#include <vector>
14
15namespace pairinteraction {
16class Database;
17
18class KetAtom;
19
20template <typename Scalar>
21class BasisAtom;
22
23template <typename Scalar>
25 using scalar_t = Scalar;
27 using ket_t = KetAtom;
28 using ketvec_t = std::vector<std::shared_ptr<const ket_t>>;
29};
30
31/**
32 * @class BasisAtom
33 *
34 * @brief Class for creating a basis of atomic kets.
35 *
36 * @tparam Scalar Complex number type.
37 */
38template <typename Scalar>
39class BasisAtom : public Basis<BasisAtom<Scalar>>,
40 public std::enable_shared_from_this<BasisAtom<Scalar>> {
42
43 friend class Database;
44 struct Private {};
45
46public:
51
52 BasisAtom(Private /*unused*/, ketvec_t &&kets, std::string &&id_of_kets, Database &database);
53 Database &get_database() const;
54 const std::string &get_species() const;
55 const std::string &get_id_of_kets() const;
56
57 int get_ket_index_from_id(size_t ket_id) const;
58
59 Eigen::VectorX<Scalar> get_matrix_elements(std::shared_ptr<const ket_t> ket, OperatorType type,
60 int q = 0) const override;
61 Eigen::SparseMatrix<Scalar, Eigen::RowMajor>
62 get_matrix_elements(std::shared_ptr<const Type> other, OperatorType type,
63 int q = 0) const override;
64
65private:
66 std::string id_of_kets;
67 Database &database;
68 std::string species;
69 std::unordered_map<size_t, size_t> ket_id_to_ket_index;
70};
71
72extern template class BasisAtom<double>;
73extern template class BasisAtom<std::complex<double>>;
74} // namespace pairinteraction
Class for creating a basis of atomic kets.
Definition: BasisAtom.hpp:40
typename traits::CrtpTraits< Type >::real_t real_t
Definition: BasisAtom.hpp:50
int get_ket_index_from_id(size_t ket_id) const
Definition: BasisAtom.cpp:31
const std::string & get_id_of_kets() const
Definition: BasisAtom.cpp:39
BasisAtom(Private, ketvec_t &&kets, std::string &&id_of_kets, Database &database)
Definition: BasisAtom.cpp:11
typename traits::CrtpTraits< Type >::ketvec_t ketvec_t
Definition: BasisAtom.hpp:49
typename traits::CrtpTraits< Type >::ket_t ket_t
Definition: BasisAtom.hpp:48
const std::string & get_species() const
Definition: BasisAtom.cpp:26
Database & get_database() const
Definition: BasisAtom.cpp:21
Eigen::VectorX< Scalar > get_matrix_elements(std::shared_ptr< const ket_t > ket, OperatorType type, int q=0) const override
Definition: BasisAtom.cpp:44
Base class for a basis.
Definition: Basis.hpp:41
Class for representing atomic kets.
Definition: KetAtom.hpp:21
Matrix< Type, Dynamic, 1 > VectorX
std::vector< std::shared_ptr< const ket_t > > ketvec_t
Definition: BasisAtom.hpp:28
typename traits::NumTraits< Scalar >::real_t real_t
Definition: BasisAtom.hpp:26
Helper struct to extract types from a derived basis type. Must be specialized for each derived basis ...
Definition: traits.hpp:24
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35