Author Topic: VO2 monoclinic (single crystal) - LCAO: SGGA+U convergence troubles  (Read 3188 times)

0 Members and 1 Guest are viewing this topic.

Offline pk364

  • New QuantumATK user
  • *
  • Posts: 3
  • Country: de
  • Reputation: 0
    • View Profile
Hello! Since a while, I've been trying to simulate the bandgap of the much celebrated VO2 monoclinic phase (single crystal) using the LCAO calculator with SGGA+U (Hubbard), with PBES functionals and PseudoDojo (ultra) pseudopotentials. I hope to open its bandgap to ~0.6 eV (experimental value), which maybe quite challenging. I have chosen an antiferromagnetic initial configuration with the antiparallel spins on the Vanadium atoms. However, I am unable to converge the calculations and they seem to be oscillating. The density matrix report is as follows:
Code
0 E = -265.535 dE =  1.841101e+02 dH =  1.067618e+00
1 E = -278.785 dE =  1.325025e+01 dH =  5.624259e-01
2 E = -193.078 dE =  8.570705e+01 dH =  1.724710e+02
3 E = -122.926 dE =  7.015169e+01 dH =  3.727634e+01
4 E = -268.054 dE =  1.451278e+02 dH =  3.569472e+01
5 E = -274.404 dE =  6.349619e+00 dH =  6.521554e+01
6 E = -320.104 dE =  4.569986e+01 dH =  3.719561e+01
7 E = -391.865 dE =  7.176161e+01 dH =  3.002920e+01
8 E = -394.076 dE =  2.210358e+00 dH =  3.168863e+01
9 E = -394.507 dE =  4.318557e-01 dH =  2.987522e+01
10 E = -387.011 dE =  7.496348e+00 dH =  2.968226e+01
11 E = -389.401 dE =  2.390098e+00 dH =  3.002361e+01
This goes on forever... until it is artificially stopped by the maximum no. of iterations! As of now, I have tried to increase the density mesh cut-off and decrease history steps, but they yield no difference. Any suggestions to make this converge would be highly appreciated. The full script is attached for reference:
Code
# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
lattice = SimpleMonoclinic(5.1836*Angstrom, 5.0504022144*Angstrom, 9.0187*Angstrom, 90.58*Degrees)

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

