Open Quantum Systems
using PiccoloQuantumObjects
using SparseArrays # for visualizationOpen quantum systems
We can construct an OpenQuantumSystem with Lindblad dynamics, enabling a user to pass a list of dissipation operators.
PiccoloQuantumObjects.QuantumSystems.OpenQuantumSystem — Type
OpenQuantumSystem <: AbstractQuantumSystemA struct for storing open quantum dynamics.
Fields
H::Function: The Hamiltonian function: (u, t) -> H(u, t)𝒢::Function: The Lindbladian generator function: u -> 𝒢(u)H_drift::SparseMatrixCSC{ComplexF64, Int}: The drift HamiltonianH_drives::Vector{SparseMatrixCSC{ComplexF64, Int}}: The drive HamiltoniansT_max::Float64: Maximum evolution timedrive_bounds::Vector{Tuple{Float64, Float64}}: Drive amplitude boundsn_drives::Int: The number of control driveslevels::Int: The number of levels in the systemdissipation_operators::Vector{SparseMatrixCSC{ComplexF64, Int}}: The dissipation operatorstime_dependent::Bool: Whether the Hamiltonian has explicit time dependence
See also QuantumSystem.
Add a dephasing and annihilation error channel.
H_drives = [PAULIS[:X]]
a = annihilate(2)
dissipation_operators = [a'a, a]
T_max = 10.0
drive_bounds = [(-1.0, 1.0)]
system = OpenQuantumSystem(H_drives, T_max, drive_bounds, dissipation_operators=dissipation_operators)
system.dissipation_operators[1] |> sparse2×2 SparseArrays.SparseMatrixCSC{ComplexF64, Int64} with 1 stored entry:
⋅ ⋅
⋅ 1.0+0.0imsystem.dissipation_operators[2] |> sparse2×2 SparseArrays.SparseMatrixCSC{ComplexF64, Int64} with 1 stored entry:
⋅ 1.0+0.0im
⋅ ⋅ The Hamiltonian part system.H excludes the Lindblad operators. This is also true for functions that report properties of system.H, such as get_drift, get_drives, and is_reachable.
get_drift(system) |> sparse2×2 SparseArrays.SparseMatrixCSC{ComplexF64, Int64} with 0 stored entries:
⋅ ⋅
⋅ ⋅ This page was generated using Literate.jl.