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
, whereelement
is the full name of an element as a string, andinstance
is aSlaterKosterOnsiteParameters
objectOffsite 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.
In the offsite keyword arguments the order of the element and shell pairs is irrelevant. E.g., it is equivalent to define
t = SlaterKosterTable(carbon=carbon_onsite_settings, hydrogen=hydrogen_onsite_settings, hydrogen_carbon_sps=[(0.2*Ang,0.1*eV), ... ]), ...
or
t = SlaterKosterTable(carbon=carbon_onsite_settings, hydrogen=hydrogen_onsite_settings, carbon_hydrogen_pss=[(0.2*Ang,0.1*eV), ... ]), ...
The proper signs for even and odd parity are enforced internally, therefore each interaction should be specified only once.
Matrix elements that are not specified in the SlaterKosterTable are set to zero.