Peierls dimerisation of a 1D H-chain

A uniform 1D chain of hydrogen atoms, equally spaced, has a half-filled band that crosses the Fermi level at \(k = \pi / 2a\), a 1D metal. Peierls (1955) showed that any 1D metal is thermodynamically unstable against a periodic lattice distortion that doubles the unit cell: pairs of atoms move together, opening a gap at the folded-back band edge and lowering the total energy. This tutorial traces that instability directly by scanning the dimerisation amplitude and watching the total energy fall.

The scan

Start from a two-atom unit cell with atoms at \(0\) and \(a/2\) (uniform spacing) and shift the second atom by \(-\delta\) along the chain:

  • Uniform: \(\delta = 0\). Both H-H distances equal \(a/2\).

  • Dimerised: \(\delta > 0\). Short bond \(a/2 - \delta\); long bond \(a/2 + \delta\).

The complete scan is in examples/periodic/input-h-chain-peierls.py; the minimal excerpt:

The chain is a dim=3 cell with vacuum on the two transverse axes and a k mesh along the chain only. vibe-qc has no route with a consistent 1-D Coulomb gauge, so a PeriodicSystem(dim=1, ...) cannot be run with GDF (Sun, Qiming, Berkelbach, Timothy C., et al. (2017). *Gaussian and plane-wave mixed density fitting for periodic systems.* Journal of Chemical Physics, **147**(16), 164119. doi:[10.1063/1.4998644](https://doi.org/10.1063/1.4998644)); the vacuum box is the supported way to sample k along a wire, and the vacuum PAD is part of the model.

import numpy as np
from vibeqc import (
    Atom, BasisSet, PeriodicRHFOptions, PeriodicSystem,
    run_krhf_periodic_gdf,
)

A = 5.0                          # lattice parameter (bohr)
PAD = 15.0                       # transverse vacuum (bohr)
KMESH = (8, 1, 1)

def build_system(delta: float) -> PeriodicSystem:
    lattice = np.diag([A, PAD, PAD])
    unit_cell = [
        Atom(1, [0.0,              0.0, 0.0]),
        Atom(1, [A / 2.0 - delta,  0.0, 0.0]),
    ]
    return PeriodicSystem(dim=3, lattice=lattice, unit_cell=unit_cell)

opts = PeriodicRHFOptions()
opts.conv_tol_energy = 1e-8
opts.conv_tol_grad = 1e-3        # see caveat below
opts.max_iter = 80

for delta in (0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.1):
    sysp = build_system(delta)
    basis = BasisSet(sysp.unit_cell_molecule(), "pob-tzvp")
    r = run_krhf_periodic_gdf(sysp, basis, KMESH, opts, progress=False)
    short, long = A/2 - delta, A/2 + delta
    print(f"δ={delta:.2f}  R_short={short:.3f}  R_long={long:.3f}  "
          f"E={r.energy:.6f}  ({'yes' if r.converged else 'NO'})")

Output of the example (vibe-qc 0.17.14):

δ=0.00  R_short=2.500  R_long=2.500  E=-1.029634  (yes)
δ=0.20  R_short=2.300  R_long=2.700  E=-1.049378  (yes)
δ=0.40  R_short=2.100  R_long=2.900  E=-1.071390  (yes)
δ=0.60  R_short=1.900  R_long=3.100  E=-1.093370  (yes)
δ=0.80  R_short=1.700  R_long=3.300  E=-1.112883  (yes)
δ=1.00  R_short=1.500  R_long=3.500  E=-1.126474  (yes)
δ=1.10  R_short=1.400  R_long=3.600  E=-1.129363  (yes)

As soon as the short bond shortens below the uniform spacing, the energy drops monotonically. At \(\delta = 1.1\) (short bond \(= 1.4\) bohr, exactly the isolated H₂ equilibrium) the energy has fallen by 0.0997 Ha per unit cell from the uniform case. That’s ~2.7 eV, a large, unambiguous stabilisation.

Peierls dimerisation energy curve

The energy drops by 62.6 kcal/mol per unit cell going from the uniform chain to the H₂-equilibrium dimerisation. All thirteen points of the finer scan converge on the k-point GDF route; a point whose SCF did not converge would be drawn as a red ✕. The minimum sits at \(\delta = 1.1\) bohr, short bond = 1.4 bohr = the isolated H₂ equilibrium, exactly as chemical intuition demands; at \(\delta = 1.2\) the energy rises again.

The energy curve is regenerated by [examples/plots/h-chain-peierls-energy.py](https://github.com/vibe-qc/vibe-qc/blob/main/examples/plots/h-chain-peierls-energy.py).

The dynamics of the dimerisation are clearer as an animation, the chain itself contracting at every other bond while the energy per cell falls:

1D H-chain Peierls dimerisation animation: top panel shows the chain over 4 unit cells with atoms approaching their dimerised positions, bottom panel shows E(δ) being filled in step by step as δ sweeps from 0 to 1.1 bohr.

Regenerated by examples/plots/h-chain-peierls-animation.py. Two-panel layout: chain geometry on top (atoms moving toward their H₂-pair positions, bonds drawn solid for short / dashed for long), energy curve on the bottom (current δ marked, faint guide curve showing the rest of the path). The animation makes the mechanism of the instability immediate, it’s not just an abstract band crossing; it’s the lattice physically distorting to open the gap.

What the bands look like

Plot the bands at the two endpoints to see the gap-opening mechanism directly:

Peierls bands: uniform vs dimerised

Left: the uniform chain (\(\delta = 0\)). With two H per cell at equal spacing the BZ is folded relative to the natural one-atom cell, so the two bands meet at the X point, that touch is the Peierls instability point, the place where the half-filled metallic band crosses \(E_F\). Right: the dimerised chain at \(\delta = 1.1\). The bands have separated cleanly: a deep, almost-flat bonding band sits below \(E_F\) (the localised H₂ σ orbital of every short bond), and a high antibonding band sits ~13 eV above (the σ*). The 13.4 eV gap at X is the Peierls gap, and it’s because this gap opens that the occupied bonding band drops, accounting for the energy stabilisation in the curve above.

The bands figure uses non-interacting (Hcore) bands, which is why the δ = 0 panel doesn’t depend on a converged SCF, Hcore needs none. Regenerated by [examples/plots/h-chain-peierls-bands.py](https://github.com/vibe-qc/vibe-qc/blob/main/examples/plots/h-chain-peierls-bands.py).

Caveat on the uniform end

The tolerance conv_tol_grad = 1e-3 is deliberately looser than the default. At small \(\delta\) the chain is near-metallic and the HF gradient can settle slowly while the energy has already stabilised to \(10^{-8}\); for the Peierls physics that is enough, because the relative energy across the scan is what matters. On the k-point GDF route every point of the seven-point scan converges in six or seven iterations, \(\delta = 0\) included, so the loose tolerance is a safeguard here rather than a necessity.

Theory

The sections below set out why the instability happens: the half-filled tight-binding band that makes the uniform chain metallic, the gap-opening period-doubling distortion that lowers its energy, why vibe-qc’s SCF reproduces the effect, and how the same argument extends to real materials.

The half-filled band

For the uniform chain with one H per unit cell, a tight-binding model with one orbital per site gives a single cosine band \(\varepsilon(k) = \varepsilon_0 - 2t \cos(ka)\), where \(t\) is the nearest-neighbor hopping. With one electron per site (half-filled), the Fermi level sits at \(k_F = \pi / 2a\), inside the band. The system is metallic.

The instability

Any perturbation of the lattice that opens a gap at \(\pm k_F\) lowers the occupied-state energy. The simplest perturbation with the right wavevector is a period doubling: atoms at \(\{\, 0, a, 2a, \dots \,\}\) redistribute to \(\{\, 0, a/2 + \delta_1, a, a + a/2 + \delta_2, \dots \,\}\) with alternating displacements. For a single-orbital tight-binding model, perturbation theory says the gain in band energy scales as \(\delta^2 \ln \delta\), while the elastic cost of distortion scales as \(\delta^2\). The logarithm wins at small \(\delta\), so the uniform chain is always unstable, for any non-zero electron- phonon coupling. This is the content of Peierls’ theorem (R. E. Peierls, Quantum Theory of Solids, Oxford University Press, 1955; see References).

In chemical language: the uniform chain is a delocalised half-filled band of s-orbitals. Dimerisation localises the electrons into bonding pairs in the short bonds, with empty antibonding in the long bonds, a classical valence-bond picture of alternating H₂ units with van-der-Waals spacers between.

Why vibe-qc sees this

Two-atom unit cells at the same spacing are crystallographically distinguishable from one-atom cells only by the basis you build, but the physics depends on the number of electrons per cell. A one-H-per-cell calculation is metallic; a two-H-per-cell calculation at \(\delta = 0\) has a one-band folded structure that should be metallic but is built in a basis set that doesn’t notice the symmetry equivalence. The restricted SCF still converges there on the 8-point mesh. That does not make the uniform chain an insulator: its folded bands touch at the zone boundary, and a closed-shell determinant on a finite mesh cannot represent the partially filled band, so read the uniform end of the scan with that in mind. As \(\delta\) grows the folded bands split, a real gap opens, and the energy drops.

Generalisation

The Peierls argument generalises far beyond the H-chain:

  • Polyacetylene \((\text{CH})_n\), real 1D organic conductor, Peierls-distorted, bond alternation of about 0.08 Å (C=C about 1.36 Å, C-C about 1.44 Å) observed experimentally; the Su-Schrieffer-Heeger model (W. P. Su, J. R. Schrieffer and A. J. Heeger, Phys. Rev. Lett. 42, 1698 (1979), doi:10.1103/PhysRevLett.42.1698) is the tight-binding description of that distortion.

  • Transition-metal dichalcogenide monolayers, 2D variants (charge-density waves) with more intricate wavevectors.

  • 1D Jahn-Teller distortions in organic radicals.

Anywhere a regular lattice has a half-filled, partially-filled, or gapless band at a nesting vector \(\mathbf{Q}\), expect a distortion at wavevector \(\mathbf{Q}\) that opens a gap and lowers the energy.

Resources

About 12 minutes of wall time for the seven-point dimerisation scan at pob-TZVP / 8 k-points with 4 OpenMP threads, measured on a shared and heavily loaded laptop: each k-point GDF SCF takes 1.5 to 2 minutes. The cost grows with the transverse vacuum; for the RKS-PBE example of the same cell, one SCF took 26 s at 15 bohr against 64 s at 30 bohr, and the energy per cell moved by 3 µHa. If you push \(\delta \to 0\) further and the SCF struggles, level shifting helps.

References

  • Original theorem. R. E. Peierls, Quantum Theory of Solids, Oxford University Press (1955), chapter 5. The textbook formulation and proof.

  • Polyacetylene, original experiment. H. Shirakawa, E. J. Louis, A. G. MacDiarmid, C. K. Chiang, and A. J. Heeger, “Synthesis of electrically conducting organic polymers: halogen derivatives of polyacetylene, (CH)x,” J. Chem. Soc., Chem. Commun. 578 (1977), the experimental demonstration and one of the reasons they eventually won the 2000 Nobel Prize in Chemistry.

  • SSH model, Peierls on polyacetylene. W. P. Su, J. R. Schrieffer, and A. J. Heeger, “Solitons in polyacetylene,” Phys. Rev. Lett. 42, 1698 (1979).

  • Pseudopotential calculation on trigonal Te. J. D. Joannopoulos, M. Schlüter, and M. L. Cohen, “Electronic structure of trigonal and amorphous Se and Te,” Phys. Rev. B 11, 2186 (1975), empirical pseudopotential treatment of the crystalline phase, connecting the trigonal distortion to the observed band structure.

  • Textbook, condensed-matter. G. Grüner, Density Waves in Solids, Addison-Wesley (1994), comprehensive modern treatment of Peierls-class instabilities in real materials.

Next

  • Periodic geometry optimization could replace this manual scan. Periodic gradients and fixed-cell relaxation exist; see Periodic geometry optimization for which routes have analytic forces (Hartree-Fock relaxation falls back to finite-difference forces).

  • For the intermediate, partially-metallic regime, Hubbard-\(U\)-corrected DFT and fractional-occupation smearing are the standard extensions. Both exist in vibe-qc, on the routes listed on those pages; check there before combining them with the GDF route used here.