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

Copyright(c) Matthew Daniels, 2014
LicenseNew BSD
Maintainerdanielsmw@gmail.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

TBit.Toolbox

Contents

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

chern :: BandIndex -> Hamiltonian -> Parameterized Chern Source

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.

chernBand :: BandIndex -> Hamiltonian -> Parameterized Chern Source

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.

bandCurvature :: BandIndex -> Hamiltonian -> Wavevector -> Parameterized Curvature Source

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.

occupiedCurvature :: BandIndex -> Hamiltonian -> Wavevector -> Parameterized Curvature Source

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

orbMag :: Filling -> Hamiltonian -> Parameterized Magnetization Source

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

bandIntrinsicOM :: BandIndex -> Hamiltonian -> Parameterized Magnetization Source

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

Electric properties

Energetic properties

eigenstates :: Hamiltonian -> Wavevector -> Parameterized [Eigenstate] Source

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

eigenenergies :: Hamiltonian -> Wavevector -> Parameterized [Energy] Source

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.

neighborTerm :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix) Source

Add nearest-neighbor hopping to a lattice model.

onsiteTerm :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix) Source

Add an onsite energy term to a lattice model.

parityStaggeredTerm :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix) Source

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

localMoments :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix) Source

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

rashbaZ :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix) Source

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

Plotting utilities

bzPlot :: (Parameterized Hamiltonian, Parameters) -> (Hamiltonian -> Wavevector -> Parameterized Double) -> String Source

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.

bandPlot :: (Parameterized Hamiltonian, Parameters) -> [Wavevector] -> String Source

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.

kPath :: [Wavevector] -> Parameterized [Wavevector] Source

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.