Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Symmetry-reduced or irreducible BZ #33

Open
ejmeitz opened this issue Oct 21, 2024 · 4 comments
Open

Symmetry-reduced or irreducible BZ #33

ejmeitz opened this issue Oct 21, 2024 · 4 comments

Comments

@ejmeitz
Copy link

ejmeitz commented Oct 21, 2024

How hard would it be to make a function that maps a point in the first BZ to its symmetrically identical point in the irreducible BZ? I am trying to integrate/sum over the first BZ and it would be nice to only have to go over the irreducible points and map things back out after the fact. Happy to help write code, but the symmetry operations are not something I understand amazingly well at this point.

@thchr
Copy link
Owner

thchr commented Oct 22, 2024

Hmm, I'm not completely sure, I admit.

By

"maps a point in the first BZ to its symmetrically identical point in the irreducible BZ",

I imagine you also mean that there is a hope if there is N points in the "full" BZ sampling set, that there would be N/|G| (with |G| denoting the order of the rotation group) unique points in the reduced set. If so, I think that is harder, since that puts some requirements on the initial sampling of the full BZ (just mapping a point to the irreducible BZ sector wouldn't necessarily imply that many points map to each other; they might simply map to close by points).

Probably the better thing to do is to first determine the irreducible BZ, and then try to sample that. I think that can be done by taking intersections of half-spaces and the original BZ. There's an implementation in SymmetryReduceBZ.jl. The key technical challenge is to find a good way to take intersections of the polyhedron returned constructed in Brillouin with a half-space; something like Polyhedra.jl probably makes this easy, but it's a big dependency.
They also have a mapto_ibz method which may be what you want as well.

@thchr
Copy link
Owner

thchr commented Oct 22, 2024

Actually, the intersection of a half-space and a convex polygon is not too involved. E.g., chatGPT gives a nice, clear summary of how to adapt Sutherland-Hodgman clipping to this when given the prompt below:

Are there any simple algorithms for computing the intersection of a half space and a convex polygon given in v-representation?

So, this could be implemented directly here. The "stages" required would be:

  1. A method that extract all 1D-line segments from a Cell.
  2. A method that computes the intersection of a 1D-line segment with a half-space (see chatGPT).
  3. Apply step 2 to output of step 1 for each half-space associated with a rotation. Apply this iteratively across all rotations in the space group. This gives a new v-representation of the resulting nested intersection.
  4. Use DirectQhull.ConvexHull to obtain the faces of this intersection, followed by convert_to_cell, reorient_normals!, and merge_coplanar! to tidy up the faces.

@ejmeitz
Copy link
Author

ejmeitz commented Oct 25, 2024

Yeah, sampling IBZ first is definitely a better idea. I will try this out. Thanks!

@ejmeitz ejmeitz closed this as completed Oct 25, 2024
@thchr
Copy link
Owner

thchr commented Oct 25, 2024

I'll keep this open as a reminder to one day implement a method to construct the symmetry-reduced or irreducible BZ.

@thchr thchr reopened this Oct 25, 2024
@thchr thchr changed the title Mapping IBZ Points to 1st BZ Symmetry-reduced or irreducible BZ Oct 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants