ACBN0 Module#
The ACBN0 module takes care of automatically determining Hubbard U (on-site) and V (intersite) correction parameters for DFT+U calculations. Rather than guessing or fitting U by hand, it computes them self-consistently from the electronic structure.
Key references:
Agapito et al. (2015) — the ACBN0 formulas for U and J
Lee & Son (2020) — the eACBN0 extension to intersite V parameters
Architecture#
The module runs across two execution contexts to keep things clean:
Driver (rank-0 Python): Orchestrates the workflow, manages file I/O, and launches QE codes. Deliberately kept free of mpi4py dependencies.
Worker (independent MPI process): Handles the heavy lifting — Hartree energy computations via auto-generated stubs.
Driver and worker communicate exclusively through pickle files, so there’s no MPI entanglement in the orchestration layer.
Core Classes#
_HartreeKernel — The base MPI-aware class. Provides Coulomb integral computation via PAOFLOW.defs.pyints.contr_coulomb and scatter/allgather utilities for distributed calculations.
ACBN0_Hartree — Computes on-site U/J numerators using 8-fold symmetry reduction on ERI tensors.
eACBN0_Hartree — Extends the above to intersite V calculations with 4-fold symmetry optimization.
ACBN0 Driver — Manages the self-consistent U loop, coordinating the DFT → PAOFLOW → Hartree evaluation cycle.
eACBN0 — Subclass that adds pair enumeration, pair density-matrix construction, and joint U+V optimization.
How It Works#
Each self-consistent iteration goes through these steps:
QE SCF/NSCF calculation with the current
HUBBARDcardProjector augmented-wave projection via
projwfc.xPAOFLOW bandstructure computation — H(k) and S(k)
Density-matrix construction and Hartree energy evaluation
Convergence check, with optional mixing
Things Worth Knowing#
Keep U values as real floats. On-site U values must remain real Python float throughout the workflow — passing complex numbers will break the QE input parser. The intersite V path does permit complex values (they carry Bloch phases), but on-site U does not.
Performance optimizations (P1–P6):
P6 applies 8-fold symmetry to d-shell U evaluation, giving a 5.9× speedup
P5 caches eigendecompositions across V-pair loops
P2 vectorizes density-matrix operations
Validation: The module reproduces published benchmarks on Si and ZnO with ortho-atomic projection.
When to Use It (and When Not To)#
ACBN0 works well for FM insulators and half-metals. For itinerant FM metals, metallic screening tends to cause U overestimation. Near Stoner instabilities, fixed-U scanning is a more reliable approach than self-consistent determination.