SlaterKosterTable

class SlaterKosterTable(**kwargs)

Class for representing the parameters that determine the parameters of a Slater-Koster basis.

The constructor takes parameters specified as keyword arguments. These arguments follow one of two conventions, depending on wether offsite or onsite parameters are being specified:

Onsite keyword arguments are in the form element=instance, where element is the full name of an element as a string, and instance is a SlaterKosterOnsiteParameters object

Offsite keyword arguments are in the form element1_element2_XYZ=list, where
element1: the first element - e.g. carbon.
element2: the second element - e.g. hydrogen.
X: the orbital on the first element - s, p, d.
Y: the orbital on the second element - s, p, d.
Z: the type of interaction - s for sigma, p for pi, d for delta.
list: A list of tuples in one of two formats: Either, [(d0,h0,s0), (d1,h1,s1), ...] where (d,h,s) indicate distance, hamiltonian and overlap elements. Or, [(d0,h0), (d1,h1), ...] in the case the overlap matrix is diagonal.

offsiteParameters()
Returns:The offsite parameters.
Return type:dict
onsiteParameters()
Returns:The onsite parameters.
Return type:dict

Usage Examples

Define a SlaterKosterTable with a Vogl silicon basis

# Generate a basis set for Silicon using
# J. Phys. Chem. solids Vol. 44, 365-378, 1983

# Parameters, distances in Angstrom silicon
a = 5.4306*Ang
d_n1 = math.sqrt(3.0)/4.0*a
d_n2 = math.sqrt(2.0)/2.0*a

# Matrix elements from paper, energies in eV
E_s =     -4.545*eV
E_p =      1.715*eV
E_sstar =  6.6850*eV

V_ss =    -8.3000*eV
V_xx =     1.7150*eV
V_xy =     4.5750*eV
V_sp =     5.7292*eV
V_sstarp = 5.3749*eV

# -----------------------------------------------------------------------------
# The paper is nearest neighbour Slater-Koster parameterization,
# hence it has to be tabulated using a power law.

# Specify that the cutoff for the matrix elements between 1. and 2. nn
rcut = 0.5*d_n1 + 0.5*d_n2

# Generate a series of strain -0.1 from +0.1
epsilon = numpy.linspace(-0.10, 0.10, 21)

# Specify the distances for which the matrix elements are specified
distances = [ d_n1*(1.0+x) for x in epsilon ]+ [ rcut ]

# Using a power-law to get the distance dependence of the matrix elements
sss  = [ 0.25*V_ss/(1.0+x)**2             for x in epsilon ] + [0.0*eV]
sps  = [ 0.25*math.sqrt(3)*V_sp/(1.0+x)**2     for x in epsilon ] + [0.0*eV]
pps  = [ 0.25*(V_xx+2.0*V_xy)/(1.0+x)**2  for x in epsilon ] + [0.0*eV]
ppp  = [ 0.25*(V_xx-V_xy)/(1.0+x)**2      for x in epsilon ] + [0.0*eV]
ps1s = [ 0.25*math.sqrt(3)*V_sstarp/(1.0+x)**2 for x in epsilon ] + [0.0*eV]

# Create the onsite.
si_onsite = SlaterKosterOnsiteParameters(element = Silicon, # Not needed.
                                         angular_momenta = [0,1,0],
                                         occupations =     [2,2,0],
                                         ionization_potential = [E_s, E_p, E_sstar],
                                         onsite_hartree_shift = ATK_U(Silicon, ['3s','3p','3s']),
                                         onsite_spin_split = ATK_W(Silicon, ['3s','3p','3s']),
)

Silicon_Basis = SlaterKosterTable(silicon_silicon_sss =  zip(distances, sss),
                            silicon_silicon_sps =  zip(distances, sps),
                            silicon_silicon_pps =  zip(distances, pps),
                            silicon_silicon_ppp =  zip(distances, ppp),
                            silicon_silicon_ps1s = zip(distances, ps1s),
                            silicon = si_onsite,
                            )


Notes

  • The onsite and offsite arguments can be specified at the same time, and in any order.

    carbon_onsite_settings = SlaterKosterOnsiteParameters(...)
    hydrogen_onsite_settings = SlaterKosterOnsiteParameters(...)
    t = SlaterKosterTable(carbon=carbon_onsite_settings,
                          hydrogen=hydrogen_onsite_settings,
                          hydrogen_hydrogen_sss=[(1.1*Ang,0.2*eV,0.2), ... ],
                          hydrogen_carbon_spp=[(0.2*Ang,0.1*eV), ... ])
    
  • If there are multiple orbitals in an angular shell the shells are named, s0, s1, s2, ..

    carbon_onsite_settings = SlaterKosterOnsiteParameters(...)
    hydrogen_onsite_settings = SlaterKosterOnsiteParameters(...)
    t = SlaterKosterTable(carbon=carbon_onsite_settings,
                          hydrogen=hydrogen_onsite_settings,
                          hydrogen_hydrogen_s0s0s=[(1.1*Ang,0.2*eV,0.2), ... ],
                          hydrogen_hydrogen_s1s1s=[(1.1*Ang,0.22*eV), ... ],
                          hydrogen_carbon_s0pp=[(0.2*Ang,0.1*eV), ... ])
                          hydrogen_carbon_s1pp=[(0.2*Ang,0.15*eV), ... ])
    

    Note that s is equivalent with s0, see the example Vogl.py above which defines orbitals s and s1.

  • Matrix elements that are not specified in the SlaterKosterTable are set to zero.

For the details of the Slater-Koster model, see the chapter on ATK-SE.