Structure optimization drives the forces (energy gradients with respect to atomic positions) and the stress (gradients with respect to the cell) to zero. relax moves atoms only; vc-relax (variable-cell) moves the cell too.

Input skeleton

&CONTROL
  calculation   = 'vc-relax'
  etot_conv_thr = 1.0d-5      ! Ry, energy change between ionic steps
  forc_conv_thr = 1.0d-4      ! Ry/bohr, force criterion
  nstep         = 100         ! max ionic steps
/
&ELECTRONS
  conv_thr = 1.0d-10          ! tighter SCF for vc-relax
/
&IONS
  ion_dynamics  = 'bfgs'
/
&CELL
  cell_dynamics  = 'bfgs'
  press_conv_thr = 0.1        ! kbar
  cell_dofree    = 'ibrav'    ! keep the Bravais symmetry
/
  • This run consumes forces and stress, so tighten the SCF conv_thr beyond your usual value. Forces from a sloppy density are noise, and BFGS wanders on noise.
  • cell_dofree constrains the cell degrees of freedom: 'all', 'ibrav' (keep the Bravais lattice), '2Dxy' (slabs: freeze z), 'volume', 'shape', and others.
  • Per-atom constraints go through the if_pos flags on ATOMIC_POSITIONS (Chapter 03).

The mandatory follow-up: Pulay stress

When vc-relax finishes, the final structure appears between Begin final coordinates and End final coordinates. Run a fresh scf on that structure.

The plane-wave basis is tied to the cell. When the cell changes, the basis set changes with it (Pulay stress), so the energy and stress of the last vc-relax step were computed in the old basis and cannot be trusted. QE prints a warning saying exactly this. A measured check is in Example E6.

Symmetry and the optimization path

QE detects the symmetry of the initial structure and preserves it throughout the optimization. This cuts both ways.

  • An atom on a symmetric site feels exactly zero force along directions the symmetry forbids, so it never moves off them. To find lower-energy broken-symmetry structures, distort the starting geometry slightly or set nosym=.true..
  • Conversely, keeping symmetry saves a great deal of compute. Choose deliberately.

When BFGS struggles

Symptom Response
Energy oscillates without converging Tighten the SCF conv_thr; check upscale
Fails while the cell changes a lot Increase cell_factor (default 2.0)
Diverges from the first step Inspect the starting structure: overlapping atoms, absurd distances
Forces are small but stress will not drop Check press_conv_thr; suspect an insufficient cutoff (stress is more cutoff-sensitive than energy)
Common mistakes

Keeping the lattice constant from vc-relax and also quoting the last step's energy. The lattice constant is fine; the energy carries Pulay contamination. Always use the energy from the fresh scf on the final structure. Also, stress demands higher cutoffs than energies and forces, so pass a stress-based convergence test before any vc-relax.

  • E6 · Si vc-relax: start from a deliberately wrong lattice constant, find equilibrium, and measure the usual PBE overestimate.
  • E13 · Slabs and AIMD: a slab relaxation with the bottom layers pinned via if_pos.