HubbardStructureData for DFT+U in aiida-quantum-espresso

Dear Community,
I was wondering for doing a DFT+U calculation with pw.x 7.2 we need to use HubbardStructureData, according to the documentation we need to define

  • atom_index
  • atom_manifold
  • neighbour_index
  • neighbour_manifold
  • value
  • translation
  • hubbard_type

Since i WONT be using DFT+U+V, does it work by just using the kind or do i need to make a list including each atom of the same kind ?, and i guess if i will be using DFT+U i just use the same index for neighbor_index ?
Can someone share and example of using HubbardStructureData?

Dear Andres,

Indeed you would need to “duplicate” such information (for the manifold as well), and the translation will be (0,0,0).

If you are interested in only Hubbard U, a simple way could be:

structure = load_node(<PK>) # a StructureData node
hubbard_structure = HubbardStructureData.from_structure(structure)

# Say it contains Fe
hubbard_structure.initialize_onsites_hubbard(
        atom_name= 'Fe',
        atom_manifold= '3d',
        value= 5.0, # in eV
        hubbard_type= 'U',
        use_kinds= True, # kind sensitive
)

# Equivalently, but atom per atom based, more specific
hubbard_structure.append_hubbard_parameter(
        atom_index= 0, # assuming it is the first in hubbard_structure.sites
        atom_manifold= '3d',
        neighbour_index= 0,
        neighbour_manifold= '3d',
        value= 5.0, # in eV
        translation= (0,0,0), # you can also leave None and it will find the nearest atom
        hubbard_type= 'U',
)

The difference is that the first will automatically find for you the indices. For the U case it’s not really important you define all the onsite U. One site is already enough.

Then you can use this as the input structure for the pw.x related work chains.
It should work also with ph.x, but only for atomic projectors, which you can define:

hubbard = hubbard_structure.hubbard
hubbard.projectors = 'atomic'
hubbard_structure.hubbard = hubbard

This reminds me we should implement an API for this (e.g. hubbard_structure.set_projectors or something similar).

1 Like

Dear Lorenzo,

Thank you so much ! ,

If i may, I will another question (related).
In the past i was using the key “starting_ns_eigenvalue” to set the occupation , in pw.x 7.2 there is also a new keyword Hubbard_occ(ityp,i) , It seems this one is not in the Hubbard Class , i guess if there is also a way to declare like ’ ‘starting_ns_eigenvalue’: [
99 [1, 1, 3, 3.5],

Indeed it is not in the HubbardStructureData, but we may indeed add it in the future.
Currently, you can still define starting_ns_eigenvalue in parameters.SYSTEM

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.