Line data Source code
1 : // SPDX-FileCopyrightText: 2024 PairInteraction Developers 2 : // SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : #include "pairinteraction/ket/KetAtomCreator.hpp" 5 : 6 : #include "pairinteraction/database/Database.hpp" 7 : #include "pairinteraction/ket/KetAtom.hpp" 8 : 9 : #include <doctest/doctest.h> 10 : 11 : namespace pairinteraction { 12 1 : DOCTEST_TEST_CASE("create a ket for rubidium") { 13 1 : Database &database = Database::get_global_instance(); 14 1 : auto ket = KetAtomCreator("Rb", 60, 1, 0.5, 0.5).create(database); 15 1 : DOCTEST_CHECK(ket->get_species() == "Rb"); 16 1 : DOCTEST_CHECK(ket->get_quantum_number("n") == 60); 17 1 : DOCTEST_CHECK(ket->get_quantum_number("l") == 1); 18 1 : DOCTEST_CHECK(ket->get_quantum_number("f") == 0.5); 19 1 : DOCTEST_CHECK(ket->get_quantum_number("j") == 0.5); 20 1 : DOCTEST_CHECK(ket->get_quantum_number("m") == 0.5); 21 1 : DOCTEST_CHECK(ket->get_quantum_number("s") == 0.5); 22 1 : DOCTEST_CHECK(ket->get_quantum_number("parity") == -1); // odd parity 23 1 : } 24 : 25 1 : DOCTEST_TEST_CASE("create a ket for strontium") { 26 1 : Database &database = Database::get_global_instance(); 27 1 : auto ket = KetAtomCreator() 28 2 : .set_species("Sr88_sqdt") 29 2 : .set_quantum_number("n", 60) 30 2 : .set_quantum_number("l", 1) 31 2 : .set_quantum_number("f", 1) 32 2 : .set_quantum_number("m", 0) 33 2 : .set_quantum_number("s", 0) 34 1 : .create(database); 35 1 : DOCTEST_CHECK(ket->get_species() == "Sr88_sqdt"); 36 1 : DOCTEST_CHECK(ket->get_quantum_number("n") == 60); 37 1 : DOCTEST_CHECK(ket->get_quantum_number("f") == 1); 38 1 : DOCTEST_CHECK(ket->get_quantum_number("m") == 0); 39 1 : DOCTEST_CHECK(ket->get_quantum_number("parity") == -1); // odd parity 40 1 : } 41 : 42 1 : DOCTEST_TEST_CASE("quantum number std fallback") { 43 1 : Database &database = Database::get_global_instance(); 44 : 45 : // n, f, and nu have no "std_<name>" column in the states table, so get_quantum_number_std 46 : // falls back to 0. 47 1 : auto ket = KetAtomCreator("Rb", 60, 0, 0.5, 0.5).create(database); 48 1 : DOCTEST_CHECK(ket->get_quantum_number_std("n") == 0); 49 1 : DOCTEST_CHECK(ket->get_quantum_number_std("f") == 0); 50 1 : DOCTEST_CHECK(ket->get_quantum_number_std("nu") == 0); 51 : 52 : // For an MQDT ket, quantum numbers that do have a "std_<name>" column report a nonzero spread, 53 : // confirming the zeros above come from the fallback and not from a stored value that is zero. 54 1 : auto ket_mqdt = KetAtomCreator() 55 2 : .set_species("Yb171_mqdt") 56 2 : .set_quantum_number("nu", 60) 57 2 : .set_quantum_number("l", 0) 58 2 : .set_quantum_number("f", 0.5) 59 2 : .set_quantum_number("m", 0.5) 60 1 : .create(database); 61 1 : DOCTEST_CHECK(ket_mqdt->get_quantum_number_std("l") > 0); 62 1 : DOCTEST_CHECK(ket_mqdt->get_quantum_number_std("n") == 0); 63 1 : } 64 : 65 1 : DOCTEST_TEST_CASE("test for equality") { 66 1 : Database &database = Database::get_global_instance(); 67 1 : auto ket1 = KetAtomCreator("Rb", 60, 1, 0.5, 0.5).create(database); 68 1 : auto ket2 = KetAtomCreator("Rb", 60, 1, 0.5, 0.5).create(database); 69 1 : auto ket3 = KetAtomCreator("Rb", 60, 1, 1.5, 0.5).create(database); 70 1 : DOCTEST_CHECK(*ket1 == *ket2); 71 1 : DOCTEST_CHECK(*ket1 != *ket3); 72 1 : } 73 : 74 : } // namespace pairinteraction