Author Topic: set different Hubbard U for same element in a model  (Read 4476 times)

0 Members and 1 Guest are viewing this topic.

Offline Yue-Wen Fang

  • Heavy QuantumATK user
  • ***
  • Posts: 29
  • Country: cn
  • Reputation: 0
    • View Profile
set different Hubbard U for same element in a model
« on: September 17, 2015, 15:25 »
Dear staff, I followed this tutorial (http://quantumwise.com/documents/tutorials/latest/InAs-2D/index.html/chap.slab.html) and tried to apply different Hubbard U parameters for same kind of aotms which hold different positions. Here, let me take CoO as an example. The model in the input file shown below contains two cobalt ions and two oxygen anions.
Code
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------

# Set up lattice
lattice = Rhombohedral(5.06138065551*Angstrom, 33.5573097619*Degrees)

# Define elements
elements = [Cobalt, Cobalt, Oxygen, Oxygen]

# Define coordinates
fractional_coordinates = [[ 0.002,  0.002, -0.006],
                          [ 0.502,  0.502,  0.494],
                          [ 0.25 ,  0.25 ,  0.25 ],
                          [ 0.75 ,  0.75 ,  0.75 ]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
bulk_configuration.addTags('cobalt1', [1])

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# Basis Set
#----------------------------------------


cobalt_3d = ConfinedOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=4.07498342334*Bohr,
    confinement_start_radius=3.25998673867*Bohr,
    additional_charge=0,
    confinement_strength=24.5399771266*Hartree,
    confinement_power=1,
    radial_step_size=0.001*Bohr,
    )

cobalt_3d_split = AnalyticalSplit(cobalt_3d, split_norm=0.15)

cobalt_4s = ConfinedOrbital(
    principal_quantum_number=4,
    angular_momentum=0,
    radial_cutoff_radius=6.93481368132*Bohr,
    confinement_start_radius=5.54785094506*Bohr,
    additional_charge=0,
    confinement_strength=14.4199980844*Hartree,
    confinement_power=1,
    radial_step_size=0.001*Bohr,
    )

cobalt_4s_polarization = PolarizationOrbital(cobalt_4s)

cobalt_4s_split = AnalyticalSplit(cobalt_4s, split_norm=0.15)

CobaltBasis = BasisSet(
    element=PeriodicTable.Cobalt,
    orbitals=[ cobalt_3d , cobalt_4s , cobalt_3d_split , cobalt_4s_split , cobalt_4s_polarization ],
    occupations=[ 7.0 , 2.0 , 0.0 , 0.0 , 0.0],
    hubbard_u=[ 4.1 , 0.0 , 4.1 , 0.0 , 0.0]*eV,
    filling_method=SphericalSymmetric,
    pseudopotential=NormConservingPseudoPotential("normconserving/CO.GGAPBE.zip"),
    )



cobalt_tag1_3d = ConfinedOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=4.07498342334*Bohr,
    confinement_start_radius=3.25998673867*Bohr,
    additional_charge=0,
    confinement_strength=24.5399771266*Hartree,
    confinement_power=1,
    radial_step_size=0.001*Bohr,
    )

cobalt_tag1_3d_split = AnalyticalSplit(cobalt_tag1_3d, split_norm=0.15)

cobalt_tag1_4s = ConfinedOrbital(
    principal_quantum_number=4,
    angular_momentum=0,
    radial_cutoff_radius=6.93481368132*Bohr,
    confinement_start_radius=5.54785094506*Bohr,
    additional_charge=0,
    confinement_strength=14.4199980844*Hartree,
    confinement_power=1,
    radial_step_size=0.001*Bohr,
    )

cobalt_tag1_4s_polarization = PolarizationOrbital(cobalt_tag1_4s)

cobalt_tag1_4s_split = AnalyticalSplit(cobalt_tag1_4s, split_norm=0.15)

Tag1_CobaltBasis = BasisSet(
    element=PeriodicTable.Cobalt,
    orbitals=[ cobalt_tag1_3d , cobalt_tag1_4s , cobalt_tag1_3d_split , cobalt_tag1_4s_split , cobalt_tag1_4s_polarization ],
    occupations=[ 7.0 , 2.0 , 0.0 , 0.0 , 0.0],
    hubbard_u=[ 3.1 , 0.0 , 3.1 , 0.0 , 0.0]*eV,
    filling_method=SphericalSymmetric,
    pseudopotential=NormConservingPseudoPotential("normconserving/CO.GGAPBE.zip"),
    )

basis_set = [
    GGABasis.Oxygen_DoubleZetaPolarized,
    CobaltBasis,
    ('cobalt1', Tag1_CobaltBasis ),
    ]

#----------------------------------------
# Exchange-Correlation
#----------------------------------------
exchange_correlation = SGGAU.PBE

numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(3, 3, 3),
    density_mesh_cutoff=80.0*Hartree,
    )

iteration_control_parameters = IterationControlParameters(
    damping_factor=0.3,
    max_steps=200,
    tolerance=0.0002,
    number_of_history_steps=22,
    )

calculator = LCAOCalculator(
    basis_set=basis_set,
    exchange_correlation=exchange_correlation,
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    iteration_control_parameters=iteration_control_parameters,
    )

bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()
nlsave('differentu.nc', bulk_configuration)

