Skip to content

Optical Bloch Equation Notebook

A numerically stable trajectory is not necessarily a physical density matrix. An ODE solver can preserve the trace while producing a negative eigenvalue, can approach a steady state while using the wrong detuning sign, or can reproduce a saturated population while confusing emitted photons with detected counts. Dissipative two-level calculations need algebraic, numerical, and measurement-level checks.

This notebook supplies those checks for the optical Bloch equations. It computes:

  1. weak, saturated, underdamped, detuned, and dephased transients;
  2. exact no-drive population and coherence decay benchmarks;
  3. steady states by both analytic formula and linear algebra;
  4. saturation and total fluorescence rate;
  5. power-broadened line shapes and full widths at half maximum (FWHM); and
  6. RK4 refinement, Bloch-ball, and population-range diagnostics.

The retained headline results are:

DiagnosticComputed valueWhat it tests
no-drive population-decay error9.27×10−139.27\times10^{-13}ρee(t)=e−Γt\rho_{ee}(t)=e^{-\Gamma t}
no-drive coherence-decay error2.27×10−122.27\times10^{-12}u(t)=e−Γ2tu(t)=e^{-\Gamma_2t}
largest medium-versus-fine RK4 population difference1.09×10−81.09\times10^{-8}transient time-step convergence
minimum refinement-difference ratio18.7918.79fourth-order regime
analytic-versus-linear steady-state error2.22×10−162.22\times10^{-16}algebra and sign convention
population saturation-formula error1.11×10−161.11\times10^{-16}steady response identity
largest analytic-versus-bisection FWHM error2.10×10−13Γ2.10\times10^{-13}\Gammaindependent linewidth extraction
largest retained Bloch-radius excess00density-matrix physicality

The zero Bloch-radius excess is a measured maximum after rounding, not a claim that classical RK4 is positivity preserving for arbitrary steps. The step-refinement test remains essential.

Run the investigation. The program and retained results below support the stated experiment. Follow Running an Experiment for environment and output-directory guidance. The recorded evidence applies to its stated parameters and environment.

This page is the canonical home for the executable calculation that:

  • propagates the optical Bloch equations with explicit fourth-order Runge–Kutta (RK4);
  • validates population and coherence decay without a drive;
  • compares computed transients at three internal step sizes;
  • checks populations and the Bloch-ball condition along every retained trajectory;
  • solves the continuous-wave steady state analytically and by a linear system;
  • evaluates the saturation parameter and total emission rate;
  • scans detuning to obtain power-broadened line shapes;
  • extracts FWHM values by deterministic bisection; and
  • exports every plotted curve, convergence record, and convention.

Neighboring pages retain distinct canonical responsibilities:

The present notebook verifies an unconditional two-state forward model. It does not duplicate the physical derivation or turn a mean emission rate into a photon-counting trajectory.

The executable artifact is a NumPy-only Python program:

Run the downloaded program from the folder where you saved it:

Terminal window
python optical-bloch-equation.py --output-dir results

The default run declares:

ItemChoice
languagePython 3
numerical dependencyNumPy
random numbersnone
population-decay rateΓ=1\Gamma=1
frequency unitΓ\Gamma
time unit1/Γ1/\Gamma
transient interval0≤Γt≤150\le\Gamma t\le15
transient output samples601601
retained internal stepat most 0.005/Γ0.005/\Gamma
convergence steps0.04/Γ0.04/\Gamma, 0.02/Γ0.02/\Gamma, 0.01/Γ0.01/\Gamma
saturation samples251251
line-shape samples601601
linewidth drive samples8080
transient integratorclassical explicit RK4
linewidth root solverdeterministic bisection

There is no stochastic unraveling, hidden fit, adaptive tolerance, external ODE package, or plotting dependency. The program records all parameters, runtime versions, acceptance thresholds, analytic references, physical exclusions, and output filenames in JSON.

The calculation is an optical Bloch solver and steady-response benchmark. It assumes:

  • a valid two-state projection;
  • a rotating-wave Hamiltonian;
  • a semiclassical monochromatic drive;
  • Markovian population decay;
  • Markovian homogeneous pure dephasing; and
  • an unconditional density matrix.

It omits multilevel branching, optical pumping, motion, Doppler averaging, spatial intensity variation, photon recoil, detector dead time, conditioned quantum jumps, non-Markovian noise, and field-correlation spectra. A species-specific prediction requires those assumptions to be reviewed against the transition and apparatus.

The basis, Pauli matrices, Rabi frequency, and detuning convention match the preceding coherent notebook:

Δ=ω0−ωL,\Delta=\omega_0-\omega_L,

with ordered basis [∣e⟩,∣g⟩][|e\rangle,|g\rangle] and rotating-frame Hamiltonian

Hℏ=12(Δσz+Ωσx).\frac{H}{\hbar} = \frac12 \left( \Delta\sigma_z+\Omega\sigma_x \right).

The general open-systems Optical Bloch page writes its local detuning as Δopen=ωL−ω0\Delta_{\mathrm{open}}=\omega_L-\omega_0. Therefore

Δ=−Δopen.\Delta=-\Delta_{\mathrm{open}}.

Translate that sign before comparing coherence quadratures. The steady population is even in detuning and can conceal a mismatch.

The density matrix is

ρ=(ρeeρegρgeρgg),Tr⁡ρ=1.\rho = \begin{pmatrix} \rho_{ee}&\rho_{eg}\\ \rho_{ge}&\rho_{gg} \end{pmatrix}, \qquad \operatorname{Tr}\rho=1.

Define Bloch coordinates

u=Tr⁡(ρσx)=2Re⁡ρeg,v=Tr⁡(ρσy)=−2Im⁡ρeg,w=Tr⁡(ρσz)=ρee−ρgg.\begin{aligned} u &= \operatorname{Tr}(\rho\sigma_x) = 2\operatorname{Re}\rho_{eg}, \\ v &= \operatorname{Tr}(\rho\sigma_y) = -2\operatorname{Im}\rho_{eg}, \\ w &= \operatorname{Tr}(\rho\sigma_z) = \rho_{ee}-\rho_{gg}. \end{aligned}

Then

ρ=12(I+uσx+vσy+wσz)\rho = \frac12 \left( I+u\sigma_x+v\sigma_y+w\sigma_z \right)

and

ρee=1+w2.\rho_{ee} = \frac{1+w}{2}.

For a qubit, Hermiticity and unit trace are not enough. Positivity requires

