How to run with Hubbard DFT+U¶
For correlated-electron systems (e.g. transition-metal oxides) you may need to
include Hubbard U corrections. IsolatedImpurityWorkChain automatically propagates
Hubbard parameters from the unit cell to every generated supercell when the input
structure is a HubbardStructureData from aiida-quantumespresso.
QE version requirement
The Hubbard card format used by HubbardStructureData requires Quantum ESPRESSO ≥ 7.1.
Step 1 — Create a HubbardStructureData¶
from aiida import load_profile, orm
from aiida_quantumespresso.data.hubbard_structure import HubbardStructureData
from aiida_quantumespresso.common.hubbard import Hubbard
load_profile()
# Load base structure
from pymatgen.io.cif import CifParser
py_struc = CifParser("NiO.cif").get_structures(primitive=True)[0]
base_structure = orm.StructureData(pymatgen=py_struc)
# Create Hubbard structure and set U values
hubbard_structure = HubbardStructureData.from_structure(base_structure)
hubbard_structure.initialize_onsites_hubbard('Ni', '3d', 5.0, 'U', use_kinds=True)
hubbard_structure.hubbard = Hubbard.from_list(
hubbard_structure.hubbard.to_list(), projectors="atomic"
)
hubbard_structure.store()
Step 2 — Use the Hubbard structure as input¶
Pass the HubbardStructureData directly as the structure input.
IsolatedImpurityWorkChain detects the type automatically and populates
Hubbard parameters in every supercell it creates.
from aiida_impuritysupercellconv.workflows.impuritysupercellconv import IsolatedImpurityWorkChain
builder = IsolatedImpurityWorkChain.get_builder_from_protocol(
pw_code=orm.load_code('pw-7.2@localhost'),
structure=hubbard_structure, # <-- HubbardStructureData
)
# QE parameters should include the hp.x / Hubbard card options if needed
# The Hubbard U values are embedded in the HubbardStructureData and
# passed automatically to every PwBaseWorkChain call.
How supercell Hubbard propagation works¶
The init_supcgen and re_init_supcgen calcfunctions detect whether the input
structure is a HubbardStructureData. If so, they:
- Extract the existing Hubbard parameters with
check_get_hubbard_u_parms. - Construct the supercell as a
HubbardStructureData(usingHubbardStructureData.from_structure). - Re-apply the same U values to the corresponding species in the supercell.
- Re-project with
projectors="atomic".
Both the muon-bearing and muon-free supercell structures receive the same treatment.