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