Skip to content

Commit 4f0f3d0

Browse files
committed
Small typos and grammar, added a little more detail
1 parent e576347 commit 4f0f3d0

File tree

1 file changed

+32
-38
lines changed

1 file changed

+32
-38
lines changed

tutorials-v5/time-evolution/023_v5_paper-mesolve.md

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ jupyter:
55
extension: .md
66
format_name: markdown
77
format_version: '1.3'
8-
jupytext_version: 1.13.8
8+
jupytext_version: 1.16.4
99
kernelspec:
10-
display_name: Python 3
10+
display_name: Python 3 (ipykernel)
1111
language: python
1212
name: python3
1313
---
@@ -16,16 +16,17 @@ jupyter:
1616

1717
Authors: Maximilian Meyer-Mölleringhof ([email protected]), Neill Lambert ([email protected])
1818

19-
In QuTiP `Qobj` and `QobjEvo` classes for the very heart of almost all calculations that can be performed.
20-
With them, open quantum system with various interactions and structures can be simulated by using the wide variety of solvers provided.
19+
In QuTiP, the `Qobj` and `QobjEvo` classes form the very heart of almost all calculations that can be performed.
20+
With these classes, open quantum systems with various interactions and structures can be simulated by using the wide variety of solvers provided.
2121
Most of the time, these solvers are given an initial state, a Hamiltonian and an environment that is often described using rates or coupling strengths.
2222
QuTiP then uses numerical integration to determine the time evolution of the system.
2323

2424
QuTiP v5 introduces a unified interface for interacting with these solvers.
25+
This new interface is class-based, allowing users to instantiate a solver object for a specific problem.
2526
This can be useful when the same Hamiltonian data is reused with different initial conditions, time steps or other options.
26-
A noticable speed-up can thus be achieved if solvers is reused multiple times.
27+
A noticable speed-up can thus be achieved if solvers are reused multiple times.
2728

28-
Upon instantiation, one first supplies only the Hamiltonian and the collapse operators (e.g., collapse operators for a Lindabladian master equation).
29+
Upon instantiation, one first supplies only the Hamiltonian and the collapse operators (e.g., collapse operators for a Lindbladian master equation).
2930
Initial conditions, time steps, etc. are passed to the `Solver.run()` method which then performs the simulation.
3031

3132
In this notebook we will consider several examples illustrating the usage of the new solver classes.
@@ -69,7 +70,7 @@ print(H)
6970
The dynamics of such a system is described by the Schrödinger equation
7071

7172
$i \hbar \dfrac{d}{dt} \ket{\psi} = H \ket{\psi}$.
72-
Therefore, we can use `SESovler` to calculate the dynamics.
73+
Therefore, we can use `SESolver` to calculate the dynamics.
7374

7475
```python
7576
se_solver = SESolver(H)
@@ -93,9 +94,9 @@ plt.show()
9394
### Manual Stepping Interface
9495

9596
A new feature in QuTiP v5 is that time steps can be controlled manually.
96-
This is specficially useful if the Hamiltonian depends on external control parameters such as field strength.
97-
Such parameters can be updated in euch step using the optional paramter `args`.
98-
In paractice, this can look like this:
97+
This is specifically useful if the Hamiltonian depends on an external control parameter such as a field strength.
98+
Such parameters can be updated in each step using the optional parameter `args`.
99+
In practice, this can look like this:
99100

100101
```python
101102
t = 0
@@ -111,13 +112,13 @@ while t < 40:
111112
### Solver and Integrator Options
112113

113114
Another change in QuTiP v5 is that the `options` argument takes a standard Python dictionary.
114-
This should increase future felxibility and allow different solvers to provide individual sets of options more easily.
115+
This should increase future flexibility and allow different solvers to provide individual sets of options more easily.
115116
The complete list of options can be found in the online documentation for each solver.
116117