u2+v2+w2≤1.u^2+v^2+w^2\le1.

The notebook checks this Bloch-ball condition at every exported transient sample.

Every driven trace begins in

r(0)=(00−1),\mathbf r(0) = \begin{pmatrix} 0\\0\\-1 \end{pmatrix},

which represents ρ(0)=∣g⟩⟨g∣\rho(0)=|g\rangle\langle g|. Separate no-drive tests begin in ∣e⟩|e\rangle or with u=1u=1 to isolate population and coherence decay.

The model equations are

u˙=−Γ2u−Δv,v˙=Δu−Γ2v−Ωw,w˙=Ωv−Γ(w+1),\begin{aligned} \dot u &= -\Gamma_2u-\Delta v, \\ \dot v &= \Delta u-\Gamma_2v-\Omega w, \\ \dot w &= \Omega v-\Gamma(w+1), \end{aligned}

where

Γ2=Γ2+γϕ.\Gamma_2 = \frac{\Gamma}{2} + \gamma_\phi.

Here:

  • Γ\Gamma is the excited-state population-decay rate;
  • γϕ\gamma_\phi is the additional pure-dephasing rate;
  • Γ2\Gamma_2 is the total transverse coherence-decay rate;
  • Ω\Omega is the RWA Rabi angular frequency; and
  • Δ\Delta follows the declared positive-above-resonance convention.

The equations can be written as an affine linear system

r˙=Ar+b,\dot{\mathbf r} = A\mathbf r+\mathbf b,

with

A=(−Γ2−Δ0Δ−Γ2−Ω0Ω−Γ)A = \begin{pmatrix} -\Gamma_2&-\Delta&0\\ \Delta&-\Gamma_2&-\Omega\\ 0&\Omega&-\Gamma \end{pmatrix}

and

b=(00−Γ).\mathbf b = \begin{pmatrix} 0\\0\\-\Gamma \end{pmatrix}.

The source term drives an undriven atom toward w=−1w=-1. Omitting it would describe damping toward the maximally mixed state, not spontaneous emission into a zero-temperature reservoir.

The corresponding model master equation is

ρ˙=−iℏ[H,ρ]+ΓD[σ−]ρ+γϕ2D[σz]ρ,\dot\rho = -\frac{i}{\hbar}[H,\rho] + \Gamma\mathcal D[\sigma_-]\rho + \frac{\gamma_\phi}{2} \mathcal D[\sigma_z]\rho,

where

D[L]ρ=LρL†−12{L†L,ρ}.\mathcal D[L]\rho = L\rho L^\dagger - \frac12 \left\{ L^\dagger L,\rho \right\}.

The coefficient γϕ/2\gamma_\phi/2 is chosen so that the dephasing dissipator contributes −γϕρeg-\gamma_\phi\rho_{eg} to the optical coherence. Changing the collapse-operator normalization without changing the reported rate creates a common factor-of-two error.

The computational page starts from the real equations above. The open-systems pages own the derivation and complete-positivity conditions.

The notebook uses classical explicit RK4. For

r˙=f(r),\dot{\mathbf r} = f(\mathbf r),

one step of size hh is

k1=f(rn),k2=f(rn+h2k1),k3=f(rn+h2k2),k4=f(rn+hk3),\begin{aligned} \mathbf k_1 &= f(\mathbf r_n), \\ \mathbf k_2 &= f\left( \mathbf r_n+\frac h2\mathbf k_1 \right), \\ \mathbf k_3 &= f\left( \mathbf r_n+\frac h2\mathbf k_2 \right), \\ \mathbf k_4 &= f\left( \mathbf r_n+h\mathbf k_3 \right), \end{aligned}

followed by

rn+1=rn+h6(k1+2k2+2k3+k4).\mathbf r_{n+1} = \mathbf r_n + \frac h6 \left( \mathbf k_1+2\mathbf k_2+2\mathbf k_3+\mathbf k_4 \right).

For a smooth nonstiff problem at fixed final time, the global error is O(h4)O(h^4). RK4 does not exactly preserve the Bloch ball or the matrix exponential of the affine system.

The CSV output contains 601601 equally spaced times. Between adjacent output times, the propagator takes enough internal substeps that

h≤0.005/Γ.h\le0.005/\Gamma.

The convergence calculation independently repeats every transient with

hmax⁡∈{0.04, 0.02, 0.01}/Γ.h_{\max} \in \left\{ 0.04,\ 0.02,\ 0.01 \right\}/\Gamma.

The output grid therefore controls the retained record, while the internal grid controls propagation error.

Because AA and b\mathbf b are constant in this benchmark, one could solve the affine system with a matrix exponential. RK4 is retained deliberately:

  • it is a transparent baseline for later time-dependent drives and rates;
  • refinement exposes a familiar global order;
  • positivity must be checked rather than assumed; and
  • the steady-state linear solve supplies an independent endpoint.

A production code may use exact segment exponentials, adaptive solvers, or specialized Lindblad integrators. It should keep equivalent validation layers.

Before testing driven behavior, the notebook removes the drive.

For Ω=0\Omega=0 and an initially excited atom,

ρ˙ee=−Γρee.\dot\rho_{ee} = -\Gamma\rho_{ee}.

Therefore

ρee(t)=e−Γt.\rho_{ee}(t) = e^{-\Gamma t}.

Over 0≤Γt≤100\le\Gamma t\le10, the retained RK4 trajectory differs from this analytic result by at most

9.27×10−13.9.27\times10^{-13}.

This test checks the affine source term as well as the mapping ρee=(1+w)/2\rho_{ee}=(1+w)/2.

With Ω=Δ=0\Omega=\Delta=0, the uu quadrature obeys

u˙=−Γ2u.\dot u=-\Gamma_2u.

For the test value

γϕΓ=0.75,\frac{\gamma_\phi}{\Gamma}=0.75,

the exact result is

u(t)=e−1.25Γt.u(t) = e^{-1.25\Gamma t}.

The maximum retained difference is

2.27×10−12.2.27\times10^{-12}.

Population and coherence tests are separate because a code can implement Γ\Gamma correctly while using the wrong pure-dephasing normalization.

The program exports five cases:

CaseΩ/Γ\Omega/\GammaΔ/Γ\Delta/\Gammaγϕ/Γ\gamma_\phi/\GammaPurpose
resonant weak0.250.250000monotonic weak excitation
resonant saturated110000moderate saturation
resonant oscillatory330000damped Rabi motion
detuned111.51.500tilted steady response
dephased110.50.50.750.75added transverse decay

