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 easier
to defend than a borrowed value.
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 FeO 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 (see
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 computed U for FeO.
- E11 · FeO with DFT+U: where the U gets used.