Instead of copying a U value from the literature, you can compute the U
appropriate to your own system by linear response (DFPT). The tool is
hp.x (Timrov, Cococcioni, Marzari,
Comput. Phys. Commun. 2022, 279, 108455), and the result is far
easier to defend methodologically.
The principle in one line
Hubbard U is defined by how strongly the system pushes back when the
occupation of the localized manifold is perturbed. hp.x computes that
response matrix χ with density-functional perturbation theory and returns
the screened interaction
$$U = (\chi_0^{-1} - \chi^{-1})$$
with no empirical input.
Workflow
pw.x (scf with a tiny U, conv_thr 1e-12) → hp.x → prefix.Hubbard_parameters.dat
Step 1. Use the input of Example E11 with the U set to a negligible value. The HUBBARD card must be present so hp.x knows which atoms and manifolds to perturb.
HUBBARD (ortho-atomic)
U Fe1-3d 1.0d-8
U Fe2-3d 1.0d-8
Set conv_thr in &ELECTRONS to about 1.0d-12; linear response is
sensitive to the quality of the ground-state density.
Step 2. The hp.x input (&INPUTHP):
&INPUTHP
prefix = 'FeO'
outdir = './tmp/'
nq1 = 2, nq2 = 2, nq3 = 2
conv_thr_chi = 1.0d-6
iverbosity = 2
/
pw.x -in feo_hp_scf.in > feo_hp_scf.out
hp.x -in feo.hp.in > feo.hp.out
cat FeO.Hubbard_parameters.dat
The result file lists U per atom. The measured numbers are in Example E12.
conv_thr_chi is the convergence threshold for the response function χ. In
systems whose GGA ground state is metallic (FeO is one), the numerical
noise floor of χ sits around 10⁻⁷, so 1.0d-8 may never be reached; the
measured evidence is in Example E12.
Cautions
- Convergence testing over the
nqgrid is mandatory. A U from 1×1×1 cannot be trusted, and the k-grid of the underlying scf must be converged along with it. hp.xis expensive. The number of perturbations scales with the number of inequivalent Hubbard atoms, and each perturbation runs a linear-response cycle per q-point.-nkpool parallelism applies, and q-points can be split across jobs withstart_q/last_q.- Feeding the computed U back into the HUBBARD card and repeating scf → hp.x gives a self-consistent U; one or two rounds usually stabilize it.
- If you split labels (
Fe1/Fe2), hp.x recognizes symmetry-equivalent atoms and skips redundant perturbations.
Transplanting an hp.x U into a run with a different projector or
pseudopotential. U is meaningful only within the conditions it
was computed for (projector, pseudopotential, magnetic order). Also, a
loose conv_thr on the preceding scf injects noise into the
response matrix and swings U by whole eV: keep the 1.0d-12.
Related examples
- E12 · Computing U with hp.x: the measured U for FeO.
- E11 · FeO with DFT+U: where the U gets used.