RealTimeTransport 1.0.0
Real-time simulation of quantum transport processes
Loading...
Searching...
No Matches
AndersonDot.h
Go to the documentation of this file.
1//
2// This Source Code Form is subject to the terms of the Mozilla Public
3// License, v. 2.0. If a copy of the MPL was not distributed with this
4// file, You can obtain one at https://mozilla.org/MPL/2.0/.
5//
6
7///
8/// \file AndersonDot.h
9///
10/// \brief Implements the Anderson quantum dot.
11///
12
13#ifndef REAL_TIME_TRANSPORT_ANDERSON_DOT_H
14#define REAL_TIME_TRANSPORT_ANDERSON_DOT_H
15
16#include "../Model.h"
17
18#include <cereal/archives/binary.hpp>
19#include <cereal/archives/json.hpp>
20#include <cereal/archives/portable_binary.hpp>
21#include <cereal/types/polymorphic.hpp>
22
23#include <SciCore/Definitions.h>
24#include <SciCore/Serialization.h>
25
26namespace RealTimeTransport
27{
28
29///
30/// @ingroup Models
31///
32/// @brief Implements an Anderson quantum dot (single level with spin).
33///
34/// This class implements the Anderson quantum dot model (single level with spin).
35/// The Hamiltonian of the quantum dot is given by
36/// \f[
37/// H = \epsilon (n_\uparrow + n_\downarrow) + \frac{B}{2} (n_\uparrow - n_\downarrow) + U n_\uparrow n_\downarrow.
38/// \f]
39/// It is coupled to the reservoirs via the tunneling Hamiltonian
40/// \f[
41/// H_T = \sum_{r\sigma} \int d\omega \sqrt{\frac{\Gamma_{r\sigma}}{2\pi}} (d^\dagger_\sigma a_{r\sigma}(\omega) + a^\dagger_{r\sigma}(\omega) d_\sigma).
42/// \f]
43/// All operators are represented in the basis \f$ \ket{0}, \ket{\uparrow}=d^\dagger_\uparrow \ket{0}, \ket{\downarrow}=d^\dagger_\downarrow \ket{0}, \ket{\uparrow\downarrow} = d^\dagger_\uparrow d^\dagger_\downarrow \ket{0} \f$.
44///
45class REALTIMETRANSPORT_EXPORT AndersonDot final : public Model
46{
47 public:
48 /// @brief Default constructor.
49 AndersonDot() noexcept = default;
50
51 /// @brief Default move constructor.
52 AndersonDot(AndersonDot&& other) noexcept = default;
53
54 /// @brief Default copy constructor.
55 AndersonDot(const AndersonDot& other) = default;
56
57 /// @brief Default move assignment operator.
58 AndersonDot& operator=(AndersonDot&& other) noexcept = default;
59
60 /// @brief Default copy assignment operator.
61 AndersonDot& operator=(const AndersonDot& other) = default;
62
63 ///
64 /// @brief Constructs a new Anderson dot object.
65 ///
66 /// @param epsilon Level energy
67 /// @param B Magnetic field
68 /// @param U Coulomb interaction
69 /// @param T Temperatures of the reservoirs
70 /// @param mu Chemical potentials of the reservoirs
71 /// @param Gamma Spin-independent dot-reservoir couplings \f$\Gamma_r=\Gamma_{r\uparrow}=\Gamma_{r\downarrow}\f$
72 ///
74 SciCore::Real epsilon,
75 SciCore::Real B,
76 SciCore::Real U,
77 const SciCore::RealVector& T,
78 const SciCore::RealVector& mu,
79 const SciCore::RealVector& Gamma);
80
81 ///
82 /// @brief Constructs a new Anderson dot object.
83 ///
84 /// @param epsilon Level energy
85 /// @param B Magnetic field
86 /// @param U Coulomb interaction
87 /// @param T Temperatures
88 /// @param mu Chemical potentials
89 /// @param GammaUp Dot-reservoir coupling \f$\Gamma_{r\uparrow}\f$
90 /// @param GammaDown Dot-reservoir coupling \f$\Gamma_{r\downarrow}\f$
91 ///
93 SciCore::Real epsilon,
94 SciCore::Real B,
95 SciCore::Real U,
96 const SciCore::RealVector& T,
97 const SciCore::RealVector& mu,
98 const SciCore::RealVector& GammaUp,
99 const SciCore::RealVector& GammaDown);
100
101 ///
102 /// @brief Returns the energy of the level.
103 ///
104 SciCore::Real epsilon() const noexcept;
105
106 ///
107 /// @brief Returns the magnetic field.
108 ///
109 SciCore::Real B() const noexcept;
110
111 ///
112 /// @brief Returns the Coulomb interaction.
113 ///
114 SciCore::Real U() const noexcept;
115
116 ///
117 /// @brief Returns the couplings \f$\Gamma_{r\uparrow}\f$.
118 ///
119 const SciCore::RealVector& GammaUp() const noexcept;
120
121 ///
122 /// @brief Returns the couplings \f$\Gamma_{r\downarrow}\f$.
123 ///
124 const SciCore::RealVector& GammaDown() const noexcept;
125
126 ///
127 /// @brief The Hilbert space dimension is 4.
128 ///
129 int dimHilbertSpace() const noexcept override;
130
131 ///
132 /// @brief The single particle states are \f$\uparrow\f$ and \f$\downarrow\f$, thus returns 2.
133 ///
134 int numStates() const noexcept override;
135
136 ///
137 /// @brief Each reservoir is spinful, thus returns 2.
138 ///
139 int numChannels() const noexcept override;
140
141 ///
142 /// @brief Returns the number of reservoirs the system is connected to.
143 ///
144 int numReservoirs() const override;
145
146 ///
147 /// @brief Returns the Hamiltonian.
148 ///
149 OperatorType H() const override;
150
151 ///
152 /// @brief Returns the annihilation operator of the single particle state indexed by \f$ l=\uparrow\equiv 0 \f$, \f$ \downarrow\equiv 1 \f$.
153 ///
154 OperatorType d(int l) const override;
155
156 SciCore::Complex coupling(int r, int nu, int l) const override;
157 const SciCore::RealVector& temperatures() const noexcept override;
158 const SciCore::RealVector& chemicalPotentials() const noexcept override;
159
160 SupervectorType vectorize(const OperatorType& op) const override;
162 const std::vector<int>& blockDimensions() const noexcept override;
163
164 std::unique_ptr<Model> copy() const override;
165
166 bool isEqual(const Model& other) const override;
167
168 template <class Archive>
169 void serialize(Archive& archive)
170 {
171 archive(_epsilon, _b, _u, _temperatures, _chemicalPotentials, _gammaUp, _gammaDown);
172 }
173
174 private:
175 SciCore::Real _epsilon = 0.0;
176 SciCore::Real _b = 0.0;
177 SciCore::Real _u = 0.0;
178 SciCore::RealVector _temperatures;
179 SciCore::RealVector _chemicalPotentials;
180 SciCore::RealVector _gammaUp;
181 SciCore::RealVector _gammaDown;
182
183 static const std::vector<int> _blockDimensions;
184};
185
186} // namespace RealTimeTransport
187
188CEREAL_REGISTER_TYPE(RealTimeTransport::AndersonDot)
189CEREAL_REGISTER_POLYMORPHIC_RELATION(RealTimeTransport::Model, RealTimeTransport::AndersonDot)
190
191#endif // REAL_TIME_TRANSPORT_ANDERSON_DOT_H
#define REALTIMETRANSPORT_EXPORT
Definition RealTimeTransport_export.h:15
int numChannels() const noexcept override
Each reservoir is spinful, thus returns 2.
SciCore::Complex coupling(int r, int nu, int l) const override
Returns the coupling coefficient in the tunneling Hamiltonian, given by .
bool isEqual(const Model &other) const override
Returns true if other is the same as *this, otherwise false.
SciCore::Real B() const noexcept
Returns the magnetic field.
int numReservoirs() const override
Returns the number of reservoirs the system is connected to.
OperatorType operatorize(const SupervectorType &supervector) const override
Transforms a supervector back into operator form.
SciCore::Real U() const noexcept
Returns the Coulomb interaction.
AndersonDot() noexcept=default
Default constructor.
AndersonDot(AndersonDot &&other) noexcept=default
Default move constructor.
AndersonDot & operator=(const AndersonDot &other)=default
Default copy assignment operator.
SciCore::Real epsilon() const noexcept
Returns the energy of the level.
std::unique_ptr< Model > copy() const override
Returns a deep copy of the model.
AndersonDot & operator=(AndersonDot &&other) noexcept=default
Default move assignment operator.
const std::vector< int > & blockDimensions() const noexcept override
The memory kernel and propagator are block diagonal. This function returns a reference to a vector co...
int numStates() const noexcept override
The single particle states are and , thus returns 2.
OperatorType d(int l) const override
Returns the annihilation operator of the single particle state indexed by , .
const SciCore::RealVector & GammaDown() const noexcept
Returns the couplings .
const SciCore::RealVector & temperatures() const noexcept override
Returns the temperatures of the reservoirs the system is connected to.
const SciCore::RealVector & GammaUp() const noexcept
Returns the couplings .
OperatorType H() const override
Returns the Hamiltonian.
AndersonDot(SciCore::Real epsilon, SciCore::Real B, SciCore::Real U, const SciCore::RealVector &T, const SciCore::RealVector &mu, const SciCore::RealVector &GammaUp, const SciCore::RealVector &GammaDown)
Constructs a new Anderson dot object.
SupervectorType vectorize(const OperatorType &op) const override
Vectorizes an operator into its supervector form.
AndersonDot(const AndersonDot &other)=default
Default copy constructor.
int dimHilbertSpace() const noexcept override
The Hilbert space dimension is 4.
AndersonDot(SciCore::Real epsilon, SciCore::Real B, SciCore::Real U, const SciCore::RealVector &T, const SciCore::RealVector &mu, const SciCore::RealVector &Gamma)
Constructs a new Anderson dot object.
const SciCore::RealVector & chemicalPotentials() const noexcept override
Returns the chemical potentials of the reservoirs the system is connected to.
Abstract class representing a model.
Definition Model.h:47