Bloch's Theorem and Crystal Wavefunctions
Bloch's theorem is the cornerstone of electronic structure theory in periodic solids. It converts an apparently intractable problem — finding quantum states in a potential with infinitely many ion cores — into a tractable eigenvalue problem on a single unit cell. Every piece of the KRONOS plane-wave formalism, from G-vector enumeration to k-point grids, is a direct consequence of this theorem.
Periodic potentials and translation symmetry
A crystal is defined by a Bravais lattice: a set of translation vectors with and primitive lattice vectors . The ionic potential seen by an electron satisfies
Because the Hamiltonian inherits this symmetry (in Rydberg units, where the kinetic prefactor is 1), the physics cannot depend on which unit cell we are in. This simple observation has profound consequences.
Define the lattice translation operator by its action on a wavefunction:
Periodicity of means : the Hamiltonian commutes with every lattice translation. Moreover, translations compose simply:
so the translation operators also commute with each other. We therefore have a complete set of simultaneous eigenstates of and all .
The eigenvalue of must be a pure phase: since applying times on a finite crystal with periodic boundary conditions returns to the original state, the eigenvalue satisfies , so . Writing for some vector , we arrive at the defining property of a Bloch state:
The vector is the crystal momentum, and labels distinct eigenstates (bands) at the same .
Statement of Bloch's theorem
Bloch's theorem: Every eigenstate of a Hamiltonian with lattice-periodic potential can be written in the form
where the cell-periodic part satisfies
The full wavefunction is a plane wave modulated by a lattice-periodic envelope . The band index distinguishes the countably infinite set of solutions at each crystal momentum .
Derivation from commuting translations
The derivation is a two-step application of standard linear algebra for commuting operators.
Step 1. Since , eigenstates of can be chosen to be simultaneous eigenstates of all . Call such a state , with .
Step 2. The eigenvalue must be consistent with the group structure of translations. Since , the eigenvalues must satisfy . The only continuous solutions to this functional equation that satisfy the periodic boundary condition are of the form .
Step 3. Define . Then:
So is lattice-periodic by construction, which proves the Bloch form. The substitution transforms the Kohn-Sham equation into a Hermitian eigenvalue problem for on the unit cell alone, making the problem finite.
The Brillouin zone
The crystal momentum is defined in reciprocal space. The reciprocal lattice is spanned by vectors satisfying :
A crucial observation: and label physically equivalent states. To see this, note that for any reciprocal lattice vector and any lattice vector , so both and produce the same translation eigenvalue . Consequently:
This redundancy means need only be sampled within one primitive cell of the reciprocal lattice. The standard choice is the first Brillouin zone (BZ): the Wigner-Seitz cell of the reciprocal lattice, i.e., the set of all points in reciprocal space closer to than to any other reciprocal lattice vector. Its volume is
where is the real-space unit cell volume. Every distinct crystal momentum is represented exactly once in the first BZ.
Plane-wave expansion
Since is lattice-periodic, it can be expanded exactly in a Fourier series over reciprocal lattice vectors:
Substituting back into the Bloch form gives the plane-wave expansion of the Bloch wavefunction:
The plane waves form a complete, orthonormal basis on the unit cell:
In this basis, the Kohn-Sham equation becomes a matrix eigenvalue problem. The kinetic energy is diagonal:
(in Rydberg units, where ). The local potential couples G-vectors through its Fourier components: .
Basis truncation. In practice, the sum over is truncated by an energy cutoff ecutwfc:
This retains the kinetically most important plane waves and systematically converges to the exact result as . A typical converged cutoff is 30–100 Ry depending on the pseudopotential. KRONOS stores the coefficients as complex128 (double-precision complex) vectors — no float32 short-cuts.
The density involves products of two wavefunctions, so its Fourier components extend to . KRONOS therefore requires ecutrho ecutwfc for norm-conserving pseudopotentials to represent the density without aliasing.
K-point sampling: Monkhorst-Pack and the IBZ
Physical observables involve integrals over the Brillouin zone. For example, the electron density is
where the factor of 2 accounts for spin degeneracy (spinless case). In practice this integral is replaced by a discrete sum:
with weights summing to 1. The Monkhorst-Pack scheme generates a uniform grid by choosing
where is the number of grid points along reciprocal axis and is an optional shift. An unshifted grid () always includes the point; a shifted grid () avoids it and can converge faster for metals.
Time-reversal symmetry. In a non-magnetic crystal with time-reversal symmetry, . This allows and to be folded together, roughly halving the number of k-points that must be computed explicitly.
Irreducible Brillouin zone (IBZ). The crystal's full space-group symmetry (rotations and screw/glide operations) further reduces the grid. Two k-points related by a symmetry operation of the point group satisfy , so only one representative from each symmetry-equivalent set — the irreducible Brillouin zone — needs to be computed. Each IBZ k-point carries a weight , where is the size of its star. For example, face-centered cubic Si with a Monkhorst-Pack grid has 64 k-points in the full BZ but only 10 in the IBZ — a 6 reduction.
How KRONOS implements this
K-point generation. KRONOS generates Monkhorst-Pack grids from the kpoints block in the YAML input:
kpoints:
grid: [4, 4, 4]
shift: [1, 1, 1] # 0 or 1 per axis
When spglib is linked, KRONOS calls it to detect the full space group of the crystal, obtain all symmetry operations, and fold the grid down to the IBZ. Without spglib, only time-reversal folding () is applied.
PlaneWaveBasis. Once the IBZ k-points are known, KRONOS builds a single shared G-vector basis. For each k-point , it finds all such that . The union of all per-k sets forms the shared basis stored in PlaneWaveBasis::gvectors(). This avoids allocating a separate basis per k-point and allows the Davidson solver to operate on a single block of memory.
When the Hamiltonian is applied at a specific k-point, G-vectors outside that k-point's active set are masked: their kinetic energy is set to a hard wall of Ry, driving the Davidson solver to assign them zero amplitude without requiring a dynamically sized array. This is a deliberate performance/correctness trade-off — a fixed-size layout with an energy mask is simpler and cache-friendlier than per-k variable-length slices.
KPoints class. The k-point list, IBZ weights, and per-k active G-vector masks are stored in the KPoints object (src/basis/kpoints.hpp). The SCF loop in src/solver/scf.cpp iterates over kpoints.ibz() — the list of irreducible k-points — applying and accumulating the density with the correct weights. After eigenvalues are collected across all k-points, the Fermi level is determined by bisection and occupations are assigned, closing the k-point loop for that SCF step.
Wavefunction storage. For each IBZ k-point, KRONOS stores the coefficient matrix as a contiguous block of complex_t (which aliases std::complex<double>). This layout is chosen for BLAS compatibility: the nonlocal pseudopotential application uses cuBLAS/rocBLAS GEMM on this matrix, with the beta projectors as the other factor.
References
- Martin, R. M. Electronic Structure: Basic Theory and Practical Methods, Cambridge University Press, Ch. 4 (2004)
- Ashcroft, N. W. & Mermin, N. D. Solid State Physics, Holt, Rinehart and Winston, Ch. 8 (1976)
- Monkhorst, H. J. & Pack, J. D. "Special points for Brillouin-zone integrations", Phys. Rev. B 13, 5188 (1976). DOI:10.1103/PhysRevB.13.5188
- Bloch, F. "Über die Quantenmechanik der Elektronen in Kristallgittern", Z. Phys. 52, 555 (1929)
- Payne, M. C. et al. "Iterative minimization techniques for ab initio total-energy calculations: molecular dynamics and conjugate gradients", Rev. Mod. Phys. 64, 1045 (1992). DOI:10.1103/RevModPhys.64.1045