pairinteraction
A Rydberg Interaction Calculator
SystemAtom.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
8
9#include <array>
10#include <limits>
11#include <memory>
12#include <vector>
13
14namespace pairinteraction {
15template <typename Scalar>
16class OperatorAtom;
17
18template <typename Scalar>
19class BasisAtom;
20
21class KetAtom;
22
23template <typename T>
24class SystemAtom;
25
26template <typename Scalar>
28 using scalar_t = Scalar;
30 using ket_t = KetAtom;
31 using ketvec_t = std::vector<std::shared_ptr<const ket_t>>;
34};
35
36template <typename Scalar>
37class SystemAtom : public System<SystemAtom<Scalar>> {
38public:
40
44
45 SystemAtom(std::shared_ptr<const basis_t> basis);
46
47 Type &set_electric_field(const std::array<real_t, 3> &field);
48 Type &set_magnetic_field(const std::array<real_t, 3> &field);
49 Type &set_diamagnetism_enabled(bool enable);
50 Type &set_ion_distance_vector(const std::array<real_t, 3> &vector);
51 Type &set_ion_charge(real_t charge);
53
54private:
55 std::array<real_t, 3> electric_field{0, 0, 0};
56 std::array<real_t, 3> magnetic_field{0, 0, 0};
57 bool diamagnetism_enabled{false};
58 std::array<real_t, 3> ion_distance_vector{0, 0, std::numeric_limits<real_t>::infinity()};
59 real_t ion_charge{1};
60 int ion_interaction_order{3};
61
62 void construct_hamiltonian() const override;
63};
64
65extern template class SystemAtom<double>;
66extern template class SystemAtom<std::complex<double>>;
67} // namespace pairinteraction
Class for creating a basis of atomic kets.
Definition: BasisAtom.hpp:40
Class for representing atomic kets.
Definition: KetAtom.hpp:21
Type & set_ion_charge(real_t charge)
Definition: SystemAtom.cpp:79
typename traits::CrtpTraits< Type >::real_t real_t
Definition: SystemAtom.hpp:42
Type & set_diamagnetism_enabled(bool enable)
Definition: SystemAtom.cpp:56
SystemAtom(std::shared_ptr< const basis_t > basis)
Definition: SystemAtom.cpp:22
typename traits::CrtpTraits< Type >::basis_t basis_t
Definition: SystemAtom.hpp:43
Type & set_electric_field(const std::array< real_t, 3 > &field)
Definition: SystemAtom.cpp:26
Type & set_magnetic_field(const std::array< real_t, 3 > &field)
Definition: SystemAtom.cpp:41
Type & set_ion_distance_vector(const std::array< real_t, 3 > &vector)
Definition: SystemAtom.cpp:64
Type & set_ion_interaction_order(int value)
Definition: SystemAtom.cpp:86
typename traits::NumTraits< Scalar >::real_t real_t
Definition: SystemAtom.hpp:29
std::vector< std::shared_ptr< const ket_t > > ketvec_t
Definition: SystemAtom.hpp:31
Helper struct to extract types from a derived basis type. Must be specialized for each derived basis ...
Definition: traits.hpp:24
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35