Given two basis vectors in the 2-dimensional momentum space b1, b2, I want to write a function that returns the 1st Brillouin zone:

BrillouinZone[b1_, b2_] := ...

which is defined as the region made of points that are closer to the origin of the reciprocal lattice than they are to any other reciprocal lattice points (see Wikipedia). For example, the reciprocal basis vectors of the square lattice are

b1 = {2 Pi, 0};
b2 = {0, 2 Pi};

The function BrillouinZone should return a region that is the same as the square

Polygon[{Pi, Pi}, {-Pi, Pi}, {-Pi, -Pi}, {Pi, -Pi}]

How to achieve this (efficiently) in Mathematica?


1 Answer 1

BrillouinZone[b1_, b2_] := 
    VoronoiMesh[Catenate@Table[i b1 + j b2, {i, -1, 1}, {j, -1, 1}]], 2], 
   RegionMember[#, {0, 0}] &]]];

b1 = {2 Pi, 0};
b2 = {0, 2 Pi};
bz = BrillouinZone[b1, b2]

Show[Graphics[{FaceForm[None], EdgeForm[Black], bz}], Axes -> True]

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.