All begin in the ground state and run to Γt=15\Gamma t=15. The largest excited population among all retained cases is

0.6890629153,0.6890629153,

from the first overshoot of the strongly driven resonant trace. Every population remains in [0,1][0,1], and no sampled Bloch vector exceeds unit radius.

On resonance, uu decouples. Deviations of (v,w)(v,w) from steady state evolve with matrix

Avw=(−Γ2−ΩΩ−Γ).A_{vw} = \begin{pmatrix} -\Gamma_2&-\Omega\\ \Omega&-\Gamma \end{pmatrix}.

Its eigenvalues are

λ±=−Γ+Γ22±(Γ−Γ2)24−Ω2.\lambda_\pm = -\frac{\Gamma+\Gamma_2}{2} \pm \sqrt{ \frac{(\Gamma-\Gamma_2)^2}{4} -\Omega^2 }.

Oscillatory damping occurs when

Ω>∣Γ−Γ2∣2.\Omega > \frac{|\Gamma-\Gamma_2|}{2}.

For pure radiative decay, Γ2=Γ/2\Gamma_2=\Gamma/2, so the threshold is

Ω>Γ4.\Omega>\frac{\Gamma}{4}.

The damped angular frequency is then

Ωd=Ω2−Γ216,\Omega_{\mathrm d} = \sqrt{ \Omega^2-\frac{\Gamma^2}{16} },

and the envelope decays at 3Γ/43\Gamma/4. Thus Ω/Γ=0.25\Omega/\Gamma=0.25 lies at the critical boundary, while Ω/Γ=3\Omega/\Gamma=3 displays a clear underdamped overshoot.

The observed population can contain:

  • Liouvillian eigenmodes with different decay rates;
  • an oscillatory pair;
  • a nonzero saturated offset;
  • detuning-induced phase shifts;
  • state-preparation and readout offsets; and
  • ensemble averages absent from this model.

Fitting

Ae−t/Tcos⁡(Ωt+ϕ)+CA e^{-t/T}\cos(\Omega t+\phi)+C

may be useful phenomenology, but its fitted TT is not automatically T1T_1, T2T_2, or one Liouvillian eigenvalue.

For constant parameters, the steady state satisfies

Arss=−b.A\mathbf r_{\mathrm{ss}} = -\mathbf b.

The code solves this 3×33\times3 system with numpy.linalg.solve. It also evaluates the analytic solution. Define

D=Γ(Δ2+Γ22)+Ω2Γ2.D = \Gamma \left( \Delta^2+\Gamma_2^2 \right) + \Omega^2\Gamma_2.

Then

uss=−ΩΓΔD,vss=ΩΓΓ2D,wss=−Γ(Δ2+Γ22)D.\begin{aligned} u_{\mathrm{ss}} &= - \frac{\Omega\Gamma\Delta}{D}, \\ v_{\mathrm{ss}} &= \frac{\Omega\Gamma\Gamma_2}{D}, \\ w_{\mathrm{ss}} &= - \frac{ \Gamma(\Delta^2+\Gamma_2^2) }{D}. \end{aligned}

The dispersive coordinate ussu_{\mathrm{ss}} is odd in the declared detuning, while vssv_{\mathrm{ss}} and ρeess\rho_{ee}^{\mathrm{ss}} are even. The first program run intentionally failed when the analytic helper used the opposite sign for ussu_{\mathrm{ss}}; comparison with the linear solve exposed the convention error.

The excited-state population is

ρeess=Ω2Γ22D.\rho_{ee}^{\mathrm{ss}} = \frac{\Omega^2\Gamma_2}{2D}.

Across every saturation sample and selected dephasing value, the maximum component difference between analytic and linear-solve Bloch vectors is

2.22×10−16.2.22\times10^{-16}.

The final point of each driven trajectory is compared with its analytic steady vector. The largest residual is

9.55×10−5.9.55\times10^{-5}.

This is much larger than the time-step error because Γt=15\Gamma t=15 is finite. It measures remaining physical relaxation toward the asymptote, not propagation failure. Confusing finite-time settling error with numerical error is a common mistake.

Define the detuning-dependent saturation parameter

s(Δ)=Ω2Γ2Γ(Δ2+Γ22).s(\Delta) = \frac{ \Omega^2\Gamma_2 }{ \Gamma(\Delta^2+\Gamma_2^2) }.

Then

ρeess=s2(1+s).\rho_{ee}^{\mathrm{ss}} = \frac{s}{2(1+s)}.

The program verifies this scalar formula against the analytic and linear-system solutions over

0≤ΩΓ≤50\le\frac{\Omega}{\Gamma}\le5

for

γϕΓ∈{0, 0.5, 2}.\frac{\gamma_\phi}{\Gamma} \in \{0,\ 0.5,\ 2\}.

The maximum population discrepancy is

1.11×10−16.1.11\times10^{-16}.

When γϕ=0\gamma_\phi=0,

Γ2=Γ2\Gamma_2=\frac{\Gamma}{2}

and

s(Δ)=2Ω2/Γ21+4Δ2/Γ2.s(\Delta) = \frac{ 2\Omega^2/\Gamma^2 }{ 1+4\Delta^2/\Gamma^2 }.

On resonance,

ρeess=Ω2Γ2+2Ω2.\rho_{ee}^{\mathrm{ss}} = \frac{\Omega^2} {\Gamma^2+2\Omega^2}.

Representative values are:

Ω/Γ\Omega/\Gammas(0)s(0)ρeess\rho_{ee}^{\mathrm{ss}}
0.10.10.020.020.00980390.0098039
0.50.50.50.51/61/6
11221/31/3
22884/94/9

As Ω/Γ→∞\Omega/\Gamma\to\infty,

ρeess→12.\rho_{ee}^{\mathrm{ss}}\to\frac12.

Coherent driving cannot invert this ideal two-level steady state. It equalizes the two populations in the strong-drive limit.

At fixed Ω\Omega and exact resonance,

s(0)=Ω2ΓΓ2.s(0) = \frac{\Omega^2}{\Gamma\Gamma_2}.

Increasing γϕ\gamma_\phi therefore reduces excitation at fixed drive. For Ω=Γ\Omega=\Gamma:

