pairinteraction
A Rydberg Interaction Calculator
BasisAtomCreator.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
9
10#include <complex>
11#include <memory>
12#include <optional>
13#include <string>
14#include <vector>
15
16namespace pairinteraction {
17template <typename Scalar>
18class BasisAtom;
19
20class KetAtom;
21
22class Database;
23
24/**
25 * @class BasisAtomCreator
26 *
27 * @brief Builder class for creating BasisAtom objects.
28 *
29 * @tparam Scalar Complex number type.
30 */
31template <typename Scalar>
34
35public:
37 using ket_t = KetAtom;
38 BasisAtomCreator() = default;
39 BasisAtomCreator<Scalar> &set_species(const std::string &value);
52 BasisAtomCreator<Scalar> &append_ket(const std::shared_ptr<const ket_t> &ket);
53 std::shared_ptr<const BasisAtom<Scalar>> create(Database &database) const;
54
55private:
56 std::optional<std::string> species;
57 Parity parity{Parity::UNKNOWN};
58 Range<real_t> range_energy;
59 Range<real_t> range_quantum_number_f;
60 Range<real_t> range_quantum_number_m;
61 Range<int> range_quantum_number_n;
62 Range<real_t> range_quantum_number_nu;
63 Range<real_t> range_quantum_number_nui;
64 Range<real_t> range_quantum_number_l;
65 Range<real_t> range_quantum_number_s;
66 Range<real_t> range_quantum_number_j;
67 Range<real_t> range_quantum_number_l_ryd;
68 Range<real_t> range_quantum_number_j_ryd;
69 std::vector<size_t> additional_ket_ids;
70 std::optional<std::string> additional_ket_species;
71};
72
73extern template class BasisAtomCreator<double>;
74extern template class BasisAtomCreator<std::complex<double>>;
75} // namespace pairinteraction
Builder class for creating BasisAtom objects.
BasisAtomCreator< Scalar > & restrict_quantum_number_nui(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_m(real_t min, real_t max)
BasisAtomCreator< Scalar > & append_ket(const std::shared_ptr< const ket_t > &ket)
std::shared_ptr< const BasisAtom< Scalar > > create(Database &database) const
BasisAtomCreator< Scalar > & restrict_quantum_number_l_ryd(real_t min, real_t max)
BasisAtomCreator< Scalar > & set_species(const std::string &value)
BasisAtomCreator< Scalar > & restrict_quantum_number_j_ryd(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_j(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_s(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_n(int min, int max)
BasisAtomCreator< Scalar > & restrict_parity(Parity value)
BasisAtomCreator< Scalar > & restrict_energy(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_f(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_l(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_nu(real_t min, real_t max)
typename traits::NumTraits< Scalar >::real_t real_t
Class for representing atomic kets.
Definition: KetAtom.hpp:21
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35