Learning Objectives
Section 3.2 gave us the reciprocal lattice — an infinite set of vectors that "the crystal cannot tell from zero". But infinity is not a place we can compute in. Every plane wave with shifted by describes the same physical state in the crystal, so reciprocal space is wildly over-counted. The first Brillouin zone is the smallest, most symmetric region that gives every physical wavevector exactly once. By the end of this section you should be able to:
- State the BZ defining property in one line: every in reciprocal space differs from a unique in the BZ by a reciprocal-lattice vector .
- Construct the BZ geometrically using the Wigner–Seitz recipe — perpendicular bisectors of the shortest vectors enclose it.
- Identify the BZ shape for the three cubic Bravais lattices: a cube for SC, a rhombic dodecahedron for BCC (12 rhombic faces), and a truncated octahedron for FCC (8 hexagons + 6 squares).
- Locate and name the high-symmetry points on the FCC BZ — the same points you will read off every CdSe / GaAs / Si band-structure plot.
- Explain why a finite piece of crystal — e.g. a periodic supercell or a real CdSe quantum dot — corresponds to a discrete grid of inside the BZ, and how time-reversal symmetry plus crystal symmetry collapses that grid into the still smaller irreducible Brillouin zone.
- Construct the FCC BZ in six lines of NumPy + SciPy, verify it numerically, and recognise the same numbers in the printout from vasp_std.
One-line preview: the first Brillouin zone is the Wigner–Seitz cell of the reciprocal lattice. Every fact about band structures, k-point sampling, and selection rules in the rest of this book lives inside it.
Anatomy of a k-Point — What It Is, Why We Need It
Before we build a cage in reciprocal space, we have to look one of its inhabitants in the eye. Every later section — high-symmetry points, Bloch's theorem, k-grids, Monkhorst–Pack, the entire KPOINTS file in VASP — revolves around a single object: a k-point. So what is one?
The one-line answer
A k-point is just a vector in reciprocal space — a point you can put your finger on inside the Brillouin zone. Three real numbers (or two, in 2D), nothing more. But that single vector is doing the work of an infinite number of electrons, so it pays to understand it from three angles.
Pocket definition. A k-point is a wavevector that labels one Bloch state of the crystal. Pick a k, and you have selected one specific way the electron wavefunction can repeat itself from cell to cell.
Three ways to read a single k
The same vector wears three hats. Senior people switch between them mid-sentence, and you should too.
- k as a label. Bloch's theorem (Section 3.5) will say every electron state in a crystal carries a wavevector the way every passenger on a plane carries a seat number. Two electrons with the same band index but different are different states. So is the name tag of a quantum state.
- k as a wavelength + direction. The plane-wave envelope of that state is . Its wavelength is and it travels in the direction of . So is geometry — how many oscillations per unit length, and along which axis.
- k as cell-to-cell phase. Move from one unit cell to the next along a lattice vector ; the wavefunction picks up a pure phase . So is the phase advance per cell. k = 0 means every cell is in phase; k at the zone boundary means neighbouring cells are 180° out of phase.
The unifying picture
The cell-to-cell phase as a picture
Reading #3 deserves one image before we move on. Take a 1D crystal of spacing , watch the sign of at the centre of each repeated cell, and compare the two extremes you can reach inside the first BZ:
Phase advance per cell ; the Bloch phase . The envelope is flat, every atom carries the same sign — the wave is in lock-step with the lattice.
Phase advance per cell ; the Bloch phase . The wavelength is exactly two cells, so neighbouring atoms flip sign — “as wiggly as the lattice can host.”
Every other in the BZ sits between these two extremes, with an intermediate phase advance per cell — e.g. shifts each cell by 90° (Bloch phase ). So Γ does not mean “the centre of the crystal.” It means zero phase advance between repeated cells. And the zone boundary is not a barrier in real space — it is the wave pattern beyond which any further wiggling is just an alias of something already inside the BZ.
Why we need k-points at all
A crystal has on the order of atoms. The Schrödinger equation has, naively, that many coupled equations. Without translational symmetry, this is unsolvable. k-points are how the symmetry pays you back.
Translational symmetry says: if a wavefunction is an eigenstate of the Hamiltonian, it is also an eigenstate of the translation operator . The eigenvalues of are pure phases — one phase per cell for each . So the impossible -particle problem decomposes into one independent problem per , each living inside a single unit cell. Pick a k, solve a tiny problem; sweep k across the BZ, recover the whole solid.
Why we need to know it
What a k-point tells you about the solid
A k by itself is a label, not yet a physical answer. But once you ask the Hamiltonian about it, it returns four pieces of crystal physics:
| Quantity at | What it tells you | Where you see it |
|---|---|---|
| Band energies | Allowed electron energies for that wavevector. Many bands per , indexed by . | Band-structure plots; gaps; effective masses |
| Group velocity | How fast (and in which direction) an electron in that state propagates. | Conductivity, optical response, mobility |
| Bloch state | The actual wavefunction — its lobes, nodes, and orbital character on each atom. | Charge density, bonding analysis, COHP |
| Symmetry irrep at | Which symmetries fix this , which swap it. Decides which transitions are allowed. | Selection rules; degeneracy at |
The intuition in one sentence
Interactive — one k, one wave
Drag the purple dot inside the square Brillouin zone. The right panel shows the plane wave sampled on a square atomic lattice with lattice constant . Watch four things change at once:
- The wavelength shrinks as you push k away from Γ.
- The direction of the wavefronts rotates with the direction of k.
- The cell-to-cell phase tells you how much the wave twists per atom.
- At the zone boundary (X = (π, 0), M = (π, π)) neighbouring atoms flip sign — the wave is “as wiggly as the lattice will allow”.
Try this: click Γ, then ¼·X, then ½·X, then X. Watch the atoms march from “all red” (in phase) to “alternating red/blue” (anti-phase). That is the entire span of distinct phase patterns the lattice can carry along the x-axis — everything beyond X is just an alias of something already inside. That redundancy is exactly what the next subsection cures.
From 2D to 3D
Real crystals are three-dimensional, and so are their k-points. The square BZ above becomes a polyhedron — a cube for SC, a rhombic dodecahedron for BCC, a truncated octahedron for FCC. The meaning of a single k-point is unchanged: it is still a wavevector, still a phase-per-cell, still a label on a Bloch state. The geometry is the only thing that gets richer. We meet the FCC version in detail later in this section (“The FCC Brillouin Zone in Detail”); for now, just hold the picture: a k-point is a tiny purple dot you can drop anywhere inside the cage we are about to build.
Look-ahead — supercells, k-meshes, and your Mn-doped calculations
Three things readers usually mis-learn
- k is not momentum. It is crystal momentum. They behave similarly inside the BZ but differ by reciprocal-lattice vectors — we will spend the next subsection on exactly that.
- k is continuous, not a grid. The “grid of k-points” you set in a VASP calculation is a numerical sample of the continuous BZ, not the BZ itself.
- One k, many bands. A k-point does not pick a state by itself — it labels a family of states (one per band). Always specify both n and k.
Conceptual Deep Dives — Real Space, Reciprocal Space, k-Points
Before we tighten the formal “cage” argument in the next section, it is worth pausing to answer the questions every student asks the first time they see a Brillouin zone. These panels unpack each idea slowly — expand the ones you need, skip the ones already obvious. They are deliberately repetitive: each angle of attack reinforces the others.
Read this first. A real-space point tells where something is. A k-point tells how a wave changes phase from one repeated unit cell to the next. That single sentence dissolves about 80 % of the confusion below.
Carry these takeaways into the rest of the chapter. A k-point is a wave-pattern label, not a position. The Brillouin zone is the unique-pattern map. Real space tells you the atomic skeleton; reciprocal space tells you what waves can do on that skeleton. Everything VASP outputs — band structure, DOS, gap, forces, magnetic moment — is an integral or a slice of physics living inside this cage.
Interactive — k-Points as Wave-Pattern Labels
Time to drive the abstraction. The widget below ties together every panel in the FAQ above: a real-space chain of unit cells, an animated wave, a slider for , the Brillouin-zone axis, a Monkhorst–Pack-style mesh sampler, a conceptual plot, and a toggle between delocalised and localised states. Every panel responds to the same , so when you slide it, you watch the wavelength, cell-to-cell phase, BZ marker, mesh sample, band-structure dot, and (in localised mode) flat-band signature change simultaneously.
- Section 1 — the real-space crystal. Cell tints follow at the cell centre, so “phase per cell” becomes a colour you can see. Slide to widen or narrow the cells.
- Section 2 — the slider plus a phasor wheel showing . Click Γ, then π/(2a), then X, and watch the wheel rotate from through to .
- Section 3 — the reciprocal-space axis. The marker is not an atom — it is selecting a wave pattern.
- Section 4 — pick a mesh size . Each mesh point shows a thumbnail of the wave VASP would solve at that .
- Section 5 — conceptual with an optional stylised gap at the BZ boundary. Drag and watch the dot trace the band.
- Section 6 — toggle delocalised vs localised. The localised mode renders an Mn-like impurity wavepacket and flattens — the textbook flat-band signature.
Suggested 60-second tour. Start at Γ (Section 2 preset) and notice every cell tint matches — all cells in phase. Click π/(2a): each cell now shifts by 90°, and the phasor wheel points to . Click X: cells alternate red/blue, the phasor lands on , and the wave is “as wiggly as the lattice allows.” Now flip Section 6 to localised — the wave collapses around one atom and Section 5's band goes flat. That single tour is the entire idea.
Interactive — Same Idea in 3D (Real-Space Wave Pattern)
The 1D widget made one thing visceral: a k-point is a phase pattern threaded through repeated cells. Real crystals are 3D, so let's lift the same picture into three dimensions. Below is a 3×3×3 simple-cubic lattice (27 atoms). Each atom's colour and size are driven live by . Three translucent violet sheets are surfaces of constant phase — they drift along with phase velocity , separated by the wavelength .
- Γ preset — . Every atom turns the same colour at the same instant: zero spatial wave, just a global phase oscillation. Wavelength is infinite, so the planes vanish.
- X preset — . Atoms alternate sign along the -axis but stay synchronised in . The phase planes are perpendicular to and slide along it — this is the 3D version of a 1D zone-boundary wave.
- M preset — . Diagonal-stripe pattern in the-plane, synchronised along .
- R preset — . Full 3D checkerboard — every nearest neighbour has the opposite sign, in every direction. This is the corner of the cubic BZ — nothing wigglier exists.
- Anywhere in between. Drag any of the three sliders independently. Watch wavefronts tilt, atoms march out of sync, and grow as you shrink .
Connecting the two widgets
What this widget is not
- The wave shown is the plane-wave envelope , not a full Bloch state. A real Bloch state multiplies this by a periodic function that lives inside one cell. The cell-to-cell phase pattern, however, is exactly what the widget shows.
- here is a fictitious animation frequency for visual rhythm only — do not read off a dispersion from it. Real comes from the band structure, which is what VASP computes.
Interactive — Sampling the 3D Brillouin Zone (Monkhorst–Pack)
One k-point is a single wave pattern. A real DFT calculation needs many of them — because every observable (total energy, charge density, band structure, DOS) is an integral over the Brillouin zone, and a finite computer needs a finite sample. The widget below shows what that sample actually looks like for the simplest case: a cubic Brillouin zone (the BZ of a simple-cubic crystal), sampled by the standard Monkhorst–Pack recipe.
Click an button to set the mesh density . Each dot is one wave-pattern label ; dots that share a colour are symmetry-equivalent under the cubic point group — they describe the same physics and only need to be computed once. The translucent green wedge is the irreducible Brillouin zone (IBZ): the tetrahedron with corners that VASP actually does the work in.
- Raw count — the number of dots, equal to . This is what KPOINTS specifies.
- IBZ count — the number of unique colours, equal to the number of lines VASP writes to IBZKPT. This is what determines compute cost.
- Speed-up — the ratio. Approaches as the mesh grows, because most points have full stars (8 sign-flips × 6 axis-permutations). Coarse meshes have lower speed-ups because more points sit on symmetry planes (smaller stars).
Try this
The picture you should leave with
From cubic to FCC, BCC, hex, …
The Redundancy of k — Why We Need a Cage
Bloch's theorem (Section 3.5 will give it in full) tells us that every electron in a crystal has a wavefunction of the form
where is periodic with the lattice. Now ask the obvious question: what happens if we replace with ? Compute:
The factor in square brackets is itself periodic on the lattice, because is — that is exactly what defined in Section 3.2. So we can absorb it into a redefined and end with a wavefunction of exactly the same Bloch form, just with a different periodic part. Bottom line:
What this redundancy looks like in practice
You have a valid band-structure result at . Add — the eigenvalues are identical. Add — still identical. There are infinitely many representatives of every physical state, and we have to choose one. The BZ is the canonical choice.
The challenge: out of the infinitely many points equivalent to a given physical state, pick exactly one. Mathematicians call any region that does this a fundamental domain. Two natural candidates compete:
- The reciprocal primitive cell — a parallelepiped with vertices at integer combinations of . Easy to define, but skewed and ugly: it has none of the rotational symmetries of the lattice.
- The Wigner–Seitz cell of the reciprocal lattice — the set of points closer to the origin than to any other reciprocal lattice point. Geometric, lattice-symmetric, and is what every textbook and every code calls "the first Brillouin zone".
Both have the same volume (we proved this in Section 3.2). But the second one inherits every point-group symmetry of the crystal — cubic crystals get cubic-symmetric BZs, hexagonal crystals get hexagonal-symmetric BZs. That symmetry is a gift from the gods: it lets us shrink the integration region for any physical observable by the order of the point group, often a factor of 24 or 48.
What Is a Fundamental Domain?
A region is a fundamental domain of a lattice when:
- Coverage. Every point in space is equivalent to some point in under translation by : for every there is a with .
- No double-counting. Distinct interior points of are never equivalent. Boundary points may be — but together they have measure zero, so they don't affect any integral.
These two conditions force exactly. For the reciprocal lattice in 3-D, infinitely many regions qualify — a slanted parallelepiped, a slab, a starfish, a Voronoi cell, anything that tiles space by translation. The first Brillouin zone is the special one:
Read it slowly: belongs to the BZ if it is at least as close to the origin as it is to any other reciprocal-lattice point. Geometrically: everyone wants to live closer to home than to the neighbours.
The same construction in real space
We have already used this idea once! In Chapter 1 the Wigner–Seitz cell of a real-space lattice was the set of points closer to one chosen lattice site than to any neighbour. The first BZ is literally the same recipe applied to the reciprocal lattice. The only difference is the units: real-space WS lives in Å, BZ lives in Å⁻¹.
The Wigner–Seitz Recipe
Here is the entire construction in four sentences:
- Place the origin in reciprocal space.
- Draw straight lines from the origin to every reciprocal-lattice point.
- Bisect each line with a plane perpendicular to it (the "Bragg plane" — we will see why in Section 3.6).
- The smallest region around the origin enclosed by these planes is the first Brillouin zone.
Mathematically, every bisector plane is — the locus of points equidistant from and . The half-space on the origin's side is the set of points closer to than to . The intersection of all such half-spaces is a convex polyhedron centred at the origin — and that polyhedron is the BZ.
A pleasant observation
Only the shortest reciprocal-lattice vectors actually contribute faces. A planet far away from the origin has its bisector plane far away too, well outside the cell carved by closer neighbours. For FCC reciprocal (= BCC), the 12 closest neighbours and the next 6 are enough to enclose the BZ; further neighbours are redundant. This is why the BZ has a finite, small number of faces (8 + 6 = 14 for FCC) even though the lattice is infinite.
Build It in 2D — Step by Step
Before we step into 3D, let's see the construction unfold in 2D where we can see every line. The viewer below walks you through the four steps for square, rectangular, hexagonal, and oblique 2-D lattices. It applies to either real-space Wigner–Seitz cells (used in Chapter 1) or reciprocal-space Brillouin zones — the geometry is identical, only the units differ.
Wigner-Seitz Cell Construction
Step through the geometric recipe for constructing the WS cell
Three habits to take away from playing with the controls:
- Symmetry inheritance. The square lattice produces a square BZ; the hexagonal lattice produces a regular hexagon. The BZ has every rotation, reflection, and inversion that the lattice has, plus inversion through the origin (always — we'll see why under "time reversal" below).
- Only nearest neighbours matter. Toggle the steps and watch: the WS cell stops shrinking after the first ring of bisectors. Distant lattice points contribute redundant constraints.
- Skewing the lattice skews the BZ. An oblique 2-D lattice gives an irregular hexagon — yes, hexagon: a generic 2D lattice has 6 nearest neighbours of two distinct kinds, hence 6 BZ edges of two distinct lengths.
Step Up to 3D — SC, BCC, FCC
In 3D the BZ is a polyhedron, not a polygon. Three cases own everything you will encounter for cubic crystals (and CdSe in zinc-blende form is one of them):
| Real lattice | Reciprocal lattice | BZ shape | # faces | # vertices |
|---|---|---|---|---|
| Simple cubic (SC) | Simple cubic | Cube | 6 squares | 8 |
| Body-centred cubic (BCC) | FCC | Rhombic dodecahedron | 12 rhombi | 14 |
| Face-centred cubic (FCC) | BCC | Truncated octahedron | 8 hex + 6 squares | 24 |
The viewer below lets you step through the construction (lattice points → lines to neighbours → bisector planes → final cell) for each of the three lattices. Bear in mind: pick the lattice whose reciprocal shape you want — to see the FCC BZ, click BCC, because the FCC reciprocal is BCC and the WS cell of BCC is the truncated octahedron.
That last sentence is worth re-reading. The component shows the WS cell of the chosen direct lattice. Cross-applying the FCC↔BCC duality from Section 3.2:
- BZ of a real-space FCC crystal — like CdSe, Si, Cu, Au — is the WS cell of BCC: the truncated octahedron.
- BZ of a real-space BCC crystal — like Fe, Cr, Mo, Na — is the WS cell of FCC: the rhombic dodecahedron.
- BZ of a real-space SC crystal (rare in nature, common in textbook exercises): a cube of side , just like the reciprocal lattice itself.
Beginner trap
Almost every confusion about Brillouin zones reduces to forgetting which lattice you are taking the WS cell of. Mantra: BZ = WS of the reciprocal. If your crystal is FCC in real space, the BZ is built around the BCC reciprocal points.
The FCC Brillouin Zone in Detail
Of all the BZ shapes, the FCC truncated octahedron is the one you will see most. CdSe (zinc-blende), GaAs, Si, Ge, diamond, Cu, Al, all noble metals, all platinum-group metals, the entire fluorite family — every electronic-structure plot in those papers happens inside this exact polyhedron. Memorising its landmarks pays off forever.
With reciprocal-space coordinates in units of (where is the conventional cube edge), the high-symmetry points are:
| Symbol | Coordinates (2π/a) | Location on BZ | Multiplicity |
|---|---|---|---|
| Γ (Gamma) | (0, 0, 0) | Zone centre | 1 |
| X | (1, 0, 0) | Centre of square face | 6 |
| L | (½, ½, ½) | Centre of hexagonal face | 8 |
| W | (1, ½, 0) | Vertex (1 square + 2 hexes meet) | 24 |
| K | (¾, ¾, 0) | Midpoint of hex–hex edge | 12 |
| U | (1, ¼, ¼) | Midpoint of hex–square edge | 24 |
Spin the viewer below, click each label on the right, and watch the dot move:
The amber path drawn on the BZ — — is the standard band-structure path for FCC crystals (Setyawan&Curtarolo, Comp. Mat. Sci. 2010). Every time you see "the band gap of CdSe is direct at ", this is the path the bands were plotted along; is its first stop.
Why these specific points?
They are the points that map to themselves under the largest little groups of — the cubic point group of the FCC BZ. Bands must split, cross, or touch in symmetry-prescribed ways at exactly these points (this is what Chapter 2's character tables predict). So band structures are required by group theory to expose their interesting features at — and a path that touches them samples the entire physically meaningful spectrum.
Reading the geometry off the polyhedron
Three observations worth pinning down before we move on:
- The square faces are perpendicular to and centred at and permutations — the 6 next-nearest reciprocal-lattice neighbours, at distance .
- The hexagonal faces are perpendicular to directions and centred at the 8 L points — the 8 nearest reciprocal-lattice neighbours, at distance . The hexagons are regular: side length .
- Each W vertex sits at the meeting of one square face and two hexagonal faces. The 24 W's are equivalent under ; they are where bands typically show their saddle-point Van Hove singularities.
The BZ Shape Duality Table
Compiling the FCC↔BCC dualities from Section 3.2 with the WS construction we just did, every 3-D Bravais lattice has a known BZ shape:
| Real-space crystal | BZ shape | Famous example |
|---|---|---|
| Simple cubic (P) | Cube | Polonium |
| Body-centred cubic (I) | Rhombic dodecahedron | α-Fe, Cr, Mo, W, Na |
| Face-centred cubic (F) | Truncated octahedron | Cu, Al, Ag, Au, Ni; CdSe (zinc-blende) |
| Hexagonal (P) | Hexagonal prism | Mg, Zn, graphene; CdSe (wurtzite) |
| Tetragonal (P) | Square prism | β-Sn, rutile TiO₂ |
| Orthorhombic (P) | Rectangular box | α-S, ZrSiO₄ |
CdSe lives twice in this table
The bulk CdSe of our target lives in two crystal forms: the cubic zinc-blende (FCC, truncated-octahedron BZ) and the hexagonal wurtzite (hex prism BZ). Most VASP studies of CdSe quantum dots use zinc-blende for simplicity. We will too, in Chapter 6.
The Irreducible BZ — Symmetry's Last Cut
Even the BZ over-counts. Reason: every crystal has time-reversal symmetry (in non-magnetic systems) and a point group of rotations and reflections. Time reversal sends while leaving energies unchanged, so for every band . Combined with the crystal point group, the BZ collapses by a factor equal to the order of the group:
The result is a small wedge called the irreducible Brillouin zone (IBZ). For the FCC truncated octahedron the IBZ is the tetrahedron with corners . Computing any Brillouin-zone-averaged property — total energy, density of states, optical absorption — only requires sampling -points inside the IBZ; the rest is filled in by symmetry. In practice this is the difference between a 4-hour and a 4-minute calculation.
Where this lands in VASP
When VASP reads your KPOINTS file it generates a regular k-mesh inside the BZ, then folds it down to the IBZ using the symmetries it detected from POSCAR. The compressed list, with multiplicity weights, lives in the file IBZKPT. A 12×12×12 mesh on the FCC BZ (1728 raw points) often becomes only ~72 IBZ points — a 24× speed-up. The factor varies; check IBZKPT for your structure.
Brillouin Zone in VASP — KPOINTS, IBZKPT, and KPOINTS_OPT
Open any VASP input directory and you will find a KPOINTS file. It tells VASP how to discretise the BZ:
1Automatic mesh
20
3Monkhorst-Pack
412 12 12
50 0 0Five lines. Line 1 is a comment. Line 2 ("0") means "generate the mesh automatically". Line 3 sets the scheme; Monkhorst–Pack is the textbook even-grid sampler we'll meet in Section 3.9. Line 4 is the mesh density along the three reciprocal lattice directions. Line 5 is an optional shift (kept at zero for now).
After running VASP you will find a companion file IBZKPT with a header like:
1Automatically generated mesh
2 72
3Reciprocal lattice
4 0.00000000 0.00000000 0.00000000 1
5 0.08333333 0.00000000 0.00000000 8
6 0.16666667 0.00000000 0.00000000 8
7 0.25000000 0.00000000 0.00000000 8
8 ...Three things to read off:
- Number 72. Out of 12×12×12 = 1728 raw mesh points, only 72 are unique up to + time reversal. That ratio 1728/72 = 24 is the order of the cubic group, exactly as expected.
- The k-vectors. They are listed in fractional reciprocal coordinates — i.e., as multiples of , not in Å⁻¹. Multiply by to convert.
- The integer weights. Each IBZ point stands for a number of equivalent BZ points (its "star") — that's the integer in the last column. They sum to 1728. When VASP averages anything over the BZ, it uses these weights.
For band-structure calculations you turn off the automatic mesh and instead provide a line-mode KPOINTS that walks along the high-symmetry path we plotted on the truncated octahedron above:
1k-points along high symmetry lines
230
3Line-mode
4Reciprocal
5 0.0 0.0 0.0 ! Γ
6 0.5 0.0 0.5 ! X
7
8 0.5 0.0 0.5 ! X
9 0.5 0.25 0.75 ! W
10
11 0.5 0.25 0.75 ! W
12 0.5 0.5 0.5 ! L
13
14 0.5 0.5 0.5 ! L
15 0.0 0.0 0.0 ! Γ
16
17 0.0 0.0 0.0 ! Γ
18 0.375 0.375 0.75 ! KVASP will sample 30 points along each segment, evaluate the bands at every k, and concatenate them into the EIGENVAL file. That data, plotted with energy on the y-axis and k on the x-axis along the path, is your band-structure plot. Every band-structure figure in this book — and in the literature — is produced from exactly this kind of file.
Coordinates: fractional vs. Cartesian
The block above starts with Reciprocal, so the numbers are in fractional coordinates. The same path written with Cartesian would multiply each row by , giving Å⁻¹. Mixing them up is the most common KPOINTS mistake new users make, especially because VASP refuses to warn you — you simply get a path through the wrong region of k-space and a nonsensical band structure.
Constructing the BZ in Python — Voronoi in 6 Lines
Theory and pictures done — now build the FCC BZ from scratch, numerically. The program below uses SciPy's Voronoi class to perform the Wigner–Seitz construction on the reciprocal lattice and prints two cross-checks: the W-vertex count (must be 24) and the reciprocal-cell volume (must equal ). Click any line on the right to see what every variable holds at that moment of execution.
Output of the script (verified on Python 3.12 + SciPy 1.13):
1BZ vertex count = 24
2V* = 4.4214 Å⁻³
3|b₁| = 1.7908 Å⁻¹Three numbers, all dictated by the geometry of FCC and the value . Change to the GaAs value and the script prints the GaAs BZ — same shape, different size. Change the FCC template to BCC primitive and you get the rhombic dodecahedron with 14 vertices. The Wigner–Seitz construction is unreasonably general.
Where this script will reappear
The 6-line core (build A, build B, generate G grid, Voronoi, slice, verify) is the same skeleton any structure-aware code uses to tabulate Brillouin-zone geometry — including the open-source toolkit seekpath that VASP wrappers like ASE call to auto-generate high-symmetry paths. By the time you run your first band-structure calculation in Chapter 6, you will not be guessing what those libraries are doing under the hood.
Common Pitfalls
| Pitfall | Symptom | Fix |
|---|---|---|
| Taking the WS cell of the wrong lattice | Your FCC band structure shows a cubic BZ. | BZ = WS of the RECIPROCAL lattice, not the real one. FCC real → BCC recip → truncated octahedron. |
| Confusing fractional and Cartesian k | Bands look fine but the high-symmetry labels are at the wrong x-positions. | Check the line just above the KPOINTS coordinates: 'Reciprocal' = fractional in (b₁, b₂, b₃); 'Cartesian' = Å⁻¹. |
| Sampling the full BZ instead of the IBZ | Calculations are 24× slower than they need to be on cubic systems. | Trust VASP's symmetry detection. ISYM = 2 (default) folds the mesh down to the IBZ. Set ISYM = 0 only if you have a deliberate reason (e.g. broken symmetry from a defect). |
| Wrong path order on FCC band plots | The plot labels read in an order that contradicts every textbook. | Use the Setyawan–Curtarolo path Γ-X-W-L-Γ-K (or W-L-Γ-X-W-K). Anything else creates needless confusion for a reader. |
| Including too few neighbours when constructing BZ numerically | scipy.spatial.Voronoi reports an unbounded region (-1 in vor.regions[origin]). | Generate at least ±2 in each direction (5×5×5 = 125 points). For low-symmetry monoclinic / triclinic, go to ±3. |
| Using the conventional cube edge as 'a' in reciprocal formulae | Reciprocal vectors look 4× too small for FCC. | Always derive b_i from the PRIMITIVE cell. 'a' inside the formula 2π/a refers to the primitive cell magnitude, NOT the conventional cube edge. |
Summary
- The first Brillouin zone is the Wigner–Seitz cell of the reciprocal lattice: the set of points in k-space closer to the origin than to any other reciprocal-lattice point.
- Its purpose is to remove the redundancy built into Bloch's theorem. Every physical wavevector has exactly one representative in the BZ.
- For cubic systems: SC → cube; BCC → rhombic dodecahedron (12 faces, 14 vertices); FCC → truncated octahedron (14 faces, 24 vertices).
- The FCC BZ has six high-symmetry points at integer-half permutations of and similar — every CdSe / GaAs / Si band-structure plot is drawn through exactly these.
- Time-reversal plus the cubic point group shrink the BZ to a 1/48 wedge, the irreducible BZ. VASP's IBZKPT file is exactly this set of weighted k-points.
- Six lines of NumPy + scipy.spatial.Voronoi construct any BZ from the primitive lattice, with two trivially-checked invariants: vertex count (24 for FCC) and reciprocal volume .
- The KPOINTS file you write tomorrow will, internally, be a discretisation of this exact polyhedron. Everything in the rest of the book — band structures, density of states, optical absorption, structure factors — is an integral over it.
Coming next: Section 3.4 — High-Symmetry Points and Paths — where we name every for the BZ shapes we just met, and turn them into the band-structure paths you will plot in Chapter 5.