# Define coordinates
fractional_coordinates = [[ 0.110304,  0.631185,  0.869553],
                          [ 0.110304,  0.868815,  0.369553],
                          [ 0.889696,  0.131185,  0.630447],
                          [ 0.889696,  0.368815,  0.130447],
                          [ 0.402394,  0.142849,  0.873272],
                          [ 0.402394,  0.357151,  0.373272],
                          [ 0.597606,  0.642849,  0.626728],
                          [ 0.597606,  0.857151,  0.126728],
                          [ 0.150305,  0.171076,  0.484713],
                          [ 0.150305,  0.328924,  0.984713],
                          [ 0.849695,  0.671076,  0.015287],
                          [ 0.849695,  0.828924,  0.515287],
                          [ 0.35536 ,  0.686591,  0.495905],
                          [ 0.35536 ,  0.813409,  0.995905],
                          [ 0.64464 ,  0.186591,  0.004095],
                          [ 0.64464 ,  0.313409,  0.504095],
                          [ 0.112774,  0.545407,  0.27475 ],
                          [ 0.112774,  0.954593,  0.77475 ],
                          [ 0.887226,  0.045407,  0.22525 ],
                          [ 0.887226,  0.454593,  0.72525 ],
                          [ 0.388671,  0.038549,  0.269627],
                          [ 0.388671,  0.461451,  0.769627],
                          [ 0.611329,  0.538549,  0.230373],
                          [ 0.611329,  0.961451,  0.730373]]

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

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# Basis Set
#----------------------------------------
oxygen_1s = HydrogenOrbital(
    principal_quantum_number=1,
    angular_momentum=0,
    radial_cutoff_radius=3.89375*Angstrom,
    confinement_start_radius=3.115*Angstrom,
    charge=0.75,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_2p = ConfinedOrbital(
    principal_quantum_number=2,
    angular_momentum=1,
    radial_cutoff_radius=4.1953125*Angstrom,
    confinement_start_radius=3.35625*Angstrom,
    additional_charge=0,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_2p_0 = HydrogenOrbital(
    principal_quantum_number=2,
    angular_momentum=1,
    radial_cutoff_radius=4.1205078125*Angstrom,
    confinement_start_radius=3.29640625*Angstrom,
    charge=1.8,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_2s = ConfinedOrbital(
    principal_quantum_number=2,
    angular_momentum=0,
    radial_cutoff_radius=3.1171875*Angstrom,
    confinement_start_radius=2.49375*Angstrom,
    additional_charge=0,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_3d = HydrogenOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=2.8125*Angstrom,
    confinement_start_radius=2.25*Angstrom,
    charge=7.6,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_3d_0 = HydrogenOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=3.287109375*Angstrom,
    confinement_start_radius=2.6296875*Angstrom,
    charge=5.6,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_3p = HydrogenOrbital(
    principal_quantum_number=3,
    angular_momentum=1,
    radial_cutoff_radius=3.071875*Angstrom,
    confinement_start_radius=2.4575*Angstrom,
    charge=6.2,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_3s = HydrogenOrbital(
    principal_quantum_number=3,
    angular_momentum=0,
    radial_cutoff_radius=3.55625*Angstrom,
    confinement_start_radius=2.845*Angstrom,
    charge=6.4,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_4f = HydrogenOrbital(
    principal_quantum_number=4,
    angular_momentum=3,
    radial_cutoff_radius=2.78125*Angstrom,
    confinement_start_radius=2.225*Angstrom,
    charge=11.6,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

oxygen_5g = HydrogenOrbital(
    principal_quantum_number=5,
    angular_momentum=4,
    radial_cutoff_radius=2.57421875*Angstrom,
    confinement_start_radius=2.059375*Angstrom,
    charge=17.6,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

OxygenBasis = BasisSet(
    element=PeriodicTable.Oxygen,
    orbitals=[oxygen_2s, oxygen_2p, oxygen_2p_0, oxygen_3d, oxygen_3s, oxygen_4f, oxygen_3p, oxygen_3d_0, oxygen_5g, oxygen_1s],
    occupations=[3.5, 3.5, 2.0, -0.5, -0.5, -2.0, 0.0, 0.0, 0.0, 0.0],
    hubbard_u=[0.0, 0.95, 0.95, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]*eV,
    dft_half_parameters=Automatic,
    filling_method=SphericalSymmetric,
    onsite_spin_orbit_split=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]*eV,
    pseudopotential=NormConservingPseudoPotential("normconserving/pseudodojo/gga/stringent/08_O.upf", local_potential_cutoff_threshold=1e-06*Hartree, local_potential_cutoff_radius=6.0*Bohr),
    )

vanadium_1s = HydrogenOrbital(
    principal_quantum_number=1,
    angular_momentum=0,
    radial_cutoff_radius=3.653125*Angstrom,
    confinement_start_radius=2.9225*Angstrom,
    charge=0.6,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_3d = ConfinedOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=3.46875*Angstrom,
    confinement_start_radius=2.775*Angstrom,
    additional_charge=0,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_3d_0 = HydrogenOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=4.348828125*Angstrom,
    confinement_start_radius=3.4790625*Angstrom,
    charge=3,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_3d_1 = HydrogenOrbital(
    principal_quantum_number=3,
    angular_momentum=2,
    radial_cutoff_radius=2.94140625*Angstrom,
    confinement_start_radius=2.353125*Angstrom,
    charge=5.4,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_3p = ConfinedOrbital(
    principal_quantum_number=3,
    angular_momentum=1,
    radial_cutoff_radius=2.8359375*Angstrom,
    confinement_start_radius=2.26875*Angstrom,
    additional_charge=0,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_3s = ConfinedOrbital(
    principal_quantum_number=3,
    angular_momentum=0,
    radial_cutoff_radius=2.6171875*Angstrom,
    confinement_start_radius=2.09375*Angstrom,
    additional_charge=0,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4d = HydrogenOrbital(
    principal_quantum_number=4,
    angular_momentum=2,
    radial_cutoff_radius=4.412109375*Angstrom,
    confinement_start_radius=3.5296875*Angstrom,
    charge=7,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4f = HydrogenOrbital(
    principal_quantum_number=4,
    angular_momentum=3,
    radial_cutoff_radius=3.8875*Angstrom,
    confinement_start_radius=3.11*Angstrom,
    charge=9,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4f_0 = HydrogenOrbital(
    principal_quantum_number=4,
    angular_momentum=3,
    radial_cutoff_radius=2.3515625*Angstrom,
    confinement_start_radius=1.88125*Angstrom,
    charge=11.2,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4p = ConfinedOrbital(
    principal_quantum_number=4,
    angular_momentum=1,
    radial_cutoff_radius=2.545703125*Angstrom,
    confinement_start_radius=2.0365625*Angstrom,
    additional_charge=2,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4p_0 = HydrogenOrbital(
    principal_quantum_number=4,
    angular_momentum=1,
    radial_cutoff_radius=4.79296875*Angstrom,
    confinement_start_radius=3.834375*Angstrom,
    charge=5.6,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4s = ConfinedOrbital(
    principal_quantum_number=4,
    angular_momentum=0,
    radial_cutoff_radius=3.615625*Angstrom,
    confinement_start_radius=2.8925*Angstrom,
    additional_charge=0,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_4s_0 = ConfinedOrbital(
    principal_quantum_number=4,
    angular_momentum=0,
    radial_cutoff_radius=2.305078125*Angstrom,
    confinement_start_radius=1.8440625*Angstrom,
    additional_charge=2,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_5f = HydrogenOrbital(
    principal_quantum_number=5,
    angular_momentum=3,
    radial_cutoff_radius=3.48046875*Angstrom,
    confinement_start_radius=2.784375*Angstrom,
    charge=11.2,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_5g = HydrogenOrbital(
    principal_quantum_number=5,
    angular_momentum=4,
    radial_cutoff_radius=2.73828125*Angstrom,
    confinement_start_radius=2.190625*Angstrom,
    charge=12.8,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

vanadium_5g_0 = HydrogenOrbital(
    principal_quantum_number=5,
    angular_momentum=4,
    radial_cutoff_radius=2.70703125*Angstrom,
    confinement_start_radius=2.165625*Angstrom,
    charge=14,
    confinement_strength=12.5*Hartree,
    confinement_power=2,
    radial_step_size=0.001*Bohr,
    )

VanadiumBasis = BasisSet(
    element=PeriodicTable.Vanadium,
    orbitals=[vanadium_3s, vanadium_3p, vanadium_4s, vanadium_3d, vanadium_4f, vanadium_3d_0, vanadium_4p, vanadium_5g, vanadium_4s_0, vanadium_3d_1, vanadium_5f, vanadium_4d, vanadium_4f_0, vanadium_4p_0, vanadium_5g_0, vanadium_1s],
    occupations=[2.0, 5.5, 5.0, 4.0, -3.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    hubbard_u=[0.0, 0.0, 0.0, 5.2, 0.0, 5.2, 0.0, 0.0, 0.0, 5.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]*eV,
    dft_half_parameters=Automatic,
    filling_method=SphericalSymmetric,
    onsite_spin_orbit_split=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]*eV,
    pseudopotential=NormConservingPseudoPotential("normconserving/pseudodojo/gga/standard/23_V.upf", local_potential_cutoff_threshold=1e-06*Hartree, local_potential_cutoff_radius=6.0*Bohr),
    )

basis_set = [
    OxygenBasis,
    VanadiumBasis,
    ]

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

k_point_sampling = KpointDensity(
    density_a=4.0*Angstrom,
    )
numerical_accuracy_parameters = NumericalAccuracyParameters(
    density_mesh_cutoff=200.0*Hartree,
    k_point_sampling=k_point_sampling,
    )

iteration_control_parameters = IterationControlParameters(
    number_of_history_steps=15,
    )

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)

# -------------------------------------------------------------
# Initial State
# -------------------------------------------------------------
scaled_spins = [
    1.0,
    1.0,
    1.0,
    1.0,
    -1.0,
    -1.0,
    -1.0,
    -1.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
]
initial_spin = InitialSpin(scaled_spins=scaled_spins)

bulk_configuration.setCalculator(
    calculator,
    initial_spin=initial_spin,
)
bulk_configuration.update()
nlsave('E:/Praful/20240503/VO2 Monoclinic script LCAO test.hdf5', bulk_configuration)
nlprint(bulk_configuration)

# -------------------------------------------------------------
# Bandstructure
# -------------------------------------------------------------
bandstructure = Bandstructure(
    configuration=bulk_configuration,
    route=['G', 'Y', 'C', 'Z', 'E', 'A', 'G', 'B', 'D', 'Z', 'G'],
    points_per_segment=20,
    bands_above_fermi_level=30,
    method=Full,
    )
nlsave('E:/Praful/20240503/VO2 Monoclinic script LCAO test.hdf5', bandstructure)

Kind regards, Praful