117-
As an example of frequently used options, we show `store_states`, determining whether the output should include the system state at each time step and `store_final_state` determening the same but for the final state.
118-
`method` is another common option, specifying the ODE integration method as well as its specific options.
119-
Also shown here are `atol` to control the precision (absolute tolerance),
120-
`nsteps` controls the maximum number of steps between two time steps and `max_step` giving the maximum allowed integration step of the default Adams ODE.
118+
As an example of frequently used options, we show `store_states`, determining whether the output should include the system state at each time step, and `store_final_state`, determining the same but for the final state.
119+
`method` is another common option, specifying the ODE integration method.
120+
Specific options related to the numeric integration depend on the chosen method; here, we show `atol` controlling the precision (absolute tolerance),
121+
`nsteps` controlling the maximum number of steps between two time steps, and `max_step` giving the maximum allowed integration step of the default Adams ODE integration method.
121122

122123
```python
123124
options = {"store_states": True, "atol": 1e-12, "nsteps": 1e3, "max_step": 0.1}
@@ -135,18 +136,18 @@ print(se_res)
135136
## Part 1: Lindblad Dynamics and Beyond
136137

137138
In general, the Schrödinger equation describes the dynamics of any quantum system.
138-
Once systems become large or we consider continious system, however, solving it often comes impossible.
139+
Once systems become large or we consider continuous systems, however, solving it often becomes impossible.
139140
Therefore, master equations of various types were developed and have now become the most common way to describe the dynamics of finite (open) quantum systems.
140141
Generally, a master equation refers to a first-order linear differential equation for $\rho(t)$ which is the reduced density operator describing the quantum state.
141-
In QuTiP `mesolve` is the general solver we use to solve such master equations.
142+
In QuTiP, `mesolve` is the general solver we use to solve such master equations.
142143
Although it supports master equations of various forms, the Lindbladian type is implemented by default.
143144
The general form of such an equation is given by
144145

145-
$\dot{\rho}(t) = - \dfrac{i}{\hbar} [H(t), \rho(t)] + \sum_n \dfrac{1}{2}[ 2 C_n \rho(t) C_n^\dagger - \rho(t) C_n^\dagger C_n - C^\dagger_n C_n \rho(t) ]$.
146+
$$ \dot{\rho}(t) = - \dfrac{i}{\hbar} [H(t), \rho(t)] + \sum_n \dfrac{1}{2}[ 2 C_n \rho(t) C_n^\dagger - \rho(t) C_n^\dagger C_n - C^\dagger_n C_n \rho(t) ] . $$
146147

147148
Next to the density operator $\rho(t)$ and the Hamiltonian $H(t)$, this equation includes the so-called collapse (or jump) operators $C_n = \sqrt{\gamma_n} A_n$.
148-
They define the dissipation due to contanct with and environment.
149-
$\gamma_n$ can hereby be understood as rates describing the frequency of transitions between the states connected by the operator $A_n$.
149+
They define the dissipation due to contact with an environment.
150+
The rates $\gamma_n$ describe the frequency of transitions between the states connected by the operator $A_n$.
150151

151152
To continue our example of the two qubits, we now connect them to an evironment using the collapse operators $C_1 = \sqrt{\gamma} \sigma_{-}^{(1)}$ and $C_2 = \sqrt{\gamma} \sigma_{-}^{(2)}$ where $\sigma_{-}^{(i)}$ takes qubit (i) from its excited state to its ground state.
152153
This time, however, we will be using the `mesolve` solver.
@@ -174,7 +175,7 @@ plt.show()
174175
### Global Master Equation - Born-Markov-secular approximation
175176

176177
In the previous example, the collapse operators acted *locally* on each qubit.
177-
However, depending on the considered approximation different kinds of collapse operators are found.
178+
However, depending on the considered approximation, different kinds of collapse operators are found.
178179
One example for this is when the qubits interact more strongly with each other than with the bath.
179180
One then arrives at the *global* master equation under the standard Born-Markox approximation.
180181
Although the collapse operators still act like annihilation and creation operators here, they now act on the total coupled eigenstates of the interacting two-qubit system
@@ -185,20 +186,16 @@ with rates
185186

186187
$\gamma_{ij} = | \bra{\psi_i} d \ket{\psi_j} |^2 S(\Delta_{ij})$.
187188

188-
The $\ket{\psi_i}$ are the eigenstates of $H$ and $\Delta_{ij} = E_j - E_i$ are the difference of eigenenergies.
189+
The $\ket{\psi_i}$ are the eigenstates of $H$ and $\Delta_{ij} = E_j - E_i$ are the differences of eigenenergies.
189190
$d$ is the coupling operator of the system to the environment.
190191
We use the power spectrum
191192

192193
$S(\omega) = 2 J(\omega) [n_{th} (\omega) + 1] \theta(\omega) + 2J(-\omega)[n_{th}(-\omega)]\theta(-\omega)$
193194

194-
which depends on details of the environment such as its spectral density $J(\omega)$ and temperature through the Bose-Einstein distribution $n_{th} (\omega)$.
195+
which depends on details of the environment such as its spectral density $J(\omega)$ and, through the Bose-Einstein distribution $n_{th} (\omega)$, its temperature.
195196
$\theta$ denotes the Heaviside function.
196197

197-
By assuming spectral density to be flat:
198-
199-
$J(\omega) = \gamma / 2$
200-
201-
and considering zero temperature, we can write
198+
By assuming spectral density to be flat, $J(\omega) = \gamma / 2$, and considering zero temperature, we can write
202199

203200
$S(\omega) = \gamma \theta(\omega)$.
204201

@@ -211,7 +208,6 @@ def power_spectrum(w):
211208
else:
212209
return 0
213210

214-
215211
def make_co_list(energies, eigenstates):
216212
Nmax = len(eigenstates)
217213
collapse_list = []
@@ -241,21 +237,20 @@ me_global_res = mesolve(
241237
)
242238
```
243239

