Benjamin Crowell · Simple Nature Ch. 12 · CC BY-SA 3.0
Quantum mechanics explains the atom. The Bohr model gets the energy levels right. Full quantum mechanics adds angular momentum quantum numbers, spin, and the exclusion principle. Together they build the periodic table from first principles.
The Bohr model
Bohr postulated that electrons orbit the nucleus in quantized orbits where the angular momentum is n * h_bar. This gives energy levels E_n = -13.6 eV / n^2 for hydrogen. The model is wrong in detail (electrons are not point particles on orbits) but gets the energy levels right, which is why spectral lines match.
Scheme
; Hydrogen energy levels: E_n = -13.6 eV / n^2; Photon energy for transition: E = E_upper - E_lower; Wavelength: lambda = h*c / E
(define h 6.626e-34)
(define c 3e8)
(define eV 1.6e-19)
(define (hydrogen-energy n)
(/ -13.6 (* n n)))
(define (transition-energy n-upper n-lower)
(- (hydrogen-energy n-upper) (hydrogen-energy n-lower)))
(define (transition-wavelength n-upper n-lower)
(let ((E-eV (transition-energy n-upper n-lower)))
(/ (* h c) (* (abs E-eV) eV))))
(display "Hydrogen energy levels:") (newline)
(define (show-E n)
(display " n=") (display n)
(display ": E = ") (display (hydrogen-energy n))
(display " eV") (newline))
(for-each show-E (list 12345))
(display "Transitions (emission):") (newline)
; Lyman series (to n=1)
(display " Lyman-alpha (2->1): ")
(display (* (transition-wavelength 21) 1e9))
(display " nm") (newline)
; Balmer series (to n=2) -- visible light!
(display " H-alpha (3->2): ")
(display (* (transition-wavelength 32) 1e9))
(display " nm (red)") (newline)
(display " H-beta (4->2): ")
(display (* (transition-wavelength 42) 1e9))
(display " nm (blue-green)")
Python
h = 6.626e-34
c = 3e8
eV = 1.6e-19def E_n(n):
return -13.6 / n**2def wavelength(n_upper, n_lower):
dE = abs(E_n(n_upper) - E_n(n_lower))
return h * c / (dE * eV)
for n inrange(1, 6):
print(f"n={n}: E = {E_n(n):.4f} eV")
print(f"Lyman-alpha: {wavelength(2,1)*1e9:.1f} nm")
print(f"H-alpha: {wavelength(3,2)*1e9:.1f} nm")
print(f"H-beta: {wavelength(4,2)*1e9:.1f} nm")
Quantum numbers
The full quantum description of an electron in an atom requires four quantum numbers. n (principal): energy level, 1, 2, 3, ... l (angular momentum): 0 to n-1. m_l (magnetic): -l to +l. m_s (spin): +1/2 or -1/2. The Pauli exclusion principle says no two electrons can share all four numbers.
Scheme
; Count states for each shell (principal quantum number n); l ranges from 0 to n-1; m_l ranges from -l to +l (2l+1 values); m_s = +1/2 or -1/2 (2 values); Total states in shell n = 2 * n^2
(define (states-in-subshell l)
(* 2 (+ (* 2 l) 1)))
(define (states-in-shell n)
(let loop ((l 0) (total 0))
(if (>= l n)
total
(loop (+ l 1) (+ total (states-in-subshell l))))))
(define subshell-names (list "s""p""d""f"))
(define (show-shell n)
(display "n=") (display n) (display ": ")
(let loop ((l 0))
(if (< l n)
(begin
(display (list-ref subshell-names l))
(display "(") (display (states-in-subshell l)) (display ") ")
(loop (+ l 1)))
(begin
(display "= ") (display (states-in-shell n))
(display " total") (newline)))))
(for-each show-shell (list 1234))
; This explains the periodic table:; Period 1: 2 elements (1s); Period 2: 8 elements (2s + 2p); Period 3: 8 elements (3s + 3p); Period 4: 18 elements (4s + 3d + 4p)
(display "Formula: 2n^2 states per shell")
The periodic table
Electrons fill orbitals from lowest energy up (Aufbau principle). Each orbital holds at most 2 electrons (Pauli exclusion). Electrons in the same subshell spread out before pairing (Hund's rule). These three rules, plus the quantum numbers, generate the entire periodic table. Chemistry is applied quantum mechanics.
The nucleus holds protons and neutrons together with the strong force. Unstable nuclei decay: alpha decay emits a helium-4 nucleus, beta decay converts a neutron to a proton (or vice versa), and gamma decay emits a photon. Radioactive decay is exponential: N(t) = N_0 * e^(-t/tau), where tau is the mean lifetime.
Scheme
; Radioactive decay: N(t) = N0 * exp(-t / tau); Half-life: t_1/2 = tau * ln(2); tau = mean lifetime
(define (decay N0 tau t)
(* N0 (exp (/ (- t) tau))))
(define (half-life tau)
(* tau (log 2)))
; Carbon-14: half-life = 5730 years
(define t-half-C14 5730)
(define tau-C14 (/ t-half-C14 (log 2)))
(display "Carbon-14:") (newline)
(display " Half-life: ") (display t-half-C14) (display " years") (newline)
(display " Mean lifetime: ") (display (inexact->exact (round tau-C14)))
(display " years") (newline)
; How much remains after various times?
(define N0 1000000)
(define (show-remaining years)
(let ((N (decay N0 tau-C14 years)))
(display " After ") (display years) (display " years: ")
(display (inexact->exact (round N)))
(display " remain (")
(display (inexact->exact (round (* 100 (/ N N0)))))
(display "%)") (newline)))
(for-each show-remaining (list 10005730114602000050000))
; This is how carbon dating works:; measure the ratio of C-14 to C-12, solve for t.
Python
importmathdef decay(N0, tau, t):
return N0 * math.exp(-t / tau)
t_half = 5730# years
tau = t_half / math.log(2)
N0 = 1_000_000print(f"C-14 half-life: {t_half} years")
print(f"Mean lifetime: {tau:.0f} years")
for years in [1000, 5730, 11460, 20000, 50000]:
N = decay(N0, tau, years)
print(f" After {years:>5} yr: {N:>10.0f} ({100*N/N0:.1f}%)")
The Bohr model is historically important but physically wrong: electrons do not orbit like planets. The Schrodinger equation gives probability clouds (orbitals), not orbits. However, the energy levels E_n = -13.6/n^2 eV are exact for hydrogen. Our electron configuration code follows the Aufbau filling order, which has exceptions for chromium (Z=24) and copper (Z=29) due to half-filled subshell stability. The radioactive decay law is exact for large numbers of atoms; individual decays are random.