γϕ/Γ\gamma_\phi/\GammaΓ2/Γ\Gamma_2/\Gammaρeess\rho_{ee}^{\mathrm{ss}}
000.50.51/31/3
0.50.5111/41/4
222.52.51/71/7

This does not mean dephasing always “reduces the area” of every measured spectrum. Which quantity is held fixed and which observable is integrated must be specified.

For the collapse operator

L=Γ σ−,L=\sqrt{\Gamma}\,\sigma_-,

the total mean jump rate is

Rfl=Tr⁡(L†Lρ)=Γρee.\begin{aligned} R_{\mathrm{fl}} &= \operatorname{Tr} \left( L^\dagger L\rho \right) \\ &= \Gamma\rho_{ee}. \end{aligned}

Therefore

RflssΓ=ρeess=s2(1+s).\frac{R_{\mathrm{fl}}^{\mathrm{ss}}}{\Gamma} = \rho_{ee}^{\mathrm{ss}} = \frac{s}{2(1+s)}.

The normalized saturation and fluorescence curves in the figure are the same quantity. In physical units, the strong-drive ceiling is

Rflss⟶Γ2.R_{\mathrm{fl}}^{\mathrm{ss}} \longrightarrow \frac{\Gamma}{2}.

For one observed channel, a simple count model is

Rdet=ηsys b Γρee+Rbg,R_{\mathrm{det}} = \eta_{\mathrm{sys}}\,b\,\Gamma\rho_{ee} + R_{\mathrm{bg}},

where:

  • bb is the branching fraction into the counted optical channel;
  • ηsys\eta_{\mathrm{sys}} includes solid angle, optics, filtering, and detector efficiency; and
  • RbgR_{\mathrm{bg}} is the background rate.

Detector dead time, afterpulsing, binning, and thresholding can require a nonlinear forward model. The notebook exports Rfl/ΓR_{\mathrm{fl}}/\Gamma, not laboratory counts per second.

The equal-time jump rate uses ρee\rho_{ee}. A resonance-fluorescence spectrum requires a two-time field correlation such as

G(1)(τ)∝⟨σ+(t+τ)σ−(t)⟩ss,G^{(1)}(\tau) \propto \left\langle \sigma_+(t+\tau)\sigma_-(t) \right\rangle_{\mathrm{ss}},

followed by a Fourier transform. Antibunching uses a second-order correlation. Neither follows from the mean rate alone. The quantum regression theorem or a trajectory calculation supplies the additional information.

At fixed Ω\Omega, Γ\Gamma, and Γ2\Gamma_2, the steady population is

ρeess(Δ)=Ω2Γ22[Γ(Δ2+Γ22)+Ω2Γ2].\rho_{ee}^{\mathrm{ss}}(\Delta) = \frac{ \Omega^2\Gamma_2 }{ 2 \left[ \Gamma(\Delta^2+\Gamma_2^2) + \Omega^2\Gamma_2 \right] }.

It is an even Lorentzian in angular detuning for this homogeneous two-state model. The notebook scans

−6≤ΔΓ≤6-6\le\frac{\Delta}{\Gamma}\le6

for

ΩΓ∈{0.1, 0.5, 1, 2}\frac{\Omega}{\Gamma} \in \{0.1,\ 0.5,\ 1,\ 2\}

with γϕ=0\gamma_\phi=0.

At every one of the 601601 detunings:

  • the formula is compared with the linear steady-state solve; and
  • opposite detunings are compared to verify reflection symmetry.

The maximum formula discrepancy is

7.89×10−17,7.89\times10^{-17},

and the largest reflection asymmetry is

2.22×10−16.2.22\times10^{-16}.

An odd population line shape under this model would therefore indicate a bug, a mismatched normalization, or physics beyond the assumed forward model.

The half-maximum detuning satisfies

Δ1/22=Γ22+Ω2Γ2Γ.\Delta_{1/2}^2 = \Gamma_2^2 + \frac{\Omega^2\Gamma_2}{\Gamma}.

Thus the angular-frequency FWHM is

FWHM=2Γ22+Ω2Γ2Γ.\mathrm{FWHM} = 2 \sqrt{ \Gamma_2^2 + \frac{\Omega^2\Gamma_2}{\Gamma} }.

For pure radiative decay,

FWHM=Γ1+2Ω2Γ2.\mathrm{FWHM} = \Gamma \sqrt{ 1+2\frac{\Omega^2}{\Gamma^2} }.

The weak-drive width is Γ\Gamma, while the width grows with drive because of saturation.

For each of 8080 drive values between

0.05≤ΩΓ≤4,0.05\le\frac{\Omega}{\Gamma}\le4,

the program:

  1. obtains the line centre from the linear steady-state solve;
  2. sets the target to half that population;
  3. brackets the positive-detuning crossing;
  4. locates it by bisection; and
  5. doubles the positive root.

The largest difference from the analytic FWHM is

2.10×10−13Γ.2.10\times10^{-13}\Gamma.

The first and last extracted widths are:

FWHM(0.05Γ)=1.0024968828Γ,FWHM(4Γ)=5.7445626465Γ.\begin{aligned} \mathrm{FWHM}(0.05\Gamma) &= 1.0024968828\Gamma, \\ \mathrm{FWHM}(4\Gamma) &= 5.7445626465\Gamma. \end{aligned}

The small nonzero-drive correction explains why the first value is close to, but not exactly, Γ\Gamma.

This notebook reports:

  • full width, not half width;
  • angular frequency, not cycles per second;
  • the width of steady excited population versus detuning;
  • homogeneous two-state broadening; and
  • no instrumental convolution.

Converting to ordinary frequency requires division by 2π2\pi. A lifetime quoted as 1/Γ1/\Gamma does not by itself identify whether an experimental paper reports angular HWHM, angular FWHM, frequency HWHM, or frequency FWHM.

Four optical Bloch benchmarks showing damped transients, fluorescence saturation, power-broadened line shapes, and analytic versus numerical linewidths

Unconditional two-state optical Bloch benchmarks with Γ=1\Gamma=1. Panel (a) shows the transition from critically damped weak response to underdamped Rabi motion. Panel (b) gives ρeess=Rfl/Γ\rho_{ee}^{\mathrm{ss}}=R_{\mathrm{fl}}/\Gamma for three pure-dephasing rates. Panel (c) normalizes each steady line shape to expose power broadening. Panel (d) compares the analytic angular FWHM with roots extracted by bisection from the independent linear steady-state solve.

For every transient case, define

