Bloch-Redfield master equation
The Lindblad master equation introduced earlier is constructed so that it describes a physical evolution of the density matrix (i.e., trace and positivity preserving), but it does not provide a connection to any underlying microscopic physical model. The Lindblad operators (collapse operators) describe phenomenological processes, such as for example dephasing and spin flips, and the rates of these processes are arbitrary parameters in the model. In many situations the collapse operators and their corresponding rates have clear physical interpretation, such as dephasing and relaxation rates, and in those cases the Lindblad master equation is usually the method of choice.
However, in some cases, for example systems with varying energy biases and eigenstates and that couple to an environment in some well-defined manner (through a physically motivated system-environment interaction operator), it is often desirable to derive the master equation from more fundamental physical principles, and relate it to for example the noise-power spectrum of the environment.
The Bloch-Redfield formalism is one such approach to derive a master equation from a microscopic system. It starts from a combined system-environment perspective, and derives a perturbative master equation for the system alone, under the assumption of weak system-environment coupling. One advantage of this approach is that the dissipation processes and rates are obtained directly from the properties of the environment. On the downside, it does not intrinsically guarantee that the resulting master equation unconditionally preserves the physical properties of the density matrix (because it is a perturbative method). The Bloch-Redfield master equation must therefore be used with care, and the assumptions made in the derivation must be honored. (The Lindblad master equation is in a sense more robust – it always results in a physical density matrix – although some collapse operators might not be physically justified). For a full derivation of the Bloch Redfield master equation, see e.g. Cohen-Tannoudji et al. (1992) or Breuer and Petruccione (2002). Here we present only a brief version of the derivation, with the intention of introducing the notation and how it relates to the implementation in QuantumToolbox.jl
.
Brief Derivation and Definitions
The starting point of the Bloch-Redfield formalism is the total Hamiltonian for the system and the environment (bath):
The most general form of a master equation for the system dynamics is obtained by tracing out the bath from the von-Neumann equation of motion for the combined system (
where the additional assumption that the total system-bath density matrix can be factorized as
The master equation above is non-Markovian, i.e., the change in the density matrix at a time
which is local in time with respect the density matrix, but still not Markovian since it contains an implicit dependence on the initial state. By extending the integration to infinity and substituting
The two Markovian approximations introduced above are valid if the time-scale with which the system dynamics changes is large compared to the time-scale with which correlations in the bath decays (corresponding to a "short-memory" bath, which results in Markovian system dynamics).
The Markovian master equation above is still on a too general form to be suitable for numerical implementation. We therefore assume that the system-bath interaction takes the form
where
In the eigenbasis of the system Hamiltonian, where
where the "sec" above the summation symbol indicate summation of the secular terms which satisfy QuantumToolbox.jl
, involves rewriting the bath correlation function
where
where
is the Bloch-Redfield tensor.
The Bloch-Redfield master equation in this form is suitable for numerical implementation. The input parameters are the system Hamiltonian
To simplify the numerical implementation we often assume that
Bloch-Redfield master equation in QuantumToolbox.jl
Preparing the Bloch-Redfield tensor
In QuantumToolbox.jl
, the Bloch-redfield master equation can be calculated using the function bloch_redfield_tensor
. It takes two mandatory arguments: The system Hamiltonian a_ops
consist of tuples as (A, spec)
with A::QuantumObject
being the Operator
spec::Function
being the spectral density function
It is possible to also get the brterm
. This function takes only one Hermitian coupling operator
To illustrate how to calculate the Bloch-Redfield tensor, let's consider a two-level atom
Δ = 0.2 * 2π
ε0 = 1.0 * 2π
γ1 = 0.5
H = -Δ/2.0 * sigmax() - ε0/2 * sigmaz()
ohmic_spectrum(ω) = (ω == 0.0) ? γ1 : γ1 / 2 * (ω / (2 * π)) * (ω > 0.0)
R, U = bloch_redfield_tensor(H, [(sigmax(), ohmic_spectrum)])
R
Quantum Object: type=SuperOperator() dims=[2] size=(4, 4)
4×4 SparseArrays.SparseMatrixCSC{ComplexF64, Int64} with 12 stored entries:
⋅ 0.0+5.20417e-17im … 0.245145+0.0im
0.0+1.10155e-16im -0.161034-6.40762im 0.0-1.11022e-16im
0.0-1.61329e-16im 0.0-1.38778e-17im 0.0+1.11022e-16im
⋅ ⋅ -0.245145+0.0im
Note that it is also possible to add Lindblad dissipation superoperators in the Bloch-Refield tensor by passing the operators via the third argument c_ops
like you would in the mesolve
or mcsolve
functions. For convenience, when the keyword argument fock_basis = false
, the function bloch_redfield_tensor
also returns the basis transformation operator U
, the eigen vector matrix, since they are calculated in the process of generating the Bloch-Redfield tensor R
, and the U
are usually needed again later when transforming operators between the laboratory basis and the eigen basis. The tensor can be obtained in the laboratory basis by setting fock_basis = true
, in that case, the transformation operator U
is not returned.
Time evolution
The evolution of a wave function or density matrix, according to the Bloch-Redfield master equation, can be calculated using the function mesolve
with Bloch-Refield tensor R
in the laboratory basis instead of a liouvillian
. For example, to evaluate the expectation values of the
Δ = 0.2 * 2 * π
ϵ0 = 1.0 * 2 * π
γ1 = 0.5
H = - Δ/2.0 * sigmax() - ϵ0/2.0 * sigmaz()
ohmic_spectrum(ω) = (ω == 0.0) ? γ1 : γ1 / 2 * (ω / (2 * π)) * (ω > 0.0)
a_ops = ((sigmax(), ohmic_spectrum),)
e_ops = [sigmax(), sigmay(), sigmaz()]
# same initial random ket state in QuTiP doc
ψ0 = Qobj([
0.05014193+0.66000276im,
0.67231376+0.33147603im
])
tlist = LinRange(0, 15.0, 1000)
sol = brmesolve(H, ψ0, tlist, a_ops, e_ops=e_ops)
expt_list = real(sol.expect)
# plot the evolution of state on Bloch sphere
sphere = Bloch()
add_points!(sphere, [expt_list[1,:], expt_list[2,:], expt_list[3,:]])
sphere.vector_color = ["red"]
add_vectors!(sphere, [Δ, 0, ϵ0] / √(Δ^2 + ϵ0^2))
fig, _ = render(sphere)
fig
The two steps of calculating the Bloch-Redfield tensor R
and evolving according to the corresponding master equation can be combined into one by using the function brmesolve
, in addition to the same arguments as mesolve
and mcsolve
, the nested list of operator-spectrum tuple should be given under a_ops
.
sol = brmesolve(H, ψ0, tlist, ((sigmax(),ohmic_spectrum),); e_ops=e_ops)
Solution of time evolution
(return code: Success)
--------------------------
num_states = 1
num_expect = 3
ODE alg.: OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}(OrdinaryDiffEqCore.trivial_limiter!, OrdinaryDiffEqCore.trivial_limiter!, static(false))
abstol = 1.0e-8
reltol = 1.0e-6
The resulting sol
is of the struct
TimeEvolutionSol
as mesolve
.
Secular cutoff
While the code example simulates the Bloch-Redfield equation in the secular approximation, QuantumToolbox
's implementation allows the user to simulate the non-secular version of the Bloch-Redfield equation by setting sec_cutoff=-1
, as well as do a partial secular approximation by setting it to a Float64
, this float number will become the cutoff for the summation (sec_cutoff
will be neglected. Its default value is 0.1
which corresponds to the secular approximation.
For example, the command
sol = brmesolve(H, ψ0, tlist, ((sigmax(),ohmic_spectrum),); e_ops=e_ops, sec_cutoff=-1)
will simulate the same example as above without the secular approximation.
Secular cutoff
Using the non-secular version may lead to negativity issues.