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