Line data Source code
1 : // SPDX-FileCopyrightText: 2024 Pairinteraction Developers 2 : // SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : #include "pairinteraction/database/Database.hpp" 5 : 6 : #include "pairinteraction/basis/BasisAtom.hpp" 7 : #include "pairinteraction/database/AtomDescriptionByParameters.hpp" 8 : #include "pairinteraction/database/AtomDescriptionByRanges.hpp" 9 : #include "pairinteraction/enums/OperatorType.hpp" 10 : #include "pairinteraction/ket/KetAtom.hpp" 11 : #include "pairinteraction/operator/OperatorAtom.hpp" 12 : 13 : #include <doctest/doctest.h> 14 : 15 : namespace pairinteraction { 16 1 : DOCTEST_TEST_CASE("get a KetAtom") { 17 1 : Database &database = Database::get_global_instance(); 18 : 19 1 : AtomDescriptionByParameters description; 20 1 : description.quantum_number_n = 60; 21 1 : description.quantum_number_l = 0; 22 1 : description.quantum_number_m = 0.5; 23 : 24 1 : auto ket = database.get_ket("Rb", description); 25 : 26 1 : DOCTEST_MESSAGE("KetAtom: ", *ket); 27 1 : } 28 : 29 1 : DOCTEST_TEST_CASE("too large quantum number m") { 30 1 : Database &database = Database::get_global_instance(); 31 : 32 1 : AtomDescriptionByParameters description; 33 1 : description.quantum_number_n = 60; 34 1 : description.quantum_number_l = 0; 35 1 : description.quantum_number_m = 1.5; 36 : 37 3 : DOCTEST_CHECK_THROWS(database.get_ket("Rb", description)); 38 1 : } 39 : 40 1 : DOCTEST_TEST_CASE("not uniquely specified ket") { 41 1 : Database &database = Database::get_global_instance(); 42 : 43 1 : AtomDescriptionByParameters description; 44 1 : description.quantum_number_n = 60; 45 1 : description.quantum_number_l = 0.9; 46 1 : description.quantum_number_m = 0.5; 47 : 48 3 : DOCTEST_CHECK_THROWS(database.get_ket("Rb", description)); 49 1 : } 50 : 51 1 : DOCTEST_TEST_CASE("uniquely specified ket") { 52 1 : Database &database = Database::get_global_instance(); 53 : 54 1 : AtomDescriptionByParameters description; 55 1 : description.quantum_number_n = 60; 56 1 : description.quantum_number_l = 0.9; 57 1 : description.quantum_number_j = 0.5; 58 1 : description.quantum_number_m = 0.5; 59 : 60 1 : DOCTEST_CHECK_NOTHROW(database.get_ket("Rb", description)); 61 1 : } 62 : 63 1 : DOCTEST_TEST_CASE("get a BasisAtom") { 64 1 : Database &database = Database::get_global_instance(); 65 : 66 1 : AtomDescriptionByRanges description; 67 1 : description.range_quantum_number_n = {60, 60}; 68 1 : description.range_quantum_number_l = {0, 1}; 69 : 70 1 : auto basis = database.get_basis<double>("Rb", description, {}); 71 : 72 17 : for (const auto &ket : *basis) { 73 8 : DOCTEST_MESSAGE("KetAtom: ", *ket); 74 8 : } 75 1 : } 76 : 77 1 : DOCTEST_TEST_CASE("get an OperatorAtom") { 78 1 : Database &database = Database::get_global_instance(); 79 : 80 1 : AtomDescriptionByRanges description; 81 1 : description.range_quantum_number_n = {60, 60}; 82 1 : description.range_quantum_number_l = {0, 1}; 83 : 84 1 : auto basis = database.get_basis<double>("Rb", description, {}); 85 : 86 : auto dipole = 87 1 : database.get_matrix_elements<double>(basis, basis, OperatorType::ELECTRIC_DIPOLE, 0); 88 : 89 1 : DOCTEST_MESSAGE("Number of basis states: ", basis->get_number_of_states()); 90 1 : DOCTEST_MESSAGE("Number of non-zero entries: ", dipole.nonZeros()); 91 1 : } 92 : } // namespace pairinteraction