13#ifndef REAL_TIME_TRANSPORT_DOUBLE_DOT_H
14#define REAL_TIME_TRANSPORT_DOUBLE_DOT_H
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>
23#include <SciCore/Definitions.h>
24#include <SciCore/Serialization.h>
26namespace RealTimeTransport
58 DoubleDot&
operator=(DoubleDot&& other)
noexcept =
default;
61 DoubleDot&
operator=(
const DoubleDot& other) =
default;
76 SciCore::Real epsilon1,
77 SciCore::Real epsilon2,
79 SciCore::Complex Omega,
80 const SciCore::RealVector& T,
81 const SciCore::RealVector& mu,
82 const SciCore::RealVector& Gamma1,
83 const SciCore::RealVector& Gamma2);
147 return _temperatures;
152 return _chemicalPotentials;
163 const DoubleDot& rhs =
dynamic_cast<
const DoubleDot&>(other);
164 return (_epsilon1 == rhs._epsilon1) && (_epsilon2 == rhs._epsilon2) && (_u == rhs._u) &&
165 (_omega == rhs._omega) && (_temperatures == rhs._temperatures) &&
166 (_chemicalPotentials == rhs._chemicalPotentials) && (_gamma1 == rhs._gamma1) && (_gamma2 == rhs._gamma2);
169 void serialize(cereal::BinaryInputArchive& archive);
170 void serialize(cereal::BinaryOutputArchive& archive);
171 void serialize(cereal::PortableBinaryInputArchive& archive);
172 void serialize(cereal::PortableBinaryOutputArchive& archive);
173 void serialize(cereal::JSONInputArchive& archive);
174 void serialize(cereal::JSONOutputArchive& archive);
177 SciCore::Real _epsilon1 = 0.0;
178 SciCore::Real _epsilon2 = 0.0;
179 SciCore::Real _u = 0.0;
180 SciCore::Complex _omega = 0.0;
181 SciCore::RealVector _temperatures;
182 SciCore::RealVector _chemicalPotentials;
183 SciCore::RealVector _gamma1;
184 SciCore::RealVector _gamma2;
186 static const std::vector<
int> _blockDimensions;
191CEREAL_REGISTER_TYPE(RealTimeTransport::DoubleDot)
192CEREAL_REGISTER_POLYMORPHIC_RELATION(RealTimeTransport::Model, RealTimeTransport::DoubleDot)
#define REALTIMETRANSPORT_EXPORT
Definition RealTimeTransport_export.h:15
OperatorType operatorize(const SupervectorType &supervector) const override
Transforms a supervector back into operator form.
SupervectorType vectorize(const OperatorType &op) const override
Vectorizes an operator into its supervector form.
OperatorType d(int l) const override
Returns the annihilation operator of the dot .
DoubleDot(SciCore::Real epsilon1, SciCore::Real epsilon2, SciCore::Real U, SciCore::Complex Omega, const SciCore::RealVector &T, const SciCore::RealVector &mu, const SciCore::RealVector &Gamma1, const SciCore::RealVector &Gamma2)
Constructs a new double dot object.
DoubleDot(const DoubleDot &other)=default
Default copy constructor.
SciCore::Real epsilon1() const noexcept
Returns the energy of dot 1.
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...
bool isEqual(const Model &other) const override
Returns true if other is the same as *this, otherwise false.
Definition DoubleDot.h:161
SciCore::Real U() const noexcept
Returns the Coulomb interaction.
int numReservoirs() const override
Returns the number of reservoirs the system is connected to.
OperatorType H() const override
Returns the Hamiltonian.
int numStates() const noexcept override
There are two single particle states.
const SciCore::RealVector & Gamma2() const noexcept
Returns the coupling between dot 2 and the reservoirs.
std::unique_ptr< Model > copy() const override
Returns a deep copy of the model.
const SciCore::RealVector & chemicalPotentials() const noexcept override
Returns the chemical potentials of the reservoirs the system is connected to.
Definition DoubleDot.h:150
DoubleDot & operator=(DoubleDot &&other) noexcept=default
Default move assignment operator.
int dimHilbertSpace() const noexcept override
The Hilbert space dimension is 4.
DoubleDot & operator=(const DoubleDot &other)=default
Default copy assignment operator.
SciCore::Complex coupling(int r, int nu, int l) const override
Returns the coupling coefficient in the tunneling Hamiltonian. l represents the dot index....
DoubleDot(DoubleDot &&other) noexcept=default
Default move constructor.
const SciCore::RealVector & temperatures() const noexcept override
Returns the temperatures of the reservoirs the system is connected to.
Definition DoubleDot.h:145
const SciCore::RealVector & Gamma1() const noexcept
Returns the coupling between dot 1 and the reservoirs.
SciCore::Real epsilon2() const noexcept
Returns the energy of dot 2.
int numChannels() const noexcept override
Returns 1 (reservoirs are spinless).
DoubleDot() noexcept=default
Default constructor.
Abstract class representing a model.
Definition Model.h:47