pairinteraction
A Rydberg Interaction Calculator
Database.test.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
5
12
13#include <doctest/doctest.h>
14
15namespace pairinteraction {
16DOCTEST_TEST_CASE("get a KetAtom") {
18
20 description.quantum_number_n = 60;
21 description.quantum_number_l = 0;
22 description.quantum_number_m = 0.5;
23
24 auto ket = database.get_ket("Rb", description);
25
26 DOCTEST_MESSAGE("KetAtom: ", *ket);
27}
28
29DOCTEST_TEST_CASE("too large quantum number m") {
31
33 description.quantum_number_n = 60;
34 description.quantum_number_l = 0;
35 description.quantum_number_m = 1.5;
36
37 DOCTEST_CHECK_THROWS(database.get_ket("Rb", description));
38}
39
40DOCTEST_TEST_CASE("not uniquely specified ket") {
42
44 description.quantum_number_n = 60;
45 description.quantum_number_l = 0.9;
46 description.quantum_number_m = 0.5;
47
48 DOCTEST_CHECK_THROWS(database.get_ket("Rb", description));
49}
50
51DOCTEST_TEST_CASE("uniquely specified ket") {
53
55 description.quantum_number_n = 60;
56 description.quantum_number_l = 0.9;
57 description.quantum_number_j = 0.5;
58 description.quantum_number_m = 0.5;
59
60 DOCTEST_CHECK_NOTHROW(database.get_ket("Rb", description));
61}
62
63DOCTEST_TEST_CASE("get a BasisAtom") {
65
66 AtomDescriptionByRanges description;
67 description.range_quantum_number_n = {60, 60};
68 description.range_quantum_number_l = {0, 1};
69
70 auto basis = database.get_basis<double>("Rb", description, {});
71
72 for (const auto &ket : *basis) {
73 DOCTEST_MESSAGE("KetAtom: ", *ket);
74 }
75}
76
77DOCTEST_TEST_CASE("get an OperatorAtom") {
79
80 AtomDescriptionByRanges description;
81 description.range_quantum_number_n = {60, 60};
82 description.range_quantum_number_l = {0, 1};
83
84 auto basis = database.get_basis<double>("Rb", description, {});
85
86 auto dipole =
87 database.get_matrix_elements<double>(basis, basis, OperatorType::ELECTRIC_DIPOLE, 0);
88
89 DOCTEST_MESSAGE("Number of basis states: ", basis->get_number_of_states());
90 DOCTEST_MESSAGE("Number of non-zero entries: ", dipole.nonZeros());
91}
92} // namespace pairinteraction
std::shared_ptr< const KetAtom > get_ket(const std::string &species, const AtomDescriptionByParameters &description)
Definition: Database.cpp:154
static Database & get_global_instance()
Definition: Database.cpp:1068
std::shared_ptr< const BasisAtom< Scalar > > get_basis(const std::string &species, const AtomDescriptionByRanges &description, std::vector< size_t > additional_ket_ids)
Definition: Database.cpp:467
Eigen::SparseMatrix< Scalar, Eigen::RowMajor > get_matrix_elements(std::shared_ptr< const BasisAtom< Scalar > > initial_basis, std::shared_ptr< const BasisAtom< Scalar > > final_basis, OperatorType type, int q)
Definition: Database.cpp:905
DOCTEST_TEST_CASE("create a basis for strontium 88")