HuckelBasisParameters

class HuckelBasisParameters(element, orbitals, occupations=None, filling_method=None, ionization_potential=None, onsite_hartree_shift=None, onsite_spin_split=None, onsite_spin_orbit_split=None, number_of_valence_electrons=None, wolfsberg_helmholtz_constant=None, vacuum_level=None)

Class for representing the parameters that determine the properties of a Huckel basis.

Parameters:
  • element (PeriodicTableElement) – The element associated with the basis set.
  • orbitals (SlaterOrbital | list of SlaterOrbital) – The basis orbitals. One should be given for each subshell.
  • occupations (list of float) – The initial occupation of each orbital (subshell) as a list of positive floats with one entry for each subshell. Either this, or number_of_valence_electrons must be given.
  • filling_method (SphericalSymmetric | Anisotropic) – The method used for setting up the initial occupation.
    Default: SphericalSymmetric
  • ionization_potential (PhysicalQuantity of type energy) – The ionization potential with one entry for each (subshell).
    Default: Must be given.
  • onsite_hartree_shift (PhysicalQuantity of type energy) – The on-site Hartree shift with one entry for each (subshell).
    Default: Must be given.
  • onsite_spin_split (PhysicalQuantity of type energy) – The on-site spin-split values of each orbital (subshell) pair. This should be a square matrix of size n where n is the number of orbitals (subshells).
    Default: No splitting
  • onsite_spin_orbit_split (PhysicalQuantity of type energy) – The on-site spin-orbit with one entry for each orbital (subshell).
    Default: No splitting
  • number_of_valence_electrons (int) – The number of valence electrons used to determine the neutral state. Either this, or occupations must be given.
  • wolfsberg_helmholtz_constant (float) – The Wolfsberg-Helmholtz constant. Must be positive.
    Default: 1.75
  • vacuum_level (PhysicalQuantity of type energy) – The energy shift of the vacuum level.
    Default: 0.0 * Hartree
angularMomenta()
Returns:The angular momentum of each orbital (subshell) in the basis set.
Return type:list of int
element()
Returns:The element of the basis set.
Return type:PeriodicTableElement
fillingMethod()
Returns:The method used for setting up the initial occupation.
Return type:SphericalSymmetric | Anisotropic
ionizationPotential()
Returns:The ionization potential of each orbital (subshell) in the basis set.
Return type:PhysicalQuantity of type energy
numberOfValenceElectrons()
Returns:The sum of the occupations.
Return type:float
occupations()
Returns:The occupations associated with the orbitals.
Return type:list of float
onsiteHartreeShift()
Returns:The on-site Hartree shift of each orbital (subshell) in the basis set.
Return type:PhysicalQuantity of type energy
onsiteSpinOrbitSplit()
Returns:The on-site spin-orbit split of each orbital (subshell) in the basis set.
Return type:PhysicalQuantity of type energy
onsiteSpinSplit()
Returns:The on-site spin-split values of each orbital (subshell) pair. This should be a square matrix of size n where n is the number of orbitals (subshells).
Return type:PhysicalQuantity of type energy
orbitals()
Returns:The orbitals of the basis set.
Return type:list of SlaterOrbital
vacuumLevel()
Returns:The energy shift of the vacuum level.
Return type:PhysicalQuantity of type energy
wolfsbergHelmholtzConstant()
Returns:The Wolfsberg-Helmholtz constant.
Return type:float

Usage Examples

Define an Extended Huckel Basis for Carbon

carbon_2s = SlaterOrbital(
   principal_quantum_number=2,
   angular_momentum=0,
   slater_coefficients=[ 2.0249*1/Bohr ],
   weights=[ 0.76422]
   )

carbon_2p = SlaterOrbital(
   principal_quantum_number=2,
   angular_momentum=1,
   slater_coefficients=[ 1.62412*1/Bohr , 2.17687*1/Bohr ],
   weights=[ 0.27152 , 0.73886 ]
   )

carbon_3d = SlaterOrbital(
   principal_quantum_number=3,
   angular_momentum=2,
   slater_coefficients=[ 1.1944*1/Bohr ],
   weights=[ 0.49066]
   )

CarbonBasis = HuckelBasisParameters(
   element=Carbon,
   orbitals=[ carbon_2s , carbon_2p , carbon_3d ],
   ionization_potential=[ -19.88924*eV , -13.08001*eV , -2.04759*eV ],
   onsite_hartree_shift=ATK_U(Carbon, ['2s','2p','3d']),
   onsite_spin_split=ATK_W(Carbon, ['2s','2p','3d']),
   number_of_valence_electrons=4,
   wolfsberg_helmholtz_constant=2.8,
   vacuum_level=0.0*eV,
   )

Notes

Tables with the available parameter sets can be found in Extended Hückel basis sets.

The onsite_hartree_shift can be obtained from the ATK_U database.

The onsite_spin_split can be obtained from the ATK_W database.

The overlap matrix,

\[\begin{split}S_{ij} &= \delta_{ ij}, & \text{if} \, \, & {\bf R}_i={\bf R}_j \\ &= \int_V \phi_i({\bf r} -{\bf R}_i) \phi_j({\bf r}- {\bf R}_j) \mathrm{d}{\bf r}\,\, & \text{if} \, \, & {\bf R}_i \neq {\bf R}_j\end{split}\]

is the central object in the extended Huckel model, where \(\phi\) is of the type SlaterOrbital. The one-electron Hamiltonian is defined by

\[\begin{split}H_{ij} &= E_i + V_H({\bf R}_i)-E^\mathrm{VAC}, & \text{if} \, \, & i=j\\ &= \frac{1}{4} (\beta_i+\beta_j) (E_i+E_j) S_{ij} \, + \, \frac{1}{2} (V_H({\bf R}_i)+V_H({\bf R}_j)- 2 E^\mathrm{VAC})S_{ij}\,\, & \text{if} \, \, & i \neq j\end{split}\]

where the parameters \(E_i\) is the ionization_potential, \(\beta\) the wolfsberg_helmholtz_constant, and the vacuum_level, \(E^\mathrm{VAC}\), is used to shift the position of the vacuum level.

\(V_H\) is the Hartree potential, which is obtained by solving Poisson’s equation for the charge density

\[\delta n({\bf r})=\sum_\mu \delta m_\mu ({ \frac{\alpha_{\mu}}{\pi}})^{\frac{3}{2}} e^{-\alpha_\mu |{\bf r}-{\bf R}_\mu|^2},\]

where \(\delta m_\mu = m_\mu - Z_\mu\) is the total charge of atom \(\mu\), i.e. the sum of the Mulliken population \(m_\mu\) and the ionic charge \(-Z_\mu\).

The width of the Gaussian, \(\alpha = \pi U^2 /4 e^4\), is specified through the onsite_hartree_shift, \(U\).

Table 35 HuckelBasisParameters
Symbol HuckelBasisParameters
\(E_i\) ionization_potential
\(\beta\) wolfsberg_helmholtz_constant
\(U\) onsite_hartree_shift
\(E^\mathrm{VAC}\) vacuum_level