Safe Haskell | None |
---|---|

Language | Haskell98 |

- meshBZ :: Parameterized (Grid Wavevector)
- meshBigBZ :: Parameterized (Grid Wavevector)
- bzIntegral :: (Wavevector -> Parameterized Double) -> Parameterized Double
- bzIntegral' :: (Wavevector -> Parameterized Double) -> Parameterized (Double, Double)
- bzIntegral'' :: (Wavevector -> Parameterized Double) -> Parameterized Double
- kPath :: [Wavevector] -> Parameterized [Wavevector]

# Documentation

meshBZ :: Parameterized (Grid Wavevector) Source

Returns a mesh of points within the *n*-parallelepiped subtended by the
reciprocal lattice vectors. Covers the entire brillouin zone, though not
in the shape you might expect, and not in a way that's pretty for graphing.

meshBigBZ :: Parameterized (Grid Wavevector) Source

As `meshBZ`

, but with parallelepipeds extending in each quadrant, octant...
*n*-ant of the reciprocal lattice basis. Should cover more than the entire
first Brillouin zone.

bzIntegral :: (Wavevector -> Parameterized Double) -> Parameterized Double Source

Integrates using a simple grid-sum.

bzIntegral' :: (Wavevector -> Parameterized Double) -> Parameterized (Double, Double) Source

As `bzIntegral`

, but also gives the absolute error as the second value
in the returned tuple.

bzIntegral'' :: (Wavevector -> Parameterized Double) -> Parameterized Double Source

Given a function defined on the Brillouin zone, evaluate it everywhere
by doing nested single integrations and using Takahashi and Mori's
Tanh-Sinh quadrature method. Should be robust against singularities
and the like, and is *properly* set up for massive parallelization (via
EdwardKmett's integration library, certainly not mine). Watch Dirac run
this thing. Only implemented in 2D.

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.