KITE's disorder implementation — general-purpose and user-friendly — is one of its main features. The inclusion of disorder in a given system follows a simple recipe: the user specifies one or more disorder patterns in the Python interface together with the desired disorder statistics. This information is passed on to KITEx and used to automatically perform the required modifications of on-site energies and hopping terms across the whole lattice on-the-fly.
Disorder patterns are local modifications of the Hamiltonian that can be constricted to one unit cell or can connect neighboring unit cells.
KITE handles both standard uncorrelated disorder (e.g., random on-site energies) and realistic short-range disorder (e.g., vacancies or impurity scattering centers distributed randomly over the lattice sites with a specified concentration). KITE can handle multiple disorder patterns simultaneously.
Disorder implementation: After defining a regular lattice, disorder can be added to the system. KITE allows the user to select between on-site and structural disorder by choosing between predefined classes in the python interface. The interface provides two different classes of disorder:
kite.Disorder- onsite disorder with two possible statistical distributions
kite.StructuralDisorder- multi-orbital impurities and defects (including bond disorder) with a given concentration
kite.Disorder adds randomly generated on-site terms at the sites of a desired sublattice drawn from one of the two statistical distributions:
One can select a sublattice type in which the disorder will appear, the mean
value and the standard deviation of the selected distribution.
To include on-site disorder, one builds the
use the following procedure:
# define an object based on the lattice disorder = kite.Disorder(lattice) # add Gaussian distributed disorder at all sites of a selected sublattice disorder.add_disorder('A', 'Gaussian', mean, std)
In a single object it is possible to select multiple sublattices, each with its own disorder distribution
following the rule
kite.Disorder.add_disorder('sublattice', 'type', mean, std). For example,
The final step consists of adding the disorder as an additional parameter into the
A complete example that calculates the average density of states of graphene with different on-site disorder distributions on each sublattice is given below:
kite.StructuralDisorder class adds the possibility of selecting between two different
short-range disorder types, i.e. vacancy defects, randomly distributed with a certain concentration over lattice sites on a selected sublattice,
and a more generic multi-orbital disorder which may combine of on-site and hopping terms
(also distributed with a certain concentration).
Example 1: Vacancy defects¶
To add vacancy defects with a given
concentration on a single sublattice one uses the simple instruction:
struc_disorder = kite.StructuralDisorder(lattice, concentration=0.2) struc_disorder.add_vacancy('B') # add a vacancy to a selected sublattice
To distribute the vacancies on both sublattices (compensated or otherwise), one needs to treat each sublattice as a separate
object of the class
Example 2: mixed on-site/bond disorder¶
The following example illustrates KITE's most general type of short-range disorder, which includes both atomic defects (vacancies)
and bond modifications.
This type of disorder can be added as an object of the class
The procedure is analogous to adding a hopping term to the
Pybinding lattice object.
For the sake of clarity, let us first define sublattices that will compose the disorder. In this case we are not restricted to a single unit cell:
# define a node in a unit cell [i, j] selecting a single sublattice node0 = [[+0, +0], 'A'] node1 = [[+0, +0], 'B'] node2 = [[+1, +0], 'A'] node3 = [[+0, +1], 'B'] node4 = [[+0, +1], 'A'] node5 = [[-1, +1], 'B']
After the definition of a parent
kite.StructuralDisorder object, we can define the desired pattern:
# define an object based on the lattice with a certain concentration struc_disorder = kite.StructuralDisorder(lattice, concentration=0.2) struc_disorder.add_structural_disorder( # add bond disorder in the form # [from unit cell], 'sublattice_from', [to_unit_cell], 'sublattice_to', value: (*node0, *node1, 0.5), (*node1, *node2, 0.1), (*node2, *node3, 0.5), (*node3, *node4, 0.3), (*node4, *node5, 0.4), (*node5, *node0, 0.8), # in this way we can add onsite disorder in the form [unit cell], 'sublattice', value ([+0, +0], 'B', 0.1) ) # It is possible to add multiple different disorder types which # should be forwarded to the config_system function as a list. another_struc_disorder = kite.StructuralDisorder(lattice, concentration=0.6) another_struc_disorder.add_structural_disorder( (*node0, *node1, 0.05), (*node4, *node5, 0.4), (*node5, *node0, 0.02), ([+0, +0], 'A', 0.3) )
Before exporting the settings to the HDF5-file, it is possible to define multiple disorder realizations which will be superimposed to the clean system.
The following script has a minimal example of how to configure the structural disorder
with the resulting density of states: