Copyright | (c) Matthew Daniels, 2014 |
---|---|

License | New BSD |

Maintainer | danielsmw@gmail.com |

Stability | experimental |

Safe Haskell | None |

Language | Haskell98 |

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.

- chern :: BandIndex -> Hamiltonian -> Parameterized Chern
- chernBand :: BandIndex -> Hamiltonian -> Parameterized Chern
- bandCurvature :: BandIndex -> Hamiltonian -> Wavevector -> Parameterized Curvature
- occupiedCurvature :: BandIndex -> Hamiltonian -> Wavevector -> Parameterized Curvature
- orbMag :: Filling -> Hamiltonian -> Parameterized Magnetization
- intrinsicOM :: Filling -> Hamiltonian -> Parameterized Magnetization
- bandIntrinsicOM :: BandIndex -> Hamiltonian -> Parameterized Magnetization
- nernstConductivity :: Hamiltonian -> Parameterized Double
- eigenstates :: Hamiltonian -> Wavevector -> Parameterized [Eigenstate]
- eigenenergies :: Hamiltonian -> Wavevector -> Parameterized [Energy]
- squareLattice :: CellGraph
- hexLattice :: CellGraph
- kagomeLattice :: CellGraph
- kagomeRibbon :: Int -> CellGraph
- ring :: Int -> CellGraph
- toMatrix :: Gr (Matrix (Complex Double)) (Matrix (Complex Double)) -> Matrix (Complex Double)
- neighborTerm :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix)
- onsiteTerm :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix)
- parityStaggeredTerm :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix)
- localMoments :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix)
- rashbaZ :: String -> CellGraph -> Parameterized (Wavevector -> AdjMatrix)
- bzPlot :: (Parameterized Hamiltonian, Parameters) -> (Hamiltonian -> Wavevector -> Parameterized Double) -> String
- paramPlot :: (Parameterized Hamiltonian, Parameters) -> (Hamiltonian -> Parameterized Double) -> (String, [Double]) -> String
- bandPlot :: (Parameterized Hamiltonian, Parameters) -> [Wavevector] -> String
- kPath :: [Wavevector] -> Parameterized [Wavevector]

# 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.

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

Sums `bandIntrinsicOM`

over the first n bands.

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

Returns the intrinsic orbital magnetization of the n*th* 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

kagomeRibbon :: Int -> CellGraph Source

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.