Input file documentation

TODO: some front matter describing YAML format and explaining how to read below.

lattice:                       # Lattice vectors / unit cell definition:
  system: null                 # Specify crystal system and geometry parameters.
  modification: null           # Specify modification of lattice.
  a: null                      # First lattice vector length in bohrs.
  b: null                      # Second lattice vector length in bohrs.
  c: null                      # Third lattice vector length in bohrs.
  alpha: null                  # Angle between b and c in degrees.
  beta: null                   # Angle between c and a in degrees.
  gamma: null                  # Angle between a and b in degrees.
  vector1: null                # First lattice vector (x1, y1, z1) in bohrs.
  vector2: null                # Second lattice vector (x2, y2, z2) in bohrs.
  vector3: null                # Third lattice vector (x3, y3, z3) in bohrs.
  scale: null                  # Scale factor for lattice vectors.
  compute-stress: null         # Whether to compute and report stress.
  movable: null                # Whether to move lattice during geometry relaxation / dynamics.
  move-scale: null             # Scale factor for moving each lattice vector.
  periodic: null               # Whether each lattice direction is periodic.
  center: null                 # Center of cell for periodicity break along non-periodic directions.
                              
ions:                          # Ionic positions and pseudopotentials:
  fractional: yes              # Whether to use fractional coordinates for input/output.
  coordinates: null            # List of [symbol, x, y, z, args] for each ion in unit cell.
  pseudopotentials: null       # Pseudopotential filenames or filename templates.
                              
symmetries:                    # Point and space group symmetries:
  tolerance: 1e-06             # Threshold for detecting symmetries.
  override: null               # Override with identity-only or manual list of operations.
                              
electrons:                     # Electronic sub-system:
  k-mesh:                      # Uniform k-point mesh for Brillouin-zone integration:
    offset: (0.0, 0.0, 0.0)    # Offset of k-point mesh in k-mesh coordinates.
    size: (1, 1, 1)            # Number of k per dimension, or minimum supercell size.
    use-inversion: yes         # Whether to use inversion in k-space to reduce k-points.
                              
  k-path:                      # Path of k-points through Brillouin zone:
    dk: [float]                # Maximum distance between adjacent points on k-path.
    points: [list]             # List of special k-points [kx, ky, kz, label] along path.
                              
  spin-polarized: no           # Whether system has spin polarization / magnetization.
  spinorial: no                # Whether to perform relativistic / spin-orbit calculations.
  fillings:                    # Electron occupations and charge / magnetization control:
    charge: 0.0                # Net charge of electrons + ions in e units.
    smearing: gauss            # Smearing method for setting electron occupations.
    sigma: 0.002               # Width of the smearing function in Hartrees.
    kT: null                   # Specify temperature instead of sigma for Fermi smearing.
    mu: nan                    # Electron chemical potential in Hartrees.
    mu-constrain: no           # Whether to hold chemical potential fixed to mu.
    B: 0.0                     # External magnetic field (only for spin-polarized modes).
    M: 0.0                     # Total magnetization (only for spin-polarized modes).
    M-constrain: no            # Whether to hold magnetization fixed to M.
    n-bands: null              # Specify number of bands or scheme to determine it.
    n-bands-extra: null        # Number of extra bands retained by diagonalizers.
                              
  basis:                       # Wavefunction basis set (plane waves):
    ke-cutoff: 20.0            # Wavefunction kinetic energy cutoff in Hartrees.
    real-wavefunctions: no     # Whether to use real wavefunctions (instead of complex).
    grid:                      # Override parameters of grid for wavefunction operations:
      ke-cutoff: null          # Kinetic-energy cutoff for grid in Hartrees.
      shape: null              # Explicit grid dimensions [Nx, Ny, Nz].
                              
    fft-block-size: 0          # Number of wavefunction bands to FFT simultaneously.
    mpi-block-size: 0          # Number of wavefunction bands to MPI transfer simultaneously.
                              
  xc:                          # Exchange-correlation functional:
    functional: gga-pbe        # Name or list of names of exchange-correlation functionals.
    plus-U:                    # Optional DFT+U correction:
                              
  fixed-H:                     # Fix Hamiltonian from checkpoint file of this name.
  save-wavefunction: yes       # Whether to save wavefunction in checkpoint.
  lcao:                        # Linear combination of atomic orbitals parameters:
    energy-threshold: 1e-06    # Energy convergence threshold in Hartrees.
    gradient-threshold: 1e-08  # Subspace-gradient convergence threshold (dimensionless).
                              
  davidson:                    # Davidson diagonalization of Kohm-Sham Hamiltonian:
    n-iterations: 100          # Number of diagonalization iterations.
    eig-threshold: 1e-08       # Convergence threshold on eigenvalues in Hartrees.
                              
  chefsi:                      # CheFSI diagonalization of Kohm-Sham Hamiltonian:
    n-iterations: 100          # Number of diagonalization iterations.
    eig-threshold: 1e-08       # Convergence threshold on eigenvalues in Hartrees.
    filter-order: 10           # Order of the Chebyshev filter.
    init-threshold: 0.1        # Eigenvalue threshold for initial Davidson steps.
                              
  scf:                         # Self-consistent field (SCF) iteration parameters:
    n-iterations: 50           # Number of self-consistent field iterations / cycles.
    energy-threshold: 1e-08    # Energy convergence threshold in Hartrees.
    residual-threshold: 1e-07  # Residual-norm convergence threshold.
    n-consecutive: 2           # Number of consecutive iterations each threshold must be satisfied.
    n-history: 10              # History size for Pulay mixing.
    mix-fraction: 0.5          # Fraction of new variable mixed into current variable.
    mix-fraction-mag: 1.5      # Different mix_fraction for magnetization components.
    q-kerker: 0.8              # Characteristic wavevector for Kerker mixing.
    q-metric: 0.8              # Characteristic wavevector controlling Pulay metric.
    q-kappa: null              # Long-range cutoff wavevector for grand-canonical SCF.
    n-eig-steps: 2             # Number of inner eigenvalue iterations for each SCF cycle.
    eig-threshold: 1e-08       # Convergence threshold on eigenvalues in Hartrees.
    mix-density: yes           # Whether to mix density or potential.
                              
