Brief Example
We now provide a brief example to demonstrate the similarity between QuantumToolbox.jl
and QuTiP
.
CPU Computation
Let's consider a quantum harmonic oscillator with a Hamiltonian given by:
where
using QuantumToolbox
N = 20 # cutoff of the Hilbert space dimension
ω = 1.0 # frequency of the harmonic oscillator
a = destroy(N) # annihilation operator
H = ω * a' * a
We now introduce some losses in a thermal environment, described by the Lindblad master equation:
where
Lindblad master equation
See here for more details about Lindblad master equation.
We now compute the time evolution of the system using the mesolve
function, starting from the initial state
γ = 0.1 # damping rate
ψ0 = fock(N, 3) # initial state
tlist = range(0, 10, 100) # time list
c_ops = [sqrt(γ) * a]
e_ops = [a' * a]
sol = mesolve(H, ψ0, tlist, c_ops, e_ops = e_ops)
We can extract the expectation value of the number operator sol.expect
, and the states with the command sol.states
.
GPU Computation
Extension for CUDA.jl
QuantumToolbox.jl
provides an extension to support GPU computation. To trigger the extension, you need to install and import CUDA.jl
together with QuantumToolbox.jl
. See here for more details.
using QuantumToolbox
using CUDA
CUDA.allowscalar(false) # Avoid unexpected scalar indexing
We can easily pass the computation to the GPU, by simply passing all the QuantumObject
s to the GPU:
a_gpu = cu(destroy(N)) # The only difference in the code is the cu() function
H_gpu = ω * a_gpu' * a_gpu
ψ0_gpu = cu(fock(N, 3))
c_ops = [sqrt(γ) * a_gpu]
e_ops = [a_gpu' * a_gpu]
sol = mesolve(H_gpu, ψ0_gpu, tlist, c_ops, e_ops = e_ops)