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/AtomDescriptionByParameters.hpp" 7 : #include "pairinteraction/database/Database.hpp" 8 : 9 : #include <cmath> 10 : 11 : namespace pairinteraction { 12 515 : KetAtomCreator::KetAtomCreator(Database &database) : database(database) {} 13 : 14 515 : KetAtomCreator &KetAtomCreator::set_species(const std::string &value) { 15 515 : species.emplace(value); 16 515 : return *this; 17 : } 18 : 19 0 : KetAtomCreator &KetAtomCreator::set_energy(double value) { 20 0 : energy.emplace(value); 21 0 : return *this; 22 : } 23 : 24 2045 : KetAtomCreator &KetAtomCreator::set_quantum_number(const std::string &name, double value) { 25 2045 : if ((name == "f" || name == "m") && 2 * value != std::rint(2 * value)) { 26 0 : throw std::invalid_argument("Quantum number " + name + 27 0 : " must be an integer or half-integer."); 28 : } 29 2045 : if (name == "parity" && value != 1 && value != -1) { 30 0 : throw std::invalid_argument("The parity must be +1 or -1."); 31 : } 32 2045 : quantum_numbers[name] = value; 33 2045 : return *this; 34 : } 35 : 36 515 : std::shared_ptr<const KetAtom> KetAtomCreator::create() const { 37 : 38 515 : if (!species.has_value()) { 39 0 : throw std::runtime_error("Species not set."); 40 : } 41 : 42 515 : AtomDescriptionByParameters description{energy, quantum_numbers}; 43 : 44 1025 : return database.get_ket(species.value(), description); 45 515 : } 46 : } // namespace pairinteraction