Skip to content

3. Settings

KITE uses the classes kite.Configuration and kite.Calculation to define the calculation settings.

This is what a typical kite.Configuration object (for a 2D lattice) looks like:

nx = ny = 2
lx = ly = 128
mode = 'periodic'
configuration = kite.Configuration(
  divisions=[nx, ny],
  length=[lx, ly],
  boundaries=[mode, mode],
  is_complex=False,
  precision=1 
)
Below, we explain each of the arguments in the kite.Configuration object.

Info

The current syntax assumes that the user will simulate a 2D or 3D system as a default. However, 1D lattices can be easily constructed by simulating a strip geometry with open boundary conditions in the transverse (y) direction and ly, ny = 1.

Divisions

The divisions is an integer number that defines the number of decomposition parts in each spatial direction. KITEx implements an efficient domain decomposition technique to divide the lattice into various partitions that are computed in parallel. KITEx decomposition algorithms are optimized at the design level to deliver optimal multithreading scaling. Their usage for large-scale simulations is highly recommended.
To activate this feature, set a number of decomposition parts larger than one, i.e. nx * ny > 1 (2D) or nx * ny * nz > 1 (3D).

Warning

The product nx * ny (* nz) equals the number of threads used by KITEx and thus must not exceed the number of available cores in the compute node.

Length

The length is an integer number of unit cells along the direction of lattice vectors (for example, lx, ly, lz = 256, 256, 256). The lateral size of the decomposed parts are given by lx/nx, ly/ny and lz/nz.

Warning

The lateral sizes lx/nx, ly/ny, lz/nz must be integers.

Note that when using a 2D lattice, only lx, ly, nx, ny are needed.

Boundaries

KITE's default boundary conditions (BCs) are: periodic, open, and twisted. Moreover, a "random BCs" option is available, whereby statistical averages over ensembles of random vectors (or disorder configurations) are accelerated via the use of random twist angles drawn from a uniform distribution. This special option is particularly useful to simulate the infinite-size “bulk", since it efficiently eliminates finite size effects.

The boundaries is a string. Use 'periodic' for periodic BCs, 'open' for open BCs, 'twisted' for twisted BCs and 'random' for random BCs. In all cases, the system has the geometry of the unit cell, which is replicated lx, ly, lz times in the directions of the unit vectors. If twisted boundary conditions are used, the twist angles must be provided in radians.

Info

Different BCs can be used along the different directions. For example, impose open BCs along one spatial direction to build ribbons in 2D and slabs in 3D.

Twisted BC

For twisted BCs, the twist phase angles need to be specified by the user. This is done by means of an extra argument ' angles=[phi_x,phi_y,phi_z]' where 'phi_{x,y,z} \in [0, 2*M_PI]'. The syntax is simple. For example, for a twist angle of pi/2.0 along both lattice directions in a 2D system, we can use:

nx = ny = 2
lx = ly = 128
mode = 'twisted'
twsx = twsy = np.pi/2.0 

configuration = kite.Configuration(
  divisions=[nx, ny],
  length=[lx, ly],
  boundaries=[mode, mode],
  angles = [twsx,twsy]
  is_complex=False,
  precision=1 
)

Random BC

Random BCs are defined using mode = 'random'. No extra arguments are required, but this option implicitly assumes that many random vectors (and/or disorder configurations) will be used (see Sec. Calculation). For a single system realization, this option is equivalent to a mere twisted-BC simulation with randomly chosen twist-angles along x, y and z lattice directions.

Complex

The is_complex is a boolean value. For optimization purposes, KITEx only considers and stores complex data with the setting is_complex=True activated. is_complex=False should be used for real symmetric Hamiltonians.

Precision

The precision is an integer identifier for the used data type. KITEx allows users to define the precision of the calculation. Use 0 for float, 1 for double, and 2 for long double.

Spectrum Range

The optional spectrum_range is an array of real values. By default, KITE executes an automated rescaling of the Hamiltonian (Sec. Documentation). Advanced users are encouraged to override this feature and specify the energy interval manually using spectrum_range=[Emin,Emax], where Emin, Emax are the minimum, maximum energy eigenvalues.

Lower/upper bounds should be used if exact energy eigenvalues of the lattice model are unknown (e.g. due to the presence of a disorder landscape); see Sec. Disorder for more information.

To manually set the energy spectrum limits, it is necessary to add an extra parameter (spectrum_range) to the kite.Configuration class:

configuration = kite.Configuration(
    divisions=[nx, ny],
    length=[lx, ly],
    boundaries=["periodic", "periodic"],
    is_complex=False,
    precision=1,
    spectrum_range=[-10, 10]
)