Lecture 5
Analytical solutions for free and bound electrons
In the lecture
- the time-dependent Schrödinger equation and, for states of fixed energy, the time-independent equation with its oscillating (\(E > U\)) and growing or decaying (\(E < U\)) solutions
- the meaning of the wavefunction: \(|\psi|^2\) is a probability density; momentum \(\pm\hbar k\) and energy follow from derivatives
- case 1, the free electron (\(E \gg U\)): every positive energy is allowed, and each is doubly degenerate
- the potential step: evanescent waves below the step, and transmission \(T = 4k_1k_2/(k_1+k_2)^2\) with reflection above it, unlike classical particles
- case 2, the particle in a box (\(E \ll U\)): \(\psi_n = \sqrt{2/L}\sin(n\pi x/L)\), \(E_n = \hbar^2\pi^2n^2/2mL^2\), and why the levels can only be resolved at the nanometre scale
In this notebook
solves the three problems of the lecture with open-nemo and compares each with its analytic solution: the dispersion of a free electron on open-nemo's grid against \(\hbar^2k^2/2m\), the evanescent decay below a potential step from open-nemo's spectral function, the transmission and reflection over steps of 0.1, 0.4 and 1.0 eV (the lecture's numerical example) against \(4k_1k_2/(k_1+k_2)^2\), and the levels and normalized wavefunctions of 5 nm and 50 nm boxes against \(\hbar^2\pi^2n^2/2mL^2\), extended to a 50 cm box.
Run it on your own machine
The notebook needs open-nemo (Python ≥ 3.10 and a C++20 compiler; BLAS/LAPACK).
git clone https://github.com/denphi/open-nemo.git && cd open-nemo
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[notebooks]"
jupyter lab From_Atoms_to_Devices/02_materials_and_quantum_mechanics/05_0_free_and_bound_electrons.ipynb
Code
import numpy as np
import matplotlib.pyplot as plt
import opennemo as nemo
from opennemo.visualization import style
style.use(notebook=True)
from opennemo.core.units import HBAR2_2M0, KB
1. The Schrödinger equation#
Lecture 4.3 ended with the problem: electrons in a periodic potential, some bound, some free. Before the periodic case (Lectures 6 and 7), this lecture solves the simplest pieces of it analytically: an electron far above the potential (free), an electron at a single step, and an electron deep in a well (bound). The tool is the time-dependent Schrödinger equation,
For a potential that does not depend on time, the ansatz \(\Psi(x,t) = \psi(x)\,e^{-iEt/\hbar}\) separates space and time and leaves the time-independent equation
In a region of constant \(U\) it has two kinds of solutions:
\(|\psi(x)|^2\,dx\) is the probability of finding the electron between \(x\) and \(x + dx\); the momentum of \(e^{\pm ikx}\) is \(\pm\hbar k\) (from \(-i\hbar\,\partial/\partial x\)), and its energy follows from \(i\hbar\,\partial/\partial t\). The numbers below use \(\hbar^2/2m_0 = 0.0381\) eV nm².
2. Case 1: the free electron#
With \(U = 0\) every energy \(E > 0\) is allowed, and for each there are two independent solutions, \(e^{+ikx}\) and \(e^{-ikx}\), moving right and left: the spectrum is continuous and doubly degenerate,
open-nemo represents the electron on a grid of spacing \(\Delta x\). The cell builds a uniform lead (electron mass 0.067 \(m_0\), as in GaAs), computes its dispersion with open-nemo's lead solver, and compares it with the parabola. On the grid the second derivative becomes a difference, and the dispersion is \(E = (\hbar^2/m\Delta x^2)(1 - \cos k\Delta x)\), which follows the parabola for \(k\Delta x \ll 1\).
Code
EM = nemo.structures.materials.EffectiveMassMaterial
M = 0.067
dx = 0.1
cell = nemo.Heterostructure1D([nemo.Layer(EM("GaAs", M, 12.9), 1.0)], spacing=dx) # 10 sites per period
h = cell.hamiltonian.sparse.dense().real
V = np.zeros_like(h)
V[-1, 0] = -HBAR2_2M0 / (M * dx**2)
lead = nemo.Lead(h, V)
a = cell.num_sites * dx
qa = np.linspace(-np.pi, np.pi, 201)
E_bands = np.array([lead.bands(np.array([x]))[0] for x in qa]) # folded into the 1 nm period
k_unf = (qa[:, None] + 2 * np.pi * np.arange(-5, 5)[None, :]) / a # all k that fold to qa
E_grid = 2 * HBAR2_2M0 / (M * dx**2) * (1 - np.cos(k_unf * dx))
dev_grid = np.max(abs(np.sort(E_grid, axis=1)[:, :10] - np.sort(E_bands, axis=1)[:, :10]))
print(f"open-nemo bands vs grid dispersion (1 − cos kΔx): largest difference {dev_grid:.1e} eV")
for E0 in (0.1, 0.5, 1.0):
k0 = np.sqrt(M * E0 / HBAR2_2M0)
print(
f"E = {E0:.1f} eV: k = ±{k0:.3f} nm⁻¹, λ = {2 * np.pi / k0:.2f} nm; grid energy at that k "
f"{2 * HBAR2_2M0 / (M * dx**2) * (1 - np.cos(k0 * dx)):.4f} eV"
)
fig, ax = plt.subplots(figsize=(6.5, 4))
kk = np.linspace(-6, 6, 400)
ax.plot(kk, HBAR2_2M0 * kk**2 / M, color=style.REFERENCE, ls="--", label="ħ²k²/2m")
ax.plot(
kk,
2 * HBAR2_2M0 / (M * dx**2) * (1 - np.cos(kk * dx)),
color=style.OPEN_NEMO,
label="open-nemo grid, Δx = 0.1 nm",
)
ax.axhline(0.5, color=style.CONTEXT, lw=0.8)
ax.plot([-np.sqrt(M * 0.5 / HBAR2_2M0), np.sqrt(M * 0.5 / HBAR2_2M0)], [0.5, 0.5], "o", color=style.CONTEXT)
ax.set(
xlabel="wave number k (nm⁻¹)",
ylabel="energy E (eV)",
ylim=(0, 2.5),
title="free electron: two states (±k) per energy",
)
ax.legend(frameon=False, fontsize=8)
fig.tight_layout();
open-nemo bands vs grid dispersion (1 − cos kΔx): largest difference 1.7e-13 eV E = 0.1 eV: k = ±0.419 nm⁻¹, λ = 14.98 nm; grid energy at that k 0.1000 eV E = 0.5 eV: k = ±0.938 nm⁻¹, λ = 6.70 nm; grid energy at that k 0.4996 eV E = 1.0 eV: k = ±1.326 nm⁻¹, λ = 4.74 nm; grid energy at that k 0.9985 eV

The lead solver reproduces the grid dispersion to machine precision, and the grid follows the parabola at the energies of interest: at 0.5 eV (\(k = \pm 0.938\) nm⁻¹, \(\lambda = 6.70\) nm) the grid energy is 0.4996 eV, 0.08 % low. Every energy line crosses the dispersion twice, at \(+k\) and \(-k\): the double degeneracy of the free electron.
3. Reflection and transmission at a potential step#
The next problem has a potential step of height \(V_0\) at \(x = 0\). An electron arrives from the left with amplitude \(A^{(1)}\); part of it is reflected (\(B^{(1)}\)), part transmitted (\(A^{(2)}\)), nothing comes from the right, and no particles are lost. In each region the solution is one of the two forms of section 1, and \(\psi\) and \(d\psi/dx\) must be continuous at the step.
Below the step, \(E < V_0\), the wave on the right decays, \(\psi_2 = A^{(2)}e^{-\kappa x}\) with \(\kappa = \sqrt{2m(V_0-E)}/\hbar\). Matching gives
\(|B^{(1)}| = |A^{(1)}|\), so the electron is totally reflected and the left region holds a standing wave. The electron still penetrates into the step, with \(|\psi|^2 \propto e^{-2\kappa x}\), but an evanescent wave carries no probability current. Classical physics agrees on the total reflection, not on the penetration.
The cell checks this with open-nemo. The device is the lecture's: 6 nm at \(U = 0\) and a step of 0.4 eV to the right, both continuing as leads. open-nemo's spectral function for electrons injected from the left, \(A_L(x, E)\), is proportional to \(|\psi(x)|^2\) of the scattering state.
Code
def step_device(v0, dx=0.05):
return nemo.Heterostructure1D(
[
nemo.Layer(EM("left", M, 12.9), 6.0),
nemo.Layer(EM("right", M, 12.9, conduction_band_edge=v0), 4.0),
],
spacing=dx,
)
V0 = 0.4
dev = step_device(V0)
E_in = np.array([0.2, 0.3])
res = nemo.Transport(dev.hamiltonian).solve(E_in)
x = dev.x - 6.0 # step at x = 0
fig, ax = plt.subplots(figsize=(7, 3.8))
for i, (e, col) in enumerate(zip(E_in, style.sweep(2))):
A = np.asarray(res["spectral_left"])[i]
kappa = np.sqrt(M * (V0 - e) / HBAR2_2M0)
k1 = np.sqrt(M * e / HBAR2_2M0)
right = (x > 0.2) & (x < 2.0)
slope = -np.polyfit(x[right], np.log(A[right]), 1)[0] / 2
print(
f"E = {e:.1f} eV: decay constant from open-nemo {slope:.3f} nm⁻¹, κ = {kappa:.3f} nm⁻¹ "
f"(decay length 1/2κ of |ψ|² = {1 / (2 * kappa):.2f} nm); T = {res['transmission'][i]:.1e}"
)
# analytic |ψ|² with A1 = 1: standing wave on the left, evanescent on the right
r = (k1 - 1j * kappa) / (k1 + 1j * kappa)
psi2 = np.where(
x < 0,
abs(np.exp(1j * k1 * x) + r * np.exp(-1j * k1 * x)) ** 2,
abs(2 * k1 / (k1 + 1j * kappa)) ** 2 * np.exp(-2 * kappa * x),
)
scale = np.max(A[x < 0]) / np.max(psi2[x < 0])
ax.plot(x, A / scale, color=col, label=f"open-nemo A_L, E = {e} eV")
ax.plot(
x[::4],
psi2[::4],
"o",
ms=3,
mfc="none",
color=style.REFERENCE,
label="analytic |ψ|²" if i == 0 else None,
)
ax.axvline(0, color=style.CONTEXT, lw=0.8)
ax.set(
xlabel="position x (nm), step at x = 0",
ylabel="|ψ|² (|A⁽¹⁾|² = 1)",
xlim=(-6, 4),
title=f"E < V₀ = {V0} eV: standing wave and evanescent tail",
)
ax.legend(frameon=False, fontsize=8)
fig.tight_layout();
E = 0.2 eV: decay constant from open-nemo 0.593 nm⁻¹, κ = 0.593 nm⁻¹ (decay length 1/2κ of |ψ|² = 0.84 nm); T = 4.3e-10 E = 0.3 eV: decay constant from open-nemo 0.419 nm⁻¹, κ = 0.419 nm⁻¹ (decay length 1/2κ of |ψ|² = 1.19 nm); T = 3.0e-09

Inside the step open-nemo's \(|\psi|^2\) decays as \(e^{-2\kappa x}\) with \(\kappa\) = 0.593 nm⁻¹ at 0.2 eV and 0.419 nm⁻¹ at 0.3 eV, the analytic values to three digits: the electron penetrates \(1/2\kappa\) = 0.84 and 1.19 nm into the classically forbidden region. To the left of the step the standing wave has nodes where incident and reflected waves cancel, with \(|\psi|^2\) oscillating between 0 and 4. The transmission of a semi-infinite step is zero below \(V_0\); open-nemo returns \(4.3\times10^{-10}\) and \(3.0\times10^{-9}\), numerical zeros.
Above the step, \(E > V_0\), both regions carry propagating waves with \(k_1 = \sqrt{2mE}/\hbar\) and \(k_2 = \sqrt{2m(E - V_0)}/\hbar\), and matching gives
The factor \(k_2/k_1\) converts amplitudes into probability currents, \(J = (\hbar k/m)|A|^2\). A classical particle above the step would always pass; the quantum electron is partly reflected. The lecture's numerical example (computed with a nanoHUB tool) shows \(T\) and \(R\) for steps of 0.1, 0.4 and 1.0 eV.
The cell computes the same three curves with open-nemo and compares them with the formula.
Code
def t_step(e, v0):
k1, k2 = np.sqrt(e), np.sqrt(np.clip(e - v0, 0, None)) # common factor sqrt(m/(ħ²/2m0)) cancels
return 4 * k1 * k2 / (k1 + k2) ** 2
E = np.linspace(0.005, 1.5, 300)
fig, (a0, a1, a2) = plt.subplots(1, 3, figsize=(12, 3.8), sharey=True)
for v0, col, n in zip((0.1, 0.4, 1.0), style.sweep(3), (1, 2, 3)):
d = step_device(v0)
T = nemo.Transport(d.hamiltonian).transmission(E)
above = E > v0 + 0.01
print(
f"step {n}: V0 = {v0:.1f} eV: max |T_open-nemo − 4k1k2/(k1+k2)²| above the step = "
f"{np.max(abs(T[above] - t_step(E[above], v0))):.1e}; T(1.5 V0) = {t_step(1.5 * v0, v0):.3f}, "
f"T(V0 + 0.5 eV) = {t_step(v0 + 0.5, v0):.3f}"
)
a0.plot(d.x, d.band_edge, color=col, label=f"step {n}")
a1.semilogx(np.clip(T, 1e-3, None), E, color=col)
a1.semilogx(t_step(E[above], v0)[::12], E[above][::12], "o", ms=3, mfc="none", color=style.REFERENCE)
a2.semilogx(np.clip(1 - T, 1e-3, None), E, color=col)
a0.set(xlabel="distance (nm)", ylabel="energy (eV)", title="potential energy", ylim=(0, 1.5))
a0.legend(frameon=False, fontsize=8)
a1.set(xlabel="transmission T", xlim=(0.1, 1.05), title="open-nemo (circles: 4k₁k₂/(k₁+k₂)²)")
a1.set_xticks([0.1, 0.2, 0.5, 1.0], ["0.1", "0.2", "0.5", "1"])
a1.xaxis.set_minor_formatter(plt.NullFormatter())
a2.set(xlabel="reflection R = 1 − T", xlim=(1e-3, 1.05), title="reflection above the step")
fig.tight_layout();
step 1: V0 = 0.1 eV: max |T_open-nemo − 4k1k2/(k1+k2)²| above the step = 2.0e-05; T(1.5 V0) = 0.928, T(V0 + 0.5 eV) = 0.998 step 2: V0 = 0.4 eV: max |T_open-nemo − 4k1k2/(k1+k2)²| above the step = 8.5e-05; T(1.5 V0) = 0.928, T(V0 + 0.5 eV) = 0.979 step 3: V0 = 1.0 eV: max |T_open-nemo − 4k1k2/(k1+k2)²| above the step = 2.1e-04; T(1.5 V0) = 0.928, T(V0 + 0.5 eV) = 0.928

open-nemo and the formula agree to within \(2.1\times10^{-4}\) (largest for the 1.0 eV step), the effect of the 0.05 nm grid (section 2). The curves reproduce the slide: the transmission is not unity immediately above the step but rises from zero; the higher the step, the wider the energy range it takes, because \(T\) depends only on \(E/V_0\) (\(T = 0.928\) at \(E = 1.5\,V_0\) for every step). Half an electronvolt above the step, the 0.1 eV step transmits 0.998 of the electrons, the 0.4 eV step 0.979 and the 1.0 eV step only 0.928. There is reflection above the barrier, which classical mechanics forbids; it comes from the change of the propagation constant from \(k_1\) to \(k_2\), exactly as a wave on a string is partly reflected where the string becomes heavier (and as the billiard balls of Lecture 4.1 share their energy according to \(4m_1m_2/(m_1+m_2)^2\)).
4. Case 2: the particle in a box#
The bound problems are the other limit, \(E \ll U\). Only a few potentials have exact solutions, and they involve special functions: the Coulomb potential of the atom (spherical harmonics, which give the s, p, d, f orbitals of the periodic table), the box (sines), the harmonic oscillator (Hermite functions; the slide labels them Hankel functions) and the triangular well of a MOS interface (Airy functions).
In a box with infinitely high walls at \(x = 0\) and \(x = L\) the electron cannot be outside, so \(\psi(0) = \psi(L) = 0\), and inside it is free. The solutions are standing waves (Lecture 4.1),
The amplitude follows from normalization to one particle, \(\int_0^L|\psi_n|^2dx = A^2L/2 = 1\), so \(A = \sqrt{2/L}\). Negative \(n\) give the same states with the opposite sign, and \(\psi\) itself can be negative; only \(|\psi|^2\) is a probability. The densities \(|\psi_n|^2\) have \(n\) lobes, which the lecture calls s-, p-, d- and f-type by analogy with the atomic orbitals.
The cell solves a 5 nm GaAs box (\(m = 0.067\,m_0\)) with open-nemo and checks levels, normalization and nodes. As in Lecture 4.1, the hard walls of the grid sit one spacing beyond the last site, so the box is \(L + \Delta x\) long.
Code
def box_levels(length, m=M, dx=0.01, num=5):
box = nemo.Heterostructure1D([nemo.Layer(EM("well", m, 12.9), length)], spacing=dx)
st = nemo.eigenstates(box.hamiltonian.sparse, num=num)
o = np.argsort(st["energies"])
return box, np.asarray(st["energies"])[o], np.asarray(st["vectors"])[:, o]
def e_box(n, length, m=M):
return HBAR2_2M0 * (np.pi * n / length) ** 2 / m
box, En, vec = box_levels(5.0)
dxb = 0.01
Lb = box.num_sites * dxb + dxb
xb = box.x + dxb / 2 # distance from the left wall
print(f"5 nm box, {box.num_sites} sites, L + Δx = {Lb:.2f} nm")
print(" n open-nemo (eV) ħ²π²n²/2mL² (eV) ∫|ψ|²dx nodes overlap with √(2/L) sin(nπx/L)")
for n in range(1, 6):
psi = vec[:, n - 1].real / np.sqrt(dxb)
exact = np.sqrt(2 / Lb) * np.sin(n * np.pi * xb / Lb)
nodes = np.count_nonzero(np.diff(np.sign(psi[abs(psi) > 1e-6 * abs(psi).max()])))
print(
f"{n:2d} {En[n - 1]:13.5f} {e_box(n, Lb):16.5f} {np.sum(psi**2) * dxb:8.5f} {nodes:5d} "
f"{abs(np.sum(psi * exact) * dxb):.6f}"
)
fig, (a1, a2) = plt.subplots(1, 2, figsize=(11, 4))
for n, col in zip(range(1, 5), style.sweep(4)):
psi = vec[:, n - 1].real / np.sqrt(dxb)
psi *= np.sign(psi[np.argmax(abs(psi) > 0.5 * abs(psi).max())])
a1.plot(xb, psi + 1.2 * (n - 1), color=col, label=f"n = {n}")
a2.plot(xb, psi**2 + 1.0 * (n - 1), color=col)
a2.plot(
xb[::25],
(2 / Lb) * np.sin(n * np.pi * xb[::25] / Lb) ** 2 + 1.0 * (n - 1),
"o",
ms=2.5,
mfc="none",
color=style.REFERENCE,
)
a1.set(xlabel="x (nm)", ylabel="ψ_n (nm⁻¹ᐟ², offset)", title="open-nemo wavefunctions, 5 nm box")
a1.legend(frameon=False, fontsize=8, loc="upper right")
a2.set(xlabel="x (nm)", ylabel="|ψ_n|² (nm⁻¹, offset)", title="densities (circles: (2/L) sin²(nπx/L))")
fig.tight_layout();
5 nm box, 500 sites, L + Δx = 5.01 nm n open-nemo (eV) ħ²π²n²/2mL² (eV) ∫|ψ|²dx nodes overlap with √(2/L) sin(nπx/L) 1 0.22360 0.22360 1.00000 0 1.000000 2 0.89439 0.89440 1.00000 1 1.000000 3 2.01234 2.01240 1.00000 2 1.000000 4 3.57742 3.57761 1.00000 3 1.000000 5 5.58955 5.59001 1.00000 4 1.000000

The open-nemo levels follow \(n^2\): 0.22360, 0.89439, 2.01234, 3.57742 and 5.58955 eV against the formula's 0.22360, 0.89440, 2.01240, 3.57761 and 5.59001 eV for \(L + \Delta x = 5.01\) nm. Each state is normalized to one particle, has \(n - 1\) nodes inside the box, and coincides with \(\sqrt{2/L}\sin(n\pi x/L)\) (overlap 1.000000).
5. Quantum world and macroscopic world#
The level spacing shrinks as \(1/L^2\). Klimeck compares boxes of 5 nm, 50 nm and 50 cm: in the nanometre box the levels are far apart, in the 50 nm box they crowd together, and in the macroscopic box the spacing is far too small to resolve, so the energies look continuous.
Whether a spacing can be resolved is decided by the thermal energy, \(k_BT = 25.9\) meV at 300 K, which smears the occupation of the levels. The cell computes the lowest levels for the three sizes (open-nemo for 5 and 50 nm, the formula for 50 cm) with the GaAs mass and with the free-electron mass.
Code
kT300 = KB * 300.0
box50, En50, _ = box_levels(50.0, dx=0.05, num=4)
L50 = box50.num_sites * 0.05 + 0.05
print(
f"50 nm box: open-nemo E1..E4 = {np.array2string(1e3 * En50, precision=3)} meV; "
f"formula {np.array2string(1e3 * e_box(np.arange(1, 5), L50), precision=3)} meV"
)
print(f"k_B T at 300 K = {1e3 * kT300:.1f} meV, at 4.2 K = {1e3 * KB * 4.2:.3f} meV\n")
print(" L m/m0 E1 (eV) E2 − E1 (eV) (E2 − E1) / k_BT(300 K)")
for length, label in ((5.0, "5 nm"), (50.0, "50 nm"), (5e8, "50 cm")):
for m in (M, 1.0):
gap = e_box(2, length, m) - e_box(1, length, m)
print(f" {label:10s} {m:6.3f} {e_box(1, length, m):10.3e} {gap:12.3e} {gap / kT300:12.3e}")
Ls = np.logspace(0, 3, 200)
fig, ax = plt.subplots(figsize=(6.5, 4))
for m, col in ((M, style.OPEN_NEMO), (1.0, style.REFERENCE)):
ax.loglog(Ls, 1e3 * (e_box(2, Ls, m) - e_box(1, Ls, m)), color=col, label=f"E₂ − E₁, m = {m:g} m₀")
ax.axhline(1e3 * kT300, color=style.CONTEXT, ls="--", label="k_BT at 300 K")
ax.axhline(1e3 * KB * 4.2, color=style.CONTEXT, ls=":", label="k_BT at 4.2 K")
ax.set(xlabel="box length L (nm)", ylabel="level spacing (meV)", title="the spacing falls as 1/L²")
ax.legend(frameon=False, fontsize=8)
fig.tight_layout();
50 nm box: open-nemo E1..E4 = [ 2.24 8.962 20.164 35.847] meV; formula [ 2.24 8.962 20.164 35.848] meV k_B T at 300 K = 25.9 meV, at 4.2 K = 0.362 meV L m/m0 E1 (eV) E2 − E1 (eV) (E2 − E1) / k_BT(300 K) 5 nm 0.067 2.245e-01 6.735e-01 2.605e+01 5 nm 1.000 1.504e-02 4.512e-02 1.745e+00 50 nm 0.067 2.245e-03 6.735e-03 2.605e-01 50 nm 1.000 1.504e-04 4.512e-04 1.745e-02 50 cm 0.067 2.245e-17 6.735e-17 2.605e-15 50 cm 1.000 1.504e-18 4.512e-18 1.745e-16

In a 5 nm GaAs box the first two levels are 0.67 eV apart, 26 times the thermal energy at room temperature: an electron there is unmistakably quantized. At 50 nm the spacing is 6.7 meV, a quarter of \(k_BT\) at 300 K, and resolvable only at low temperature. In a 50 cm box it is \(6.7\times10^{-17}\) eV, \(2.6\times10^{-15}\) of \(k_BT\): a continuum for every practical purpose. This is why electronic quantum effects appear only in nanoscale structures, and why, as Klimeck recalls, from the 1980s to about 2000 a whole research field struggled to make systems small enough to uncover them reliably. Today's transistors are small enough that they cannot be designed without them.
Summary#
- The time-independent Schrödinger equation has oscillating solutions \(e^{\pm ikx}\) where \(E > U\) and growing or decaying solutions \(e^{\pm\alpha x}\) where \(E < U\); \(|\psi|^2\) is a probability density.
- A free electron has a continuous, doubly degenerate spectrum \(E = \hbar^2k^2/2m\); open-nemo's grid reproduces it to 0.08 % at 0.5 eV with \(\Delta x = 0.1\) nm.
- Below a step the electron penetrates with \(|\psi|^2 \propto e^{-2\kappa x}\) (open-nemo's decay constants match \(\kappa\) to three digits) and is totally reflected. Above it, \(T = 4k_1k_2/(k_1+k_2)^2\): open-nemo matches the formula to \(2.1\times10^{-4}\) for steps of 0.1, 0.4 and 1.0 eV, including the reflection above the barrier.
- In a box, \(E_n = \hbar^2\pi^2n^2/2mL^2\) and \(\psi_n = \sqrt{2/L}\sin(n\pi x/L)\); open-nemo's 5 nm GaAs box gives 0.22360 eV for the ground state. The spacing falls from 0.67 eV (5 nm) to 6.7 meV (50 nm) to \(6.7\times10^{-17}\) eV (50 cm).
Exercises#
- Show from the matching conditions that \(R + T = 1\) above the step, and that the step transmits the same fraction whether the electron comes from the left or from the right.
- Replace the step by a barrier of finite width (0.4 eV, 1 nm) and compare open-nemo's transmission below 0.4 eV with the step's. Which feature of the evanescent wave makes the difference? (Lecture 6.2 treats this case.)
- Make the walls of the 5 nm box finite (0.3 eV, as for a GaAs/AlGaAs well) by adding barrier layers, and compare the levels with the infinite box. Which levels move most?
- Find the box length at which the GaAs level spacing \(E_2 - E_1\) equals \(k_BT\) at 300 K and at 77 K.
Further reading#
- Lecture 4.1: Classical systems
- Lecture 4.3: Why do we need quantum mechanics?
- Lecture 6.1: Transfer matrix method
- Lecture 6.2: Tunnelling through a single barrier
- Lecture 9: The particle in a box revisited
- Green's functions from scratch
- UTB subbands against thickness
- D. J. Griffiths, Introduction to Quantum Mechanics, Cambridge University Press: the step and the infinite well.