grid:                          # Charge-density grid:
  ke-cutoff: null              # Kinetic-energy cutoff for grid in Hartrees.
  shape: null                  # Explicit grid dimensions [Nx, Ny, Nz].
                              
geometry:                      # Geometry actions such as relaxation and dynamics:
  fixed:                       # Electronic optimization only at a fixed geometry:
                              
  relax:                       # Geometry relaxation of ions, and optionally, also the lattice:
    n-iterations: 20           # Maximum number of iterations.
    energy-threshold: 5e-05    # Convergence threshold on energy change in Eh.
    fmax-threshold: 0.0005     # Convergence threshold on maximum force in Eh/a0.
    stress-threshold: 1e-05    # Convergence threshold on |stress| (stress tensor norm) in Eh/a0^3.
    n-consecutive: 1           # Number of consecutive iterations each threshold must be satisfied.
    method: l-bfgs             # Relaxation algorithm: L-BFGS, CG or Gradient.
    cg-type: polak-ribiere     # CG variant: Polak-Ribiere, Fletcher-Reeves or Hestenes-Stiefel.
    line-minimize: auto        # Line minimization scheme: Auto, Constant, Quadratic, Wolfe.
    n-history: 15              # Maximum history size (only used for L-BFGS).
    converge-on: all           # Converge on 'any', 'all' or a specific number of thresholds.
    drag-wavefunctions: yes    # Whether to drag atomic components of wavefunctions.
    save-history: yes          # Whether to save history along the trajectory.
                              
  dynamics:                    # Molecular dynamics of ions, and optionally, also the lattice:
    dt: [float]                # Time step.
    n-steps: [int]             # Number of MD steps.
    thermostat:                # Thermostat/barostat method:
      nve:                     # No thermostat (or barostat), i.e. NVE ensemble:
                              
      nose-hoover:             # Nose-Hoover thermostat and/or barostat:
        chain-length-T: 3      # Nose-Hoover chain length for thermostat.
        chain-length-P: 3      # Nose-Hoover chain length for barostat.
                              
      berendsen:               # Berendsen velocity-rescaling thermostat and/or barostat:
        B0: 2.200 GPa          # Characteristic bulk modulus for Berendsen barostat.
                              
      langevin:                # Langevin stochastic thermostat and/or barostat:
                              
    seed: 1234                 # Random seed for initial velocities.
    T0: 298.000 K              # Initial temperature / temperature set point.
    P0: 1.000 bar              # Pressure set point for NPT, if lattice.movable is True.
    stress0: null              # Stress set point for N-stress-T, if lattice.movable is True.
    t-damp-T: 50.000 fs        # Thermostat damping time.
    t-damp-P: 100.000 fs       # Barostat damping time.
    drag-wavefunctions: yes    # Whether to drag atomic components of wavefunctions.
    save-history: yes          # Whether to save history along the trajectory.
                              
export:                        # Export data for other codes:
  bgw:                         # BerkeleyGW export:
    filename: [string]         # Filename for BerkeleyGW output.
                              
checkpoint: null               # Checkpoint file to read at start-up.
checkpoint-out: null           # Checkpoint file to write.

Component classes: