TBit-0.4.2.3: Utilities for condensed matter physics tight binding calculations.

Copyright (c) Matthew Daniels, 2014 New BSD danielsmw@gmail.com experimental None Haskell98

TBit.Toolbox

Description

This module re-exports several useful functions so that we don't need to import a bunch of libraries at once into a script we'll frequently be switching the output from.

Synopsis

# Topological calculations

Calculate the Chern number of the first n occupied bands by using a grid of closed loops and calculating many Berry phases using the discretized formula. This function is guaranteed to return an integer result by rounding the actual calculation. It tries to determine if the Chern number is undefined due to a degeneracy, and if it is then it throws an error via the `ExceptT` monad transformer.

Calculate the Chern number of the nth band (indexed from 0) by integrating the Berry curvature over the Brillouin zone. The `BandIndex` parameter is passed directly to `bandCurvature`, and should use the same conventions for specifying the band.

The output is appropriately normalized by 1/2π. The integration is carried out using the TanhSinh quadrature method via `integrate`.

Calculate the Berry curvature of a single band, which is to be given indexed from zero (i.e. to calculate the lowest band, pass in 0 for the `BandIndex`. Uses the five-point stencil method for differentiation.

Calculate the total Berry curvature of a the occupied bands, which are specified by passing in the number of filled bands as the first argument. For example, to find the curvature due to occupied bands of a 4 band system at half-filling, pass in 2 for the `BandIndex`. Uses the five-point stencil method for differentiation.

# Orbital magnetization functions

Returns the total orbital magnetization due to filling the first n bands.

Sums `bandIntrinsicOM` over the first n bands.

Returns the intrinsic orbital magnetization of the nth band, namely the integral of _m_(k) from (Xiao et al., 2005).

# Energetic properties

Returns a list of eigenvectors sorted by eigenvalue. The lowest energy state is the first element of the returned list.

Returns a list of eigenvalues, sorted in ascending order.

# Some basic Hamiltonian tools

toMatrix :: Gr (Matrix (Complex Double)) (Matrix (Complex Double)) -> Matrix (Complex Double) Source

Send a tight-binding graph model to the corresponding Hamiltonian matrix.

Add nearest-neighbor hopping to a lattice model.

Add an onsite energy term to a lattice model.

Add an staggered onsite term to a lattice model. Works based on the integer parity of graph nodes, making it model-detail-dependent.

Produces a representation of local magnetic moments given by site-wise `VectorSite` data. Fails clumsily if applied to Scalar sites.

Produces a Rashba spin-orbit coupling term for an E-field applied along the z direction.

# Plotting utilities

Given a hamiltonian and a set of parameters, plot a real-valued function over the Brillouin zone. For a Berry curvature plot, e.g.,

`bzPlot (kagomeAF, defaultParams) (bandCurvature 0)`

The output string is suitable for gnuplot, unless that string is reporting an error from the calculation.

paramPlot :: (Parameterized Hamiltonian, Parameters) -> (Hamiltonian -> Parameterized Double) -> (String, [Double]) -> String Source

Given a hamiltonian and a set of parameters, plot a real-valued function over some range of a parameter. For a Chern number plot over the hopping parameter, e.g.,

`paramPlot (kagomeAF, defaultParams) (chern 1) ("t", [1.0, 1.1 .. 5.0])`

The output string is suitable for gnuplot, unless that string is reporting an error from the calculation.

Given a hamiltonian and a set of parameters, plot the bands over a path anchored by the provided wavevectors. For instance,

```gamma  = vector [0.0 ,  0.0]
point1 = vector [0.5 ,  1.0]
point2 = vector [0.5 , -1.0]
bandPlot (kagomeAF, defaultParams) [gamma, point1, point2, gamma]```

The output string is suitable for gnuplot, unless that string is reporting an error from the calculation.

Given a list of points in k-space, return a list of points that interpolates affine paths between them, in turn; a typical usage case might be

`kPath [gammaPoint, kPoint, mPoint, gammaPoint]`

which is used in the `bandPlot` function. The spacing between points on the interpolated path is determined by the `meshingData` parameter.