Learning Objectives
Section 3.1 motivated why reciprocal space exists. This section makes it concrete. By the end you should be able to:
- State the defining condition of a reciprocal lattice vector and explain why it is forced by the requirement for every direct lattice vector .
- Write the duality condition and recognise it as the 3-D analogue of .
- Derive the explicit cross-product formulae for from — and know exactly where every comes from.
- Compute reciprocal vectors for simple cubic, FCC, BCC, and hexagonal lattices by hand, and recognise the famous fact that the reciprocal of FCC is BCC and vice versa.
- Read VASP's OUTCAR section that prints reciprocal lattice vectors and verify them against the POSCAR by hand.
- Avoid the most common conventions trap — the missing or extra factor of between physics and crystallography textbooks.
One-line preview: the reciprocal basis is the unique triple of vectors that turns the matrix of dot products into . The cross-product formula is just the closed-form solution to that linear-algebra problem.
From 1D to 3D — The Defining Condition
In 1D we discovered, by playing with the slider in the previous section, that the special wavevectors which leave a plane wave invariant under every lattice translation are
Equivalent statement: for every , because is an integer multiple of . In 3D the same idea is the definition of the reciprocal lattice. A vector is called a reciprocal lattice vector iff
That is the entire story compressed into one line. Let's unpack it. The condition means
Substituting :
Pick : the requirement is . Same for the other two unit vectors. Conversely, if all three of those products are integer multiples of , every linear combination is too. So the condition splits cleanly:
Translation: what just happened
The continuous condition "works for every lattice translation" collapses into three discrete conditions, one per primitive direction. That is the magic of having a basis: three integer constraints encode an infinity of translations. From here on it is linear algebra.
Three Wishes for the Reciprocal Basis
Following 1D's example, we look for three special basis vectors , such that every reciprocal lattice vector is an integer combination of them:
Plugging this expansion into for arbitrary integers works iff each cross-pairing is already an integer multiple of . The cleanest choice — the one that makes the bookkeeping trivial — is to demand
This is the duality condition. Read it carefully — it's nine equations packed into one. It says:
- Each is perpendicular to the two real-space basis vectors with different index. So and .
- Each has its magnitude fixed by .
- The three reciprocal vectors are independent: they form a basis of 3-space. (Otherwise the cross-pairings could not be a non-degenerate identity matrix.)
Read the boxed equation aloud once. "Reciprocal basis vectors are the triple perpendicular and inversely scaled to the real basis." That is reciprocal space in nine words.
Why δ_ij and not 1?
Some textbooks use (no ) — the crystallographer's convention. Solid-state physicists and almost every electronic-structure code (VASP included) use because then is automatically 1 for integer and integer . We'll use the convention throughout this book — but always check which convention a paper or program is using.
The Cross-Product Recipe
We have three conditions on each : it must be perpendicular to two given vectors, and have a specific dot product with the third. The cross product was invented for exactly this. By construction, is perpendicular to both and . So must be parallel to it:
Fix the constant using the third condition :
Here is the volume of the unit cell — the scalar triple product is exactly the parallelepiped volume from first-year vector calculus. Cyclic permutation gives the other two:
Three equations to memorise. They look symmetric on inspection — index appears nowhere on the right, while the cyclic pair shows up under the cross product. That is the same cyclic structure that appears in and friends — for an orthonormal real basis, the formula reduces to exactly that.
Sanity check the formula
Verify with :, , so and similarly for . Beautiful: a cubic real lattice with side begets a cubic reciprocal lattice with side , exactly what 1D told us.
Interactive — Real ↔ Reciprocal in 2D
In 2D the formula simplifies (no ; the triple product becomes the signed area ):
Translate that into geometry: each is the partner real vector rotated by 90° and scaled by . Slide the controls below — rotate and watch swing rigidly with it (because ); stretch and watch shrink. The duality table at the bottom should always read 1, 0, 0, 1.
Real lattice ↔ reciprocal lattice (2D)
drag the slidersLeft: the 2D real-space lattice with primitive vectors a₁ and a₂. Right: the corresponding reciprocal lattice with b₁ ⊥ a₂ and b₂ ⊥ a₁. Both lattices update live and the duality table at the bottom should always read 2π·δᵢⱼ.
| a₁ | a₂ | |
|---|---|---|
| b₁ | 1.000 | -0.000 |
| b₂ | 0.000 | 1.000 |
Three things to notice while you play:
- When the real cell is square (), and . The reciprocal cell is a (smaller) square aligned with the real one.
- When you skew the cell () the reciprocal cell skews too — but in the opposite direction, because rotation by 90° takes a clockwise tilt to a counterclockwise one.
- Compressing the real cell (small ) blows up the reciprocal cell (factor ). This is the inverse-relationship from the diffraction picture in Section 3.1, now made quantitative.
The Volume Formula and Its Magic
How big is the reciprocal unit cell? Compute its volume directly. After a short calculation (try it!) you find:
Reciprocal volume is inversely proportional to real volume — exactly what the word "reciprocal" promises. This single line carries surprising physical content:
- Density of states. The number of allowed -points per unit reciprocal volume in a finite crystal of unit cells is . As the crystal grows, k-states become dense and integrals replace sums.
- k-point sampling. Doubling each lattice vector (a 2×2×2 supercell, real volume up by 8) divides the reciprocal volume by 8 — so a coarser k-mesh suffices for the same Brillouin-zone resolution. This is the reason VASP's recommended KPOINTS density scales inversely with supercell size (Section 3.8).
- Diffraction spot density. A larger real cell → smaller reciprocal cell → more closely spaced Bragg spots. The diffraction fingerprint of every protein crystal lives on this fact.
Miller Indices, G-vectors, and d-spacing
We have built the reciprocal basis from the cross-product recipe and seen its volume . Now we close the most important loop in this whole chapter — the one that ties crystallographic notation (Miller indices, lattice planes, plane spacings) to the reciprocal-space language we will use everywhere from here on. The single sentence to remember:
Miller indices are the components of a reciprocal-lattice vector. The triple labels the vector , and that vector is perpendicular to the (hkℓ) family of lattice planes, with length .
Why G is normal to the (hkℓ) planes
Recall (Chapter 1) that the (hkℓ) plane is, by definition, the plane that intersects the three crystallographic axes at fractional distances , , and . Pick any two vectors lying in that plane; each one can be written as a difference of intercept points, e.g. . Now dot it with and use the duality :
The same is true for any other in-plane vector. So is orthogonal to every vector lying in the (hkℓ) plane — i.e. it is the plane's normal. That is the geometric content of the duality relation. No coordinates, no trigonometry — just the bra-ket pairing of real and reciprocal bases.
The d-spacing formula
Every lattice plane in the (hkℓ) family is parallel to every other — they share the same normal — and they sit at evenly spaced distances from one another. To pin that spacing, write the position of any lattice point as and project onto :
The integer labels the plane: m = 0 is the plane through the origin, m = 1 is the next one along, and so on. Their projections along differ by for adjacent planes — and that gap, by definition, is :
That is the single most-used formula in diffraction. It says: the denser the (hkℓ) planes are packed in real space, the longer the reciprocal vector that labels them. A close-packed family — small — sits far out in reciprocal space and only shows up at high diffraction angles. A loosely-packed family sits near the origin of reciprocal space and shows up at low angles.
What if (h, k, ℓ) share a common factor?
The triple describes the same family of planes as — but a different reciprocal vector. The (200) reflection in diffraction is the second-order reflection from the (100) plane stack, with half the spacing in real space and twice the |G| in reciprocal space. Bragg's "" orders are absorbed into the Miller indices. So when a structure factor table lists (200) as a separate row from (100), it is not a redundancy — it is the n = 2 harmonic.
See it for yourself — 2D interactive
Drag the and sliders below. The left panel draws the (h k) family of lattice lines in a square real-space lattice; the right panel draws the single reciprocal-lattice vector . Three relationships should be obvious:
- The violet G-arrow on the right is perpendicular to every cyan line on the left — that is the duality theorem at work.
- The amber arrow labelled measures the spacing of the (h k) lines, and the readout panel shows for every (h, k) you pick (in the widget's reduced units this equals 1).
- Larger Miller indices give a longer G and a smaller d — the planes crowd together as you index higher harmonics.
Miller indices, G-vectors, and d-spacing — drag the sliders
(h, k) = (2, 1)On the left, a square real-space lattice with the family of (h k) lattice lines (the 2-D analogue of crystal planes). On the right, the reciprocal lattice with one arrow G = h·b₁ + k·b₂ drawn from the origin. Three things should be visible at a glance: the violet arrow is perpendicular to every line on the left; the spacing of those lines is d = 2π/|G|; and the Miller indices are simply the (integer) components of G in the reciprocal basis.
- (1, 0) → vertical lines spaced by a
- (1, 1) → diagonal lines spaced by a/√2
- (2, 1) → tilted lines, smaller d
- Bigger Miller indices ⇒ longer G ⇒ smaller d (planes get closer together).
The translator's phrasebook
From now on, treat the four phrases "the (hkℓ) reflection", "the reciprocal vector G with components h, k, ℓ", "the family of lattice planes labelled (hkℓ)" and "the Bragg peak at d = 2π/|G|" as identical. That single mental equivalence makes Section 3.6 (structure factor), Section 3.7 (systematic absences), and Chapter 5 (band structure paths in reciprocal space) read as one continuous idea.
Worked Example 1 — Simple Cubic
Real basis: . Volume . Cross products:
Therefore:
The reciprocal lattice is also simple cubic, with side . For , the reciprocal cube has side . Reciprocal volume . ✓
Worked Example 2 — FCC and the BCC Surprise
Now something genuinely beautiful happens. The primitive basis of an FCC lattice with conventional cube side is
Volume: — exactly one-quarter of the conventional cube, as expected for FCC. Compute one cross product carefully:
So
By cyclic permutation:
Stop and look at those vectors. Each one points from a cube corner to the center of the cube of side , with opposite-corner sign pattern. Up to scale, they are the primitive vectors of a body-centered cubic lattice. The reciprocal of FCC is BCC.
Why this is not a coincidence
Apply the cross-product recipe to the BCC primitive basis on the right (cube side ) — you get back FCC primitive vectors with cube side . The map "take the reciprocal lattice" is an involution: do it twice, return to start (modulo a factor that the conventions handle for you). FCC and BCC are reciprocal twins — that is why every electronic-structure paper on noble metals (FCC) and group-V metals (BCC) looks at the same Brillouin-zone shape but with the labels swapped.
| Real lattice | Reciprocal lattice | Convention |
|---|---|---|
| Simple cubic, side a | Simple cubic, side 2π/a | |
| FCC, conventional side a | BCC, conventional side 4π/a | Self-dual under double application |
| BCC, conventional side a | FCC, conventional side 4π/a | Self-dual under double application |
| Hexagonal (a, c) | Hexagonal (4π/(a√3), 2π/c) | Rotated by 30° in basal plane |
Worked Example 3 — Hexagonal
The hexagonal primitive basis (commonly used for wurtzite CdSe, GaN, graphene sheets):
Volume (basal-plane rhombus area times height). After working through the cross products:
Two observations: (i) the reciprocal lattice is also hexagonal, (ii) and are rotated by 30° relative to and . This 30° twist is why the Brillouin zone of graphene and wurtzite has K and K' corners on perpendicular bisectors of the basal real-space lattice vectors — a fact you will use repeatedly when reading band structures.
A useful angle convention
In real-space hexagonal cells we usually take . In the reciprocal cell the corresponding angle becomes 60°. So the reciprocal hexagonal cell is rotated and reshaped — but it is still a 2-D hexagonal lattice.
Reciprocal Vectors in VASP — Reading the OUTCAR
VASP prints the reciprocal lattice vectors near the top of every OUTCAR file. For an FCC CdSe POSCAR with conventional side (primitive cell), the relevant block looks like:
1direct lattice vectors reciprocal lattice vectors
2 0.000000000 3.038500000 3.038500000 -0.164554 0.164554 0.164554
3 3.038500000 0.000000000 3.038500000 0.164554 -0.164554 0.164554
4 3.038500000 3.038500000 0.000000000 0.164554 0.164554 -0.164554
5
6 length of vectors
7 4.298 4.298 4.298 0.285 0.285 0.285A subtle units fact
VASP's OUTCAR prints reciprocal lattice vectors without the factor of 2π. They are in units of . So the VASP reciprocal vectors satisfy — the crystallographer convention. To recover the physics-textbook multiply VASP's row by . This is the most common units trap when comparing VASP output to a textbook formula.
Sanity check: the OUTCAR row times equals . Compare with our hand-derivation: for FCC with , . ✓ A perfect match.
One-line Python sanity check
1import numpy as np
2
3# Direct lattice rows (Å) from POSCAR / OUTCAR
4A = np.array([
5 [0.0, 3.0385, 3.0385],
6 [3.0385, 0.0, 3.0385],
7 [3.0385, 3.0385, 0.0],
8])
9
10# Reciprocal lattice (physicist's convention, includes 2π)
11B = 2 * np.pi * np.linalg.inv(A).T
12
13print("b_i · a_j / (2π) =")
14print(np.round(B @ A.T / (2 * np.pi), 6))
15# Should print the 3x3 identity matrix.The line is the matrix form of the cross-product formula — and the most efficient way to compute reciprocal vectors numerically. We will use this snippet many times in later chapters.
Common Pitfalls
| Pitfall | Symptom | Fix |
|---|---|---|
| Missing 2π | Your computed b_i is 2π× too small (or too big), and the duality table reads 1/(2π) instead of 1. | Choose a convention and stick with it. VASP OUTCAR uses the no-2π form; this book uses 2π. |
| Wrong volume sign | V = a₁·(a₂ × a₃) is negative, all b_i flip sign. | Make sure your real basis is right-handed: a₁ × a₂ should point along +a₃. |
| Confusing primitive and conventional cells | FCC reciprocal computed from the conventional cube has 4× too small magnitudes. | Always derive b_i from the primitive a_i. The conventional cell is for visualisation only. |
| Treating b_i as 'the column of A^{-1}' | Off by a transpose; the duality table reads δ_ji instead of δ_ij. | B is (A^{-1})ᵀ, with rows of B times 2π. Or equivalently, columns of (2π·A^{-1}). |
Summary
- A reciprocal lattice vector is defined by for every direct lattice vector. This single equation forces three integer constraints, one per primitive direction.
- The reciprocal basis is the unique triple satisfying the duality relation .
- Closed-form recipe: and cyclic permutations, with .
- Reciprocal volume: — the inverse-volume law that governs k-point density and diffraction-spot density.
- The map "take the reciprocal lattice" sends simple cubic to simple cubic, and FCC ↔ BCC. These dualities are why so many materials with very different real-space pictures share the same Brillouin-zone shape.
- Conventions matter: (physics, used in this book and in plane-wave calculations) vs. (crystallography, used in VASP's OUTCAR display). The physics is identical, but the printed numbers differ by .
- One line of NumPy — B = 2*np.pi*np.linalg.inv(A).T — encodes the entire chapter so far.
Coming next: Section 3.3 — The First Brillouin Zone — where we carve up reciprocal space into the unique region every physical wavevector can be reduced into, and discover that this region is the Wigner–Seitz cell of the reciprocal lattice you just built.