SlaterKosterTable — Class for representing the parameters that determine the parameters of a slater koster basis.
Construction of the parameter class of a Slater-Koster basis set.
Any non-keyword argument is not accepted by the class, and throws an exception.
A sequence of keyword arguments.
Note:
Keyword 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 name of an element in the PeriodicTable, and instance is a
SlaterKosterOnsiteParameters object
carbon_onsite_settings = SlaterKosterOnsiteParameters(...)
hydrogen_onsite_settings = SlaterKosterOnsiteParameters(...)
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, either in the form
[(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.
A SlaterKosterTable object provides the following methods:
This object supports cloning. See the section called “Cloning of ATK Python objects”.
offsiteParameters(): Query for the offsite parameters.
onsiteParameters(): Query for the onsite parameters.
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,
)
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 The ATK-SE Package.