240+
It is interesting to note that the long-time evolution leads to a state that is close to the coupled ground state of the two qubit system:
241+
244242
```python
245243
grnd_state = all_state[0] @ all_state[0].dag()
246244
fidelity = fidelity(me_global_res.states[-1], grnd_state)
247245
print(f"Fidelity with ground-state: {fidelity:.6f}")
248246
```
249247

250-
It is interesting to note that the long-time evolution leads to a state that is close to the coupled ground state of the two qubit system.
251-
252-
253248
### Solver comparison
254249

255250
In the following, we compare the results of the local and dressed (global) Lindblad simulations from above with the Bloch-Redfield solver.
256251
The Bloch-Redfield solver is explained in more detail in other tutorials, but we use it here to solve the weak-coupling master equation from a given bath power spectrum.
257252
For small coupling strengths, the results from the local and global master equations both agree with the Bloch-Redfield solver.
258-
However, this changes when considering stronger couplings where the local master equation deviates from both the global as well as the Bloch-Redfield approach.
253+
However, this changes when considering stronger couplings where the local master equation deviates from the result of the global and the Bloch-Redfield approach.
259254

260255
```python
261256
# weak coupling
@@ -359,12 +354,12 @@ plt.legend()
359354
plt.show()
360355
```
361356

362-
<!-- #region -->
363357
## Part 2: Time-Dependent Systems
364358

365-
366-
Finally, we compare the results with another `mesolve` considering the rotating-wave approximation, the Bloch-Redfield solver and the HEOMSolver.
367-
<!-- #endregion -->
359+
Finally, we consider another example: a driven system, where the Hamiltonian is time-dependent.
360+
It is assumed to have the form
361+
$$ H = \frac{\Delta}{2} \sigma_z + \frac{A}{2} \sin (\omega_d t) \sigma_x . $$
362+
We solve this problem with a direct `mesolve()` simulation, with a time-independent simulation in the rotating-wave approximation (see the QuTiP v5 paper for details), with the Bloch-Redfield solver and with the HEOMSolver.
368363

369364
```python
370365
# Hamiltonian parameters
@@ -426,7 +421,6 @@ def nth(w):
426421
else:
427422
return 0
428423

429-
430424
# Power spectrum
431425
def power_spectrum(w):
432426
if w > 0:

0 commit comments

Comments
 (0)