ϵh,h/2=max⁡t∣ρee(h)(t)−ρee(h/2)(t)∣.\epsilon_{h,h/2} = \max_t \left| \rho_{ee}^{(h)}(t) - \rho_{ee}^{(h/2)}(t) \right|.

The retained table is:

Caseh=0.04h=0.04 versus 0.020.02h=0.02h=0.02 versus 0.010.01ratio
resonant weak6.31×10−116.31\times10^{-11}3.34×10−123.34\times10^{-12}18.8818.88
resonant saturated1.59×10−91.59\times10^{-9}8.48×10−118.48\times10^{-11}18.7918.79
resonant oscillatory2.06×10−72.06\times10^{-7}1.09×10−81.09\times10^{-8}18.8618.86
detuned6.82×10−96.82\times10^{-9}3.63×10−103.63\times10^{-10}18.8018.80
dephased2.67×10−92.67\times10^{-9}1.42×10−101.42\times10^{-10}18.8618.86

The exact values are exported in the convergence CSV. A fourth-order asymptotic error would suggest a ratio near 1616. The observed ratios are somewhat larger because:

  • the diagnostic is a maximum over sampled time;
  • leading error coefficients can partially cancel;
  • the internal substep is shortened to land exactly on each output time; and
  • higher-order terms are not negligible in an empirical three-grid ratio.

The important conclusions are:

  • the ratios are stable and comfortably above the acceptance threshold of 1010;
  • the largest medium-to-fine difference is only 1.09×10−81.09\times10^{-8}; and
  • qualitative damping and linewidth conclusions are many orders of magnitude larger than this numerical uncertainty.

For each sampled Bloch vector, the program checks

r−1=u2+v2+w2−1.r-1 = \sqrt{u^2+v^2+w^2}-1.

The largest positive excess is reported as zero at retained precision. It also checks

0≤ρee≤1.0\le\rho_{ee}\le1.

These checks should be repeated after changing step size, rates, or drive. Explicit RK methods are not generally completely positive maps.

The file contains, for every case:

  • uu, vv, and ww;
  • ρee\rho_{ee};
  • Rfl/ΓR_{\mathrm{fl}}/\Gamma; and
  • the common scaled time Γt\Gamma t.

The fluorescence and population columns are intentionally both present. Their equality documents the normalization rather than asking a plotting script to infer it.

For each drive and pure-dephasing value, the file contains:

  • on-resonance saturation parameter;
  • population from the closed formula;
  • population from the linear solve; and
  • normalized fluorescence rate.

For each drive, the file contains:

  • formula population;
  • linear-solve population; and
  • population normalized to its own line-centre value.

Raw and normalized curves answer different questions. Normalization exposes width but hides the changing peak amplitude.

Each row contains:

  • drive strength;
  • analytic FWHM;
  • bisection-extracted FWHM;
  • line-centre population; and
  • line-centre fluorescence rate.

Each transient case records:

  • physical parameters;
  • all three maximum internal steps;
  • both refinement differences;
  • their ratio;
  • final distance from steady state; and
  • maximum Bloch-radius excess.

The last two quantities distinguish finite-duration settling and physicality from propagation convergence.

The notebook uses independent checks at several levels.

  • no-drive population decay isolates Γ\Gamma;
  • no-drive coherence decay isolates Γ2\Gamma_2;
  • the analytic steady state checks signs and factors;
  • even population versus detuning checks symmetry.
  • three-grid refinement checks global order;
  • analytic decay checks absolute accuracy;
  • final-state comparison checks the affine source and asymptote.
  • population bounds;
  • Bloch-ball positivity;
  • real-valued coordinates; and
  • finite values in every exported row.
  • saturation formula;
  • fluorescence ceiling;
  • weak-drive linewidth;
  • power-broadening trend; and
  • independent half-maximum roots.

One check cannot replace the others. A solver can match the steady state while taking an inaccurate transient path, and a converged transient can faithfully solve the wrong equations.

For comparison with an experiment, separate:

LayerRepresentative uncertaintyDiagnostic
state projectionspectator levels and dark statesmultilevel enlargement
HamiltonianΩ\Omega, Δ\Delta, polarization, phaseindependent calibration
dissipatorbranching, pumping, nonradiative decayrate and channel model
Markov approximationcolored reservoir or technical noisecorrelation-time test
time integrationtruncation and stiffnessstep refinement
physicalitynegative density eigenvaluesBloch radius or eigenspectrum
steady solversign or source erroranalytic and linear comparison
ensembleDoppler and intensity distributionexplicit averaging
photon mappingbranching and collectiondetector forward model
line-shape mappingconvolution and frequency unitsfull fit ledger

The tiny RK4 error addresses only the time-integration row. It does not make the two-state Markov model exact.

Examples include:

  • optical pumping into uncoupled Zeeman or hyperfine states;
  • laser phase noise that is not white;
  • transit-time effects;
  • Doppler distributions;
  • spatially varying Ω\Omega;
  • collisions;
  • reabsorption and cooperative emission;
  • detector saturation; and
  • coherent propagation through an optically thick medium.

A physically larger model should be added because diagnostics demand it, not because the small model can be integrated to more digits.

Replace constant controls by

Ω→Ω(t),Δ→Δ(t).\Omega\to\Omega(t), \qquad \Delta\to\Delta(t).

Then compare with the unitary pulse-area benchmark as Γ,γϕ→0\Gamma,\gamma_\phi\to0. Record waveform interpolation and internal step placement.

Rabi, Ramsey, echo, and composite pulses can be simulated by changing Ω\Omega, Δ\Delta, and phase between segments. Finite-pulse detuning must remain active unless the instantaneous-pulse approximation is declared.

Introduce additional populations and coherences with channel-specific collapse operators. Validate:

  • trace;
  • positivity;
  • branch-weighted total decay;
  • population conservation including dark states; and
  • recovery of the two-level result when unwanted branches vanish.

For a velocity distribution f(vz)f(v_z), use

Δ(vz)=Δ0−kvz\Delta(v_z) = \Delta_0-kv_z

and average the appropriate observable:

R‾fl=∫dvz f(vz)Rfl[Δ(vz)].\overline{R}_{\mathrm{fl}} = \int dv_z\, f(v_z) R_{\mathrm{fl}}[\Delta(v_z)].

The average of steady rates is not the same as propagating one density matrix at an averaged detuning.

For one traveling wave and a closed transition, a simple mean force is

F=ℏkΓρeess.F = \hbar k\Gamma\rho_{ee}^{\mathrm{ss}}.

