20#include <doctest/doctest.h>
21#include <fmt/ranges.h>
36 .restrict_quantum_number_n(60, 61)
37 .restrict_quantum_number_l(0, 1)
38 .restrict_quantum_number_m(-0.5, 0.5)
45 diagonalize<SystemAtom<double>>({system1, system2}, diagonalizer);
49 DOCTEST_MESSAGE(
"Number of states in pair basis: ", basis_pair->get_number_of_states());
53 system_pair.diagonalize(diagonalizer);
56 auto eigenenergies = system_pair.get_eigenenergies();
57 DOCTEST_MESSAGE(
"Lowest energy: ", eigenenergies.minCoeff());
58 DOCTEST_MESSAGE(
"Highest energy: ", eigenenergies.maxCoeff());
64 auto diagonalizer = DiagonalizerLapackeEvr<double>();
67 auto ket = KetAtomCreator()
69 .set_quantum_number_n(60)
70 .set_quantum_number_l(0)
71 .set_quantum_number_j(0.5)
72 .set_quantum_number_m(0.5)
76 auto basis = BasisAtomCreator<double>()
78 .restrict_quantum_number_n(ket->get_quantum_number_n() - 3,
79 ket->get_quantum_number_n() + 3)
80 .restrict_quantum_number_l(ket->get_quantum_number_l() - 1,
81 ket->get_quantum_number_l() + 1)
83 SystemAtom<double> system(basis);
86 auto basis_pair = BasisPairCreator<double>()
92 DOCTEST_MESSAGE(
"Number of states in pair basis: ", basis_pair->get_number_of_states());
94 auto system_pair = SystemPair<double>(basis_pair);
96 system_pair.diagonalize(diagonalizer, 2 * ket->get_energy() - 0.5 /
HARTREE_IN_GHZ,
100 auto eigenenergies = system_pair.get_eigenenergies();
101 DOCTEST_MESSAGE(
"Lowest energy: ", eigenenergies.minCoeff());
102 DOCTEST_MESSAGE(
"Highest energy: ", eigenenergies.maxCoeff());
Builder class for creating BasisAtom objects.
BasisAtomCreator< Scalar > & set_species(const std::string &value)
BasisPairCreator< Scalar > & add(const SystemAtom< Scalar > &system_atom)
static Database & get_global_instance()
Type & set_electric_field(const std::array< real_t, 3 > &field)
constexpr double UM_IN_ATOMIC_UNITS
constexpr double HARTREE_IN_GHZ
DOCTEST_TEST_CASE("create a basis for strontium 88")
constexpr double VOLT_PER_CM_IN_ATOMIC_UNITS