# -------------------------------------------------------------
# Mulliken population
# -------------------------------------------------------------
mulliken_population = MullikenPopulation(bulk_configuration)
nlsave('differentu.nc', mulliken_population)
nlprint(mulliken_population)

# -------------------------------------------------------------
# Density of states
# -------------------------------------------------------------
density_of_states = DensityOfStates(
    configuration=bulk_configuration,
    kpoints=MonkhorstPackGrid(5,5,5),
    energy_zero_parameter=FermiLevel,
    bands_above_fermi_level=None,
    )
nlsave('differentu.nc', density_of_states)
nlprint(density_of_states)
I applied different U values for the two Co, with first one was 3.1 and second one 4.1 as presented in the input file.  However, it failed with these errors:
Code
+----------------------------------------------------------+
| Bulk Bravais lattice                                     |
+----------------------------------------------------------+
Type:
Rhombohedral

Lattice constants:
a =     5.061381 Ang
b =     5.061381 Ang
c =     5.061381 Ang

Lattice angles:
alpha =    33.557310 deg
beta  =    33.557310 deg
gamma =    33.557310 deg

Primitive vectors:
u_1 =      4.132600      2.066300      2.066300 Ang
u_2 =      2.066300      4.132600      2.066300 Ang
u_3 =      2.066300      2.066300      4.132600 Ang

+----------------------------------------------------------+
| Bulk: Cartesian (Angstrom) / fractional                  |
+----------------------------------------------------------+
4
Bulk
Co   -3.712308e-15 -3.712308e-15 -1.653040e-02    0.00200  0.00200 -0.00600
Co    4.132600e+00  4.132600e+00  4.116070e+00    0.50200  0.50200  0.49400
O     2.066300e+00  2.066300e+00  2.066300e+00    0.25000  0.25000  0.25000
O     6.198900e+00  6.198900e+00  6.198900e+00    0.75000  0.75000  0.75000
+------------------------------------------------------------------------------+
|                                                                              |
| DFT Calculation  [Started Thu Sep 17 20:44:47 2015]                          |
|                                                                              |
+------------------------------------------------------------------------------+

                            |--------------------------------------------------|
Calculating Nonlocal Part  : ==================================================

                            |--------------------------------------------------|
Calculating Kinetic Matrix : ==================================================
Traceback (most recent call last):
  File ".\zipdir\NL\Calculators\BulkCalculatorInterface.py", line 233, in _update
  File ".\zipdir\NL\Calculators\LCAOCalculator\LCAOCalculator.py", line 1121, in scfLoop
  File ".\zipdir\NL\Calculators\LCAOCalculator\LCAOCalculator.py", line 654, in scfLoopHamiltonian
  File ".\zipdir\NL\Calculators\LCAOCalculator\Builders\AbstractLCAOBuilder.py", line 280, in createHubbardTermCalculator
AttributeError: 'tuple' object has no attribute 'element'
Note: Here, VNL-13.8.1 and VNL-2014.3 were both tested. I think this is caused by the Tag lines in the py files. After removing the lines, it can run. Hope experts in Quantumwise can help give a solution. Thank you in advance!

Offline Jess Wellendorff

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 933
  • Country: dk
  • Reputation: 29
    • View Profile
Re: set different Hubbard U for same element in a model
« Reply #1 on: September 18, 2015, 13:32 »
Yes, you are right, this does not work properly. It appears that VNL allows you to set up this calculation, but ATK does not assign the basis sets correctly. Therefore, you are currently not able to assign different Hubbard U parameters to identical elements in the same configuration, even though you correctly assign tags. So this is of course a bug. I cannot say when it will be fixed, but probably not for the upcoming 2015 release. If not, then hopefully any following release or bug-fix update.

Offline Yue-Wen Fang

  • Heavy QuantumATK user
  • ***
  • Posts: 29
  • Country: cn
  • Reputation: 0
    • View Profile
Re: set different Hubbard U for same element in a model
« Reply #2 on: September 18, 2015, 16:38 »
Dear Dr. Wellendorff,

Thanks for your information! I'm looking forward to your updates.

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5575
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: set different Hubbard U for same element in a model
« Reply #3 on: September 18, 2015, 23:32 »
Mind you, the concept of using different Hubbard U for atoms of the same element in different positions doesn't seem entirely sound to me...

Offline Yue-Wen Fang

  • Heavy QuantumATK user
  • ***
  • Posts: 29
  • Country: cn
  • Reputation: 0
    • View Profile
Re: set different Hubbard U for same element in a model
« Reply #4 on: September 19, 2015, 05:04 »
Hi, Dr. Ander Blom, thanks for your reply.

Yes, the example shown in CoO crystal is not physical, I just used it to post the bug. ! Besides,  if you change to study CoO/Co core-shell structures, it has to be considered to set different U parameters for the cobalt atoms in core and shell. I advise you to consider such cases in future updates because they are also import.

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5575
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: set different Hubbard U for same element in a model
« Reply #5 on: September 19, 2015, 12:05 »
Right, that would make sense. We'll fix the bug asap, should be simple.

Offline Yue-Wen Fang

  • Heavy QuantumATK user
  • ***
  • Posts: 29
  • Country: cn
  • Reputation: 0
    • View Profile
Re: set different Hubbard U for same element in a model
« Reply #6 on: September 19, 2015, 15:18 »
Great thanks for your hard work! Looking forward to your good news.