Multiple beams require their detunings, polarizations, and saturation to be combined consistently. The Laser Cooling Simulation Notebook owns the executable weak Doppler-force, friction, diffusion, and relaxation benchmark.

Unravel the same master equation into no-jump evolution and stochastic jumps. Ensemble-averaged trajectories should recover the unconditional density matrix within sampling uncertainty. Individual records can then test waiting times and antibunching.

Use the quantum regression theorem to propagate operator-conditioned states and compute G(1)(τ)G^{(1)}(\tau) or g(2)(τ)g^{(2)}(\tau). Validate the zero-delay and long-delay limits before Fourier transforming.

Replace the prescribed classical drive by one quantized bosonic mode. The Cavity QED Simulation Notebook verifies the resulting Jaynes–Cummings dressed doublets, vacuum exchange, coherent-state photon-cutoff convergence, and a small unconditional Lindblad-loss model.

Large rate separations can make explicit RK4 inefficient or unstable. Implicit, exponential, or specialized master-equation methods may then be preferable. Solver choice should be based on eigenvalue scales and validated against a resolved reference.

Steady population is even in Δ\Delta, so it cannot expose the error. Inspect the odd dispersive quadrature ussu_{\mathrm{ss}}.

Writing w˙=−Γw\dot w=-\Gamma w relaxes toward w=0w=0. Spontaneous emission into a zero-temperature reservoir requires −Γ(w+1)-\Gamma(w+1).

Radiative population decay already contributes Γ/2\Gamma/2 to Γ2\Gamma_2. Adding Γ\Gamma again as “decoherence” gives the wrong linewidth.

The coefficient multiplying D[σz]\mathcal D[\sigma_z] depends on the collapse operator normalization. State the resulting off-diagonal decay rate.

A smooth damped curve can still have biased phase or peak height. Refine the internal step and compare the observable.

Assuming explicit RK4 preserves positivity

Section titled “Assuming explicit RK4 preserves positivity”

It does not generate a completely positive map for arbitrary hh. Check density eigenvalues or Bloch radius.

Calling a finite-time endpoint the steady state

Section titled “Calling a finite-time endpoint the steady state”

The residual at Γt=15\Gamma t=15 is physical settling, not time-step error. Solve Ar=−bA\mathbf r=-\mathbf b independently.

The half-maximum root is positive HWHM. The notebook doubles it and reports angular FWHM.

Divide angular widths by 2π2\pi before reporting hertz.

Treating normalized line shapes as absolute response

Section titled “Treating normalized line shapes as absolute response”

Normalization erases peak suppression and total count scale.

Equating fluorescence with detector counts

Section titled “Equating fluorescence with detector counts”

Branching, collection, filtering, detector efficiency, background, and dead time intervene.

Equating mean fluorescence with the Mollow spectrum

Section titled “Equating mean fluorescence with the Mollow spectrum”

A mean jump rate contains no two-time frequency information.

Calling Γ−1\Gamma^{-1} the coherence time

Section titled “Calling Γ−1\Gamma^{-1}Γ−1 the coherence time”

For pure radiative decay, T2=2/ΓT_2=2/\Gamma, not 1/Γ1/\Gamma. Pure dephasing reduces it further.

Population can leak into dark states, invalidating the closed two-level steady state and the Γ/2\Gamma/2 rate ceiling.

Show that the eigenvalues of

ρ=12(I+r⋅σ)\rho = \frac12 \left( I+\mathbf r\cdot\boldsymbol\sigma \right)

are (1±∣r∣)/2(1\pm|\mathbf r|)/2. Deduce the positivity condition used by the notebook.

Solution

The Pauli identity gives

(r⋅σ)2=∣r∣2I.\left( \mathbf r\cdot\boldsymbol\sigma \right)^2 = |\mathbf r|^2I.

Therefore r⋅σ\mathbf r\cdot\boldsymbol\sigma has eigenvalues ±∣r∣\pm|\mathbf r|. Adding the identity and dividing by two gives

λ±=1±∣r∣2.\lambda_\pm = \frac{1\pm|\mathbf r|}{2}.

Unit trace is automatic because

λ++λ−=1.\lambda_++\lambda_-=1.

Both eigenvalues are nonnegative exactly when

∣r∣≤1.|\mathbf r|\le1.

Thus the Bloch-ball test is equivalent to positivity for a Hermitian unit-trace 2×22\times2 state. It would not be a sufficient general positivity test in higher dimension.

Set Ω=Δ=0\Omega=\Delta=0. Solve the Bloch equations for arbitrary u(0)u(0), v(0)v(0), and w(0)w(0).

Solution

The equations decouple:

u˙=−Γ2u,v˙=−Γ2v,w˙=−Γ(w+1).\dot u=-\Gamma_2u, \qquad \dot v=-\Gamma_2v, \qquad \dot w=-\Gamma(w+1).

Therefore

u(t)=u(0)e−Γ2t,v(t)=v(0)e−Γ2t,w(t)=−1+[w(0)+1]e−Γt.\begin{aligned} u(t) &= u(0)e^{-\Gamma_2t}, \\ v(t) &= v(0)e^{-\Gamma_2t}, \\ w(t) &= -1+[w(0)+1]e^{-\Gamma t}. \end{aligned}

For an initially excited atom, w(0)=1w(0)=1, so

ρee(t)=1+w(t)2=e−Γt.\rho_{ee}(t) = \frac{1+w(t)}{2} = e^{-\Gamma t}.

For pure radiative decay,

Γ2=Γ2,\Gamma_2=\frac{\Gamma}{2},

so coherence amplitude decays twice as slowly as excited population.

Starting from the three optical Bloch equations, derive ussu_{\mathrm{ss}}, vssv_{\mathrm{ss}}, and wssw_{\mathrm{ss}} with the notebook’s detuning sign.

Solution

From the first steady equation,

uss=−ΔΓ2vss.u_{\mathrm{ss}} = -\frac{\Delta}{\Gamma_2}v_{\mathrm{ss}}.

The second gives

0=Δuss−Γ2vss−Ωwss=−(Δ2Γ2+Γ2)vss−Ωwss.\begin{aligned} 0 &= \Delta u_{\mathrm{ss}} - \Gamma_2v_{\mathrm{ss}} - \Omega w_{\mathrm{ss}} \\ &= - \left( \frac{\Delta^2}{\Gamma_2} + \Gamma_2 \right) v_{\mathrm{ss}} - \Omega w_{\mathrm{ss}}. \end{aligned}

