You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Inspirations taken from this [QuTiP tutorial](https://nbviewer.org/urls/qutip.org/qutip-tutorials/tutorials-v5/time-evolution/004_rabi-oscillations.ipynb) by J.R. Johansson, P.D. Nation, and C. Staufenbiel
10
10
11
-
In this notebook, the usage of `QuantumToolbox.sesolve()` and `QuantumToolbox.mesolve()` will be demonstrated with Jaynes-Cummings model to observe Rabi Oscillation in the isolated case and the dissipative case. In dissipative case, a bosonic environment would interact with JC model's cavity and two-level atom.
11
+
In this notebook, the usage of `QuantumToolbox.sesolve` and `QuantumToolbox.mesolve` will be demonstrated with Jaynes-Cummings model to observe Rabi oscillations in the isolated case and the dissipative case. In dissipative case, a bosonic environment would interact with the cavity and two-level atom in JC model.
12
12
13
13
## Introduction to Jaynes-Cumming model
14
-
Jaynes-Cummings (JC) model, a simplest quantum mechanical model for light-matter interaction, describes an atom interacting with an external electromagnetic field. To simplify the interaction at the time of the model proposal, JC model considered a two-level atom interacting with a single bosonic mode (or you can consider it a single-mode cavity), i.e., a two-dimensional Hilbert space interacting with a Fock space. <!-- (with finite truncation $N$) -->
14
+
Jaynes-Cummings (JC) model, a simplest quantum mechanical model for light-matter interaction, describes an atom interacting with an external electromagnetic field. To simplify the interaction, JC model considered a two-level atom interacting with a single bosonic mode (or you can consider it a single-mode cavity).
15
15
16
16
The Hamiltonian of JC model is given by
17
17
@@ -27,116 +27,91 @@ where
27
27
28
28
with
29
29
30
-
- $\omega_\text{a}$: Frequency gap of the two-level atom
30
+
- $\omega_\text{a}$: Frequency of the two-level atom
31
31
- $\omega_\text{c}$: Frequency of the cavity's EM mode (This is not specified whether to be in resonance with the atom or not.)
32
32
- $\Omega$ : Coupling strength between the atom and the cavity
- $\hat{a}$ : Annihilation operator of single-mode cavity<!-- $N$-truncated -->
35
35
- $\hat{\sigma}$ : Lowering operator of atom. Equivalent to $|g\rangle\langle e|$
36
36
37
-
By applying rotating wave approximation (RWA), the counter rotating terms ($\hat{\sigma} \cdot \hat{a}$ and its hermition conjugate), which rotate considerably faster than the others in the interaction picture, are ignored, yielding
37
+
By applying [rotating wave approximation (RWA)](https://en.wikipedia.org/wiki/Rotating-wave_approximation), the counter rotating terms ($\hat{\sigma} \cdot \hat{a}$ and its Hermitian conjugate), which rotate considerably faster than the others in the interaction picture, are ignored, yielding
ωc = 1 * ωa # this frequency considers cavity and atom are IN resonance
55
-
ωc_ = 0.8 * ωa # this frequency considers cavity and atom are OFF resonance
57
+
ωc = 1 * ωa # considering cavity and atom are in resonance
56
58
σz = sigmaz() ⊗ qeye(N) # order of tensor product should be consistent throughout
57
59
a = qeye(2) ⊗ destroy(N)
58
60
Ω = 0.05
59
61
σ = sigmam() ⊗ qeye(N)
60
62
61
63
Ha = ωa / 2 * σz
62
64
Hc = ωc * a' * a # the symbol `'` after a `QuantumObject` act as adjoint
63
-
Hc_ = ωc_ * a' * a
64
65
Hint = Ω * (σ * a' + σ' * a)
65
66
66
-
Htot = Ha + Hc + Hint
67
-
Htot_ = Ha + Hc_ + Hint
67
+
Htot = Ha + Hc + Hint
68
68
69
69
print(Htot)
70
-
println("\n####################\n")
71
-
print(Htot_)
72
70
```
73
71
74
72
## Isolated case
75
-
For the case of JC system being isolated, i.e., with no interaction with the surrounding environment, the system's time-evolution is governed solely by Schrödinger equation $\hat{H}|\psi\rangle = \partial_t|\psi(t)\rangle$. Using `QuantumToolbox.sesolve()` is ideal for pure state evolution.
73
+
For the case of JC model being isolated, i.e., no interaction with the surrounding environment, the time-evolution is governed solely by Schrödinger equation $\hat{H}|\psi(t)\rangle = \partial_t|\psi(t)\rangle$. Using `QuantumToolbox.sesolve` is ideal for pure state evolution.
76
74
75
+
For the context of [Rabi problem](https://en.wikipedia.org/wiki/Rabi_problem), we set the initial state $\psi_0 = |e\rangle \otimes |0\rangle$ where $|e\rangle$ is the excited state of atom and $|0\rangle$ is the vacuum state of cavity.
77
76
78
77
```{julia}
79
-
# define initial state ψ0
80
-
ψ0 = basis(2,0) ⊗ fock(N, 1)
81
-
ψ0 = ψ0 / norm(ψ0)
78
+
e_ket = basis(2,0)
79
+
ψ0 = e_ket ⊗ fock(N, 0)
82
80
83
-
tlist = 0:2:200 # a list of time points of interest
81
+
tlist = 0:2.5:1000 # a list of time points of interest
84
82
85
83
# define a list of operators whose expectation value dynamics exhibit Rabi oscillation
86
84
eop_ls = [
87
-
a' * a, # number operator of cavity Fock space
88
-
σ' * σ # excited state population in atom
85
+
a' * a, # number operator of cavity
86
+
(e_ket * e_ket') ⊗ qeye(N), # excited state population in atom
89
87
]
90
88
91
-
sol = sesolve(Htot , ψ0, tlist; e_ops = eop_ls)
92
-
sol_ = sesolve(Htot_, ψ0, tlist; e_ops = eop_ls)
89
+
sol = sesolve(Htot , ψ0, tlist; e_ops = eop_ls)
93
90
print(sol)
94
-
println("\n####################\n")
95
-
print(sol_)
96
91
```
97
92
98
-
Create the first figure for expectation value of photon number
93
+
Compare the dynamics of $| e \rangle\langle e|$ alongside $a^\dagger a$
99
94
```{julia}
100
-
n = real.(sol.expect[1, :])
101
-
n_ = real.(sol_.expect[1, :])
102
-
fign = Figure(size = (600, 350))
103
-
axn = Axis(
104
-
fign[1, 1],
105
-
title = L"$\langle n\rangle$",
95
+
n = real.(sol.expect[1, :])
96
+
e = real.(sol.expect[2, :])
97
+
fig_se = Figure(size = (600, 350))
98
+
ax_se = Axis(
99
+
fig_se[1, 1],
106
100
xlabel = L"time $[1/\omega_a]$",
107
101
ylabel = "expectation value",
108
102
xlabelsize = 15,
109
103
ylabelsize = 15,
110
104
width = 400,
111
105
height = 220
112
106
)
113
-
lines!(axn, tlist, n, label = "resonant")
114
-
lines!(axn, tlist, n_, label = "off resonant")
115
-
axislegend(axn; position = :rt, labelsize = 12)
116
-
display(fign);
107
+
xlims!(ax_se, 0, 400)
108
+
lines!(ax_se, tlist, n, label = L"$\langle a^\dagger a \rangle$")
109
+
lines!(ax_se, tlist, e, label = L"$P_e$")
110
+
axislegend(ax_se; position = :rt, labelsize = 15)
111
+
display(fig_se);
117
112
```
118
113
119
-
Create the second figure for excited state population
120
-
```{julia}
121
-
e = real.(sol.expect[2, :])
122
-
e_ = real.(sol_.expect[2, :])
123
-
fige = Figure(size = (600, 350))
124
-
axe = Axis(
125
-
fige[1, 1],
126
-
title = L"$\langle e \rangle$",
127
-
xlabel = L"time $[1/\omega_a]$",
128
-
ylabel = "probability",
129
-
xlabelsize = 15,
130
-
ylabelsize = 15,
131
-
width = 400,
132
-
height = 220
133
-
)
134
-
ylims!(axe, 0, 1)
135
-
lines!(axe, tlist, e, label = "resonant")
136
-
lines!(axe, tlist, e_, label = "off resonant")
137
-
axislegend(axe; position = :rb, labelsize = 12)
138
-
display(fige);
139
-
```
114
+
In the above plot, the behaviour of the energy exchange between the atom and the cavity is clearly visible, addressing the Rabi problem.
140
115
141
116
## Dissipative case
142
117
@@ -157,16 +132,13 @@ where for the $l$-th mode
157
132
- $\beta_l$ is the coupling strength with the cavity
158
133
- $\hat{b}_l$ is the annihilation operator
159
134
160
-
161
-
Following the RWA approach previously mentioned and the standard procedure of Born-Markovian master equation, we obtain $\kappa$, the cavity dissipation rate, and $\gamma$, the atom dissipation rate.
162
-
163
-
Therefore, the time evolution of the dissipative JC model can be described by the master equation
135
+
Following the RWA approach previously mentioned and the standard procedure of [Born-Markovian approximation](https://en.wikiversity.org/wiki/Open_Quantum_Systems/The_Quantum_Optical_Master_Equation), we obtain $\kappa$, the cavity dissipation rate, and $\gamma$, the atom dissipation rate. Therefore, the time evolution of the dissipative JC model can be described by the [Lindblad master equation](https://en.wikipedia.org/wiki/Lindbladian)
with $n(\omega, T)$ being the Bose-Einstein distribution for the EM environment and $\mathcal{D}[\hat{\mathcal{O}}]\left(\cdot\right) = \hat{\mathcal{O}} \left(\cdot\right) \hat{\mathcal{O}}^\dagger - \frac{1}{2} \{ \hat{\mathcal{O}}^\dagger \hat{\mathcal{O}}, \cdot \}$ being the Lindblad dissipator.
150
+
with $n(\omega, T)$ being the Bose-Einstein distribution for the EM environment and
axislegend(axn_me; position = :rt, labelsize = 12)
228
-
display(fign_me);
195
+
)
196
+
lines!(ax_me, tlist, n_me, label = L"\langle a^\dagger a \rangle")
197
+
lines!(ax_me, tlist, e_me, label = L"$P_e$")
198
+
axislegend(ax_me; position = :rt, labelsize = 15)
199
+
display(fig_me);
229
200
```
230
201
231
-
Create the second figure for atom excited state population
202
+
From the above example, one can see that the dissipative system is losing energy over time and asymptoting to zero. We can further consdider the near-vacuum environment with finite temperature.
203
+
232
204
```{julia}
233
-
e_me = real.(sol_me.expect[2, :])
234
-
e_me_ = real.(sol_me_.expect[2, :])
235
-
fige_me = Figure(size = (600, 350))
236
-
axe_me = Axis(
237
-
fige_me[1, 1],
238
-
title = L"$\langle e \rangle$",
205
+
sol_me_ = mesolve(Htot, ψ0, tlist, cop_ls(γ, κ, 0.3 * ωa), e_ops = eop_ls) # replace KT with finite temperature
axislegend(axe_me; position = :rt, labelsize = 12)
250
-
display(fige_me);
218
+
)
219
+
lines!(ax_me_, tlist, n_me_, label = L"\langle a^\dagger a \rangle")
220
+
lines!(ax_me_, tlist, e_me_, label = L"$P_e$")
221
+
axislegend(ax_me_; position = :rt, labelsize = 15)
222
+
display(fig_me_);
251
223
```
252
-
253
-
<!--
254
-
### Note for RWA
255
-
256
-
Without applying RWA, things are more interesting in the \emph{Ultrastrong Coupling} (USC) regime, where $\Omega \sim \omega_c$. In that regime, the \emph{localized} master equation (the one we used for this tutorial) fails. As that phenomenon is worth itself as an independent tutorial, we will pass that on to [this tutorial for `liouvillian_generalized()`]().
257
-
-->
258
-
259
-
224
+
Despite the asymptotic behaviour persisting, one can see that they no longer approach zero and instead find a steady condition above zero. That is, the system eventually becomes thermalized by the environment.
0 commit comments