BrillouinZoneMeshes
Documentation for BrillouinZoneMeshes.
This package provides general-purpose multi-dimensional meshes for numerical representation of continuous functions and specialized meshes for functions on Brillouin Zones.
Getting started
Setup with:
DIM = 2;
# square lattice
lattice = Matrix([1.0 0; 0 1]');
# create Brillouin zone
br = BZMeshes.Cell(lattice=lattice);
# uniform mesh
umesh = BZMeshes.UniformBZMesh(cell=br, size=(4, 4));
# symmetry reduce map
mm = MeshMaps.MeshMap(umesh);
# reduced mesh
rmesh = ReducedBZMesh(umesh, mm);
and here are some examples of usage:
julia> using BrillouinZoneMeshes; DIM = 2; lattice = Matrix([1.0 0; 0 1]'); br = BZMeshes.Cell(lattice=lattice); umesh = BZMeshes.UniformBZMesh(cell=br, size=(4, 4)); mm = MeshMaps.MeshMap(umesh); rmesh = ReducedBZMesh(umesh, mm);
julia> length(umesh), length(rmesh)
(16, 3)
julia> AbstractMeshes.locate(rmesh, [1,1])
3
julia> rmesh[3]
2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
0.7853981633974483
0.7853981633974483
julia> AbstractMeshes.volume(rmesh) / 4π^2
1.0
julia> data = ones(3)
3-element Vector{Float64}:
1.0
1.0
1.0
julia> AbstractMeshes.integrate(data, rmesh)
39.47841760435743
julia> AbstractMeshes.interp(data, rmesh, [0.3,-0.2])
1.0
General
Various mesh grids for different purposes are defined as concrete types derived from AbstractMeshes.AbstractMesh
. All of them are supposed to behave as AbstractArray
with elements being SVector
representing the mesh points in Cartesian coordinates.
In addition to the interface of AbstractMeshes.AbstractMesh
, four useful methods are defined: locate
, volume
, interp
, and integrate
.
locate(mesh, x)
finds the mesh point nearest to xvolume(mesh, i)
gives the volume represented by mesh pointmesh[i]
interp(data, mesh, x)
gives the interpolation ofdata
onmesh
at pointx
integrate(data, mesh)
compute integration ofdata
onmesh
If it is known that some of the mesh points are guaranteed to have the same data value, it's possible to define a MeshMap
to reveal this fact and create a ReducedBZMesh
to save storage space.
Brillouin zone
The information of Brillouin zone is stored in Cells.Cell
. Including lattice vector, reciprocal lattice vector and their inverse; volume of unit cell and reciprocal unit cell; G vectors for extended Brillouin zone and symmetries.
Uniform Meshes
Uniform meshes are defined as uniformly distributed meshes on a parallellogram area described by an origin and a set of lattice vectors. The simplest one is BaseMesh.UMesh
, while BZMeshes.UniformBZMesh
containes additional information about the Brillouin zone stored in its cell
field.
Uniform meshes are conventionally used in various ab initio calculations. In this package various frequently used meshes, such as Gamma-centered and Monkhorst-Pack meshes, could be generated via BZMeshes.UniformBZMesh
with different parameters. The default parameter of the constructor of BZMeshes.UniformBZMesh
generates Gamma-centered mesh, while two constructors for M-P mesh, Monkhorst_Pack
and DFTK_Monkhorst_Pack
, follow conventions from VASP and DFTK respectively.