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