8#include <spdlog/spdlog.h>
10int main(
int argc,
char **argv) {
16 bool download_missing =
false;
18 for (
int i = 1; i < argc; ++i) {
47 auto basis_ket1_ket2 =
53 double dipole_ket1_ket2_value = dipole_ket1_ket2.
get_matrix().coeff(0, 1);
55 double reference = 1247.5985544327225;
57 if (std::abs(dipole_ket1_ket2_value - reference) >
58 10 * std::numeric_limits<double>::epsilon()) {
59 SPDLOG_ERROR(
"The dipole operator value is not correct. Value: {}", dipole_ket1_ket2_value);
63 dipole_ket1_ket2 = 2 * dipole_ket1_ket2;
64 dipole_ket1_ket2_value = dipole_ket1_ket2.
get_matrix().coeff(0, 1);
66 if (std::abs(dipole_ket1_ket2_value - 2 * reference) >
67 10 * std::numeric_limits<double>::epsilon()) {
68 SPDLOG_ERROR(
"The dipole operator value is not correct after multiplication by a scalar.");
72 dipole_ket1_ket2 = dipole_ket1_ket2 + dipole_ket1_ket2;
73 dipole_ket1_ket2_value = dipole_ket1_ket2.
get_matrix().coeff(0, 1);
75 if (std::abs(dipole_ket1_ket2_value - 4 * reference) >
76 10 * std::numeric_limits<double>::epsilon()) {
77 SPDLOG_ERROR(
"The dipole operator value is not correct after summation.");
83 .set_species(
"Sr88_singlet")
85 .restrict_quantum_number_l(0, 3)
96 SPDLOG_ERROR(
"Wrong dimension.");
101 SPDLOG_ERROR(
"Wrong dimension.");
106 SPDLOG_ERROR(
"Wrong dimension.");
110 if (dipole_0.
get_matrix().nonZeros() != 288) {
111 SPDLOG_ERROR(
"Wrong number of non-zeros.");
115 if (dipole_p.
get_matrix().nonZeros() != 288) {
116 SPDLOG_ERROR(
"Wrong number of non-zeros.");
120 if (dipole_m.
get_matrix().nonZeros() != 288) {
121 SPDLOG_ERROR(
"Wrong number of non-zeros.");
125 return success ? 0 : 1;
Builder class for creating BasisAtom objects.
BasisAtomCreator< Scalar > & append_ket(const std::shared_ptr< const ket_t > &ket)
BasisAtomCreator< Scalar > & restrict_quantum_number_n(int min, int max)
Builder class for creating KetAtom objects.
KetAtomCreator & set_quantum_number_n(int value)
std::shared_ptr< const KetAtom > create(Database &database) const
KetAtomCreator & set_quantum_number_j(double value)
KetAtomCreator & set_quantum_number_l(double value)
KetAtomCreator & set_species(const std::string &value)
KetAtomCreator & set_quantum_number_m(double value)
const Eigen::SparseMatrix< scalar_t, Eigen::RowMajor > & get_matrix() const
bool parse_database_dir(int &i, int argc, char **const argv, std::filesystem::path &database_dir)
bool parse_download_missing(int &i, int argc, char **const argv, bool &download_missing)
int main(int argc, char **argv)