DFT+U / Hubbard Corrections
For transition-metal compounds, DFT calculations are often improved by applying
on-site Hubbard U corrections (DFT+U / LDA+U). FindMuonWorkChain supports
two ways to apply them.
Automatic DFT+U (heuristics)
When hubbard=True (default) and the structure is passed as a plain
orm.StructureData together with a magmom list, the workflow tries to look up
reasonable U values for each 3d transition-metal species using a built-in
element heuristic provided by aiida_muon.utils.hubbard.check_get_hubbard_u_parms.
builder = FindMuonWorkChain.get_builder_from_protocol(
pw_code=pw_code,
structure=mno_structure, # MnO — Mn 3d gets U automatically
magmom=[[0, 0, 4.5], [0, 0, -4.5]],
hubbard=True, # default
)
Note
Automatic DFT+U is only activated when both magmom is supplied and the
structure contains species for which the heuristic has data. For non-magnetic
structures the hubbard flag has no effect.
Custom U values via hubbard_dict
Override or supplement the automatic values with a per-species dictionary:
builder = FindMuonWorkChain.get_builder_from_protocol(
pw_code=pw_code,
structure=mno_structure,
magmom=[[0, 0, 4.5], [0, 0, -4.5]],
hubbard=True,
hubbard_dict={'Mn': 5.0, 'O': 0.0}, # U in eV
)
Passing any value in hubbard_dict overrides the automatic lookup entirely
for the species listed.
Using HubbardStructureData
For the greatest control, construct a
aiida_quantumespresso.data.hubbard_structure.HubbardStructureData directly
and pass it as the input structure. The workflow will forward the embedded
Hubbard parameters to every supercell calculation unchanged:
from aiida_quantumespresso.data.hubbard_structure import HubbardStructureData
from aiida_quantumespresso.common.hubbard import Hubbard
hubbard_structure = HubbardStructureData.from_structure(mno_structure)
hubbard_structure.initialize_onsites_hubbard('Mn', '3d', 5.0, 'U', use_kinds=True)
hubbard_structure.hubbard = Hubbard.from_list(
hubbard_structure.hubbard.to_list(), projectors='atomic'
)
builder = FindMuonWorkChain.get_builder_from_protocol(
pw_code=pw_code,
structure=hubbard_structure, # Hubbard info is embedded in the structure
magmom=[[0, 0, 4.5], [0, 0, -4.5]],
)
When a HubbardStructureData is provided the hubbard flag controls only
whether the Hubbard information is propagated to the supercells (True) or
stripped away (False).
Disabling DFT+U
To force a plain DFT (GGA) calculation even for a structure that would trigger
the automatic heuristic, set hubbard=False:
builder = FindMuonWorkChain.get_builder_from_protocol(
pw_code=pw_code,
structure=mno_structure,
magmom=[[0, 0, 4.5], [0, 0, -4.5]],
hubbard=False, # no DFT+U, plain GGA
)
How Hubbard parameters are propagated to supercells
The workflow calls aiida_muon.utils.hubbard.create_hubbard_structure to
construct a HubbardStructureData for each supercell by mapping the unit-cell
Hubbard parameters onto the expanded, muon-containing structure. The muon
(represented as an H atom in the QE calculation) does not receive a U value.