Thus

vss=−ΩΓ2Δ2+Γ22wss.v_{\mathrm{ss}} = - \frac{\Omega\Gamma_2} {\Delta^2+\Gamma_2^2} w_{\mathrm{ss}}.

The third equation requires

Ωvss=Γ(wss+1).\Omega v_{\mathrm{ss}} = \Gamma(w_{\mathrm{ss}}+1).

Substitution gives

wss=−Γ(Δ2+Γ22)Γ(Δ2+Γ22)+Ω2Γ2.w_{\mathrm{ss}} = - \frac{ \Gamma(\Delta^2+\Gamma_2^2) }{ \Gamma(\Delta^2+\Gamma_2^2) + \Omega^2\Gamma_2 }.

Defining the denominator as DD, back-substitution yields

vss=ΩΓΓ2D,uss=−ΩΓΔD.\begin{aligned} v_{\mathrm{ss}} &= \frac{\Omega\Gamma\Gamma_2}{D}, \\ u_{\mathrm{ss}} &= - \frac{\Omega\Gamma\Delta}{D}. \end{aligned}

The minus sign of ussu_{\mathrm{ss}} follows from Δ=ω0−ωL\Delta=\omega_0-\omega_L and the stated definition of vv.

For γϕ=Δ=0\gamma_\phi=\Delta=0, calculate the steady population and total fluorescence rate at Ω=Γ\Omega=\Gamma. What is their strong-drive limit?

Solution

For pure radiative decay,

Γ2=Γ2.\Gamma_2=\frac{\Gamma}{2}.

On resonance,

ρeess=Ω2Γ2+2Ω2.\rho_{ee}^{\mathrm{ss}} = \frac{\Omega^2} {\Gamma^2+2\Omega^2}.

At Ω=Γ\Omega=\Gamma,

ρeess=Γ23Γ2=13.\rho_{ee}^{\mathrm{ss}} = \frac{\Gamma^2}{3\Gamma^2} = \frac13.

The total emission rate is

Rflss=Γρeess=Γ3.R_{\mathrm{fl}}^{\mathrm{ss}} = \Gamma\rho_{ee}^{\mathrm{ss}} = \frac{\Gamma}{3}.

As Ω→∞\Omega\to\infty,

ρeess→12,Rflss→Γ2.\rho_{ee}^{\mathrm{ss}}\to\frac12, \qquad R_{\mathrm{fl}}^{\mathrm{ss}}\to\frac{\Gamma}{2}.

Detected counts remain smaller unless every emitted photon is recorded.

Derive the FWHM of ρeess(Δ)\rho_{ee}^{\mathrm{ss}}(\Delta) at fixed drive. Reduce the result for γϕ=0\gamma_\phi=0.

Solution

The line-centre denominator is

D0=ΓΓ22+Ω2Γ2.D_0 = \Gamma\Gamma_2^2+\Omega^2\Gamma_2.

At half maximum, the denominator doubles:

Γ(Δ1/22+Γ22)+Ω2Γ2=2D0.\Gamma(\Delta_{1/2}^2+\Gamma_2^2) + \Omega^2\Gamma_2 = 2D_0.

Therefore

ΓΔ1/22=ΓΓ22+Ω2Γ2,\Gamma\Delta_{1/2}^2 = \Gamma\Gamma_2^2+\Omega^2\Gamma_2,

so

Δ1/2=Γ22+Ω2Γ2Γ.\Delta_{1/2} = \sqrt{ \Gamma_2^2 + \frac{\Omega^2\Gamma_2}{\Gamma} }.

The full width is twice the positive half-width:

FWHM=2Δ1/2.\mathrm{FWHM} = 2\Delta_{1/2}.

For Γ2=Γ/2\Gamma_2=\Gamma/2,

FWHM=Γ1+2Ω2Γ2.\mathrm{FWHM} = \Gamma \sqrt{ 1+2\frac{\Omega^2}{\Gamma^2} }.

At Ω=4Γ\Omega=4\Gamma, this is

Γ33≈5.74456Γ,\Gamma\sqrt{33} \approx 5.74456\Gamma,

matching the numerical extraction.

Derive the condition for oscillatory resonant transients. Evaluate the damped angular frequency and envelope decay rate when γϕ=0\gamma_\phi=0.

Solution

The resonant (v,w)(v,w) deviation matrix has eigenvalues

λ±=−Γ+Γ22±(Γ−Γ2)24−Ω2.\lambda_\pm = - \frac{\Gamma+\Gamma_2}{2} \pm \sqrt{ \frac{(\Gamma-\Gamma_2)^2}{4} -\Omega^2 }.

They form a complex-conjugate pair when

Ω>∣Γ−Γ2∣2.\Omega > \frac{|\Gamma-\Gamma_2|}{2}.

The oscillation frequency is

Ωd=Ω2−(Γ−Γ2)24,\Omega_{\mathrm d} = \sqrt{ \Omega^2 - \frac{(\Gamma-\Gamma_2)^2}{4} },

and the envelope decay rate is

Γ+Γ22.\frac{\Gamma+\Gamma_2}{2}.

For γϕ=0\gamma_\phi=0, Γ2=Γ/2\Gamma_2=\Gamma/2, giving

Ωd=Ω2−Γ216\Omega_{\mathrm d} = \sqrt{ \Omega^2-\frac{\Gamma^2}{16} }

and envelope rate 3Γ/43\Gamma/4. The critical drive is Ω=Γ/4\Omega=\Gamma/4.

If the leading global error is C(t)h4C(t)h^4, what refinement-difference ratio is expected for steps hh, h/2h/2, and h/4h/4? Why need the measured ratio not equal it exactly?

Solution

At fixed time,

yh−yh/2=Ch4(1−116)+O(h5),yh/2−yh/4=Ch416(1−116)+O(h5).\begin{aligned} y_h-y_{h/2} &= Ch^4 \left( 1-\frac1{16} \right) + O(h^5), \\ y_{h/2}-y_{h/4} &= \frac{Ch^4}{16} \left( 1-\frac1{16} \right) + O(h^5). \end{aligned}

Therefore

∣yh−yh/2∣∣yh/2−yh/4∣→16.\frac{|y_h-y_{h/2}|} {|y_{h/2}-y_{h/4}|} \to16.

The notebook takes a maximum over sampled times, and the time attaining the maximum can change with resolution. Landing exactly on output times changes some internal substeps. Higher-order error terms and cancellation also shift a finite-grid ratio. Values near and stably above the expected scale, together with a small finest difference, support the convergence claim.

An atom has Γ=2π×6 MHz\Gamma=2\pi\times6\ \mathrm{MHz} and is driven on resonance at Ω=Γ\Omega=\Gamma. A channel has branching fraction b=0.8b=0.8, total detection efficiency ηsys=0.02\eta_{\mathrm{sys}}=0.02, and background Rbg=3.0×103 s−1R_{\mathrm{bg}}=3.0\times10^3\ \mathrm{s}^{-1}. Estimate the observed steady count rate in the ideal two-level model.

Solution

At Ω=Γ\Omega=\Gamma with no pure dephasing,

ρeess=13.\rho_{ee}^{\mathrm{ss}}=\frac13.

The total emission rate is

Rfl=Γ3=2π(6.0×106)3≈1.2566×107 s−1.R_{\mathrm{fl}} = \frac{\Gamma}{3} = \frac{2\pi(6.0\times10^6)}{3} \approx 1.2566\times10^7\ \mathrm{s}^{-1}.

The detected signal contribution is

Rsig=ηsysbRfl=0.02(0.8)(1.2566×107)≈2.01×105 s−1.\begin{aligned} R_{\mathrm{sig}} &= \eta_{\mathrm{sys}}bR_{\mathrm{fl}} \\ &= 0.02(0.8) \left( 1.2566\times10^7 \right) \\ &\approx 2.01\times10^5\ \mathrm{s}^{-1}. \end{aligned}

Adding background gives

Rdet≈2.04×105 s−1.R_{\mathrm{det}} \approx 2.04\times10^5\ \mathrm{s}^{-1}.

This estimate assumes no dead time, leakage, reabsorption, or collection variation.

At Ω=Γ\Omega=\Gamma and Δ=0\Delta=0, compute the steady population for γϕ/Γ=0\gamma_\phi/\Gamma=0, 0.50.5, and 22. Explain why comparing the three values is a fixed-drive comparison rather than a fixed-saturation comparison.

Solution

On resonance,

s(0)=Ω2ΓΓ2,Γ2=Γ2+γϕ.s(0) = \frac{\Omega^2}{\Gamma\Gamma_2}, \qquad \Gamma_2 = \frac{\Gamma}{2}+\gamma_\phi.

For Ω=Γ\Omega=\Gamma:

  1. γϕ=0\gamma_\phi=0 gives Γ2=Γ/2\Gamma_2=\Gamma/2, s=2s=2, and ρee=2/[2(3)]=1/3\rho_{ee}=2/[2(3)]=1/3.
  2. γϕ=Γ/2\gamma_\phi=\Gamma/2 gives Γ2=Γ\Gamma_2=\Gamma, s=1s=1, and ρee=1/4\rho_{ee}=1/4.
  3. γϕ=2Γ\gamma_\phi=2\Gamma gives Γ2=5Γ/2\Gamma_2=5\Gamma/2, s=2/5s=2/5, and ρee=(2/5)/[2(7/5)]=1/7\rho_{ee}=(2/5)/[2(7/5)]=1/7.

The drive amplitude Ω\Omega is held fixed while Γ2\Gamma_2 changes, so the saturation parameter changes. A fixed-ss comparison would increase Ω\Omega with Γ2\sqrt{\Gamma_2} and would produce the same steady population by construction.

Before extending or citing the result, preserve:

  • basis order;
  • definitions of uu, vv, and ww;
  • detuning sign;
  • Rabi-frequency convention;
  • Γ\Gamma, γϕ\gamma_\phi, and Γ2\Gamma_2 normalization;
  • affine source term;
  • initial density matrix;
  • output and internal grids;
  • integrator and refinement ladder;
  • positivity diagnostic;
  • steady-state reference;
  • linewidth and frequency-unit convention;
  • fluorescence-versus-detection mapping;
  • runtime and dependency versions; and
  • physical exclusions.

The JSON artifact records each choice used here. A modified program should update its metadata and acceptance thresholds together with the equations.

The Reproducibility Benchmarks suite independently checks the resonant steady population ρeess=1/3\rho_{ee}^{\mathrm{ss}}=1/3 and folds this notebook’s analytic agreement, producer validations, artifact hashes, and runtime record into a versioned cross-notebook report.

  1. F. Bloch, “Nuclear Induction,” Physical Review 70, 460–474 (1946), doi:10.1103/PhysRev.70.460.
  2. R. P. Feynman, F. L. Vernon, Jr., and R. W. Hellwarth, “Geometrical Representation of the Schrödinger Equation for Solving Maser Problems,” Journal of Applied Physics 28, 49–52 (1957), doi:10.1063/1.1722572.
  3. G. Lindblad, “On the Generators of Quantum Dynamical Semigroups,” Communications in Mathematical Physics 48, 119–130 (1976), doi:10.1007/BF01608499.
  4. V. Gorini, A. Kossakowski, and E. C. G. Sudarshan, “Completely Positive Dynamical Semigroups of N-Level Systems,” Journal of Mathematical Physics 17, 821–825 (1976), doi:10.1063/1.522979.
  5. B. R. Mollow, “Power Spectrum of Light Scattered by Two-Level Systems,” Physical Review 188, 1969–1975 (1969), doi:10.1103/PhysRev.188.1969.
  6. L. Allen and J. H. Eberly, Optical Resonance and Two-Level Atoms, Wiley (1975); Dover reprint (1987).
  7. C. Cohen-Tannoudji, J. Dupont-Roc, and G. Grynberg, Atom–Photon Interactions: Basic Processes and Applications, Wiley (1992).
  8. M. O. Scully and M. S. Zubairy, Quantum Optics, Cambridge University Press (1997).
  9. H. J. Carmichael, An Open Systems Approach to Quantum Optics, Springer (1993), doi:10.1007/978-3-540-47620-7.
  10. C. J. Foot, Atomic Physics, Oxford University Press (2005).
  11. H. J. Metcalf and P. van der Straten, Laser Cooling and Trapping, Springer (1999), doi:10.1007/978-1-4612-1470-0.
  12. E. Hairer, S. P. Nørsett, and G. Wanner, Solving Ordinary Differential Equations I: Nonstiff Problems, 2nd revised ed., Springer (1993), doi:10.1007/978-3-540-78862-1.