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

About the k-point used in the document example. #20

Open
hongyi-zhao opened this issue Aug 5, 2022 · 7 comments
Open

About the k-point used in the document example. #20

hongyi-zhao opened this issue Aug 5, 2022 · 7 comments

Comments

@hongyi-zhao
Copy link

Here gives the following example:

from spgrep import get_spacegroup_irreps
from spgrep.representation import get_character

# Rutile structure (https://materialsproject.org/materials/mp-2657/)
# P4_2/mnm (No. 136)
a = 4.603
c = 2.969
x_4f = 0.3046
lattice = [
    [a, 0, 0],
    [0, a, 0],
    [0, 0, c],
]
positions = [
    [0, 0, 0],  # Ti(2a)
    [0.5, 0.5, 0.5],  # Ti(2a)
    [x_4f, x_4f, 0],  # O(4f)
    [-x_4f, -x_4f, 0],  # O(4f)
    [-x_4f + 0.5, x_4f + 0.5, 0.5],  # O(4f)
    [x_4f + 0.5, -x_4f + 0.5, 0.5],  # O(4f)
]
numbers = [0, 0, 1, 1, 1, 1]

kpoint = [0.5, 0, 0]  # X point
irreps, rotations, translations, mapping_little_group = get_spacegroup_irreps(
    lattice, positions, numbers, kpoint
)

# Symmetry operations by spglib
assert len(rotations) == 16
assert len(translations) == 16

# At X point, the little co-group is isomorphic to mmm (order=8)
assert len(mapping_little_group) == 8
print(mapping_little_group)  # [ 0,  1,  4,  5,  8,  9, 12, 13]

# Two two-dimensional irreps
for irrep in irreps:
    print(get_character(irrep))
# [2.+0.j 0.+0.j 0.+0.j 2.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
# [2.+0.j 0.+0.j 0.+0.j -2.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]

In this example, the space group is P4_2/mnm (No. 136), and the selected k point is [0.5, 0, 0] (X point). I checked this information from BCS KVEC's convention represented here, as shown below:

image

image

As you can see, the two coordinates given above are not consistent. Any hints for this problem?

Regards,
Zhao

@lan496
Copy link
Member

lan496 commented Aug 6, 2022

Let $(\mathbf{R}, \mathbf{v})$ be a symmetry operation. Two k-points $\mathbf{k}$ and $\mathbf{R}^T\mathbf{k}$ are equivalent and irreps at these k-points are also unitary equivalent. For $P4_2/mnm$, (1/2, 0, 0) and (0, 1/2, 0) are transformed each other by four-fold screw operation. So the same irreps are returned whichever k-points to be chosen.

@hongyi-zhao
Copy link
Author

Thank you for your explanation. Below I give some supplementary validation and analysis.

Let $(\bf R,v)$ be a symmetry operation, two k-points $\bf k$ and $\bf R^T k$ are equivalent

This is guaranteed by the following theorem, as describe in the book Computer Algebra and Materials Physics
A Practical Guidebook to Group Theoretical Computations in Materials Science
:

image

and irreps at these k-points are also unitary equivalent.

Using SpaceGroupIrep package, I checked the irreps corresponding to the two k points discussed here, i.e., (1/2, 0, 0) and (0, 1/2, 0), as shown below:

image
image

But I didn't see their equivalence at first glance.

For $P4_2/mnm$, (1/2, 0, 0) and (0, 1/2, 0) are transformed to each other by four-fold screw operation.

According to the data here, I verified as follows in Mathematica:

image

image

@lan496
Copy link
Member

lan496 commented Aug 7, 2022

It is actually a non-trivial task to numerically find a transformation $U$ between two equivalent projective irreps $D_{1}$ and $D_{2}$ of group $G$ s.t. $U^{-1} D_{1}(g) U = D_{2}(g) \quad (\forall g \in G)$.
When $D_{1}$ and $D_{2}$ have the same factor systems, spgrep.representation.get_intertwiner can compute the transformation $U$. However, when comparing two different k-points, the factor systems are also different in general, and I don't know how to calculate $U$ in such a case. I will investigate on this. Thank you for stimulating this discussion!

BTW, the appropriate place to discuss your validation will be SpaceGroupIrep's issue page because these irreps are not same as those of spgrep.

@hongyi-zhao
Copy link
Author

hongyi-zhao commented Aug 7, 2022

It is actually a non-trivial task to numerically find a transformation $U$ between two equivalent projective irreps $D_1$ and $D_2$ of group $G$ s.t. $U^-1D_1(g)U=D_2(g) \quad (\forall g \in G).$

  1. With a simple Google search with the keywords "s.t. abbreviation math", it shows that s.t. means “such that” or “so that”.

  2. The above relationship described here between $D_1(g)$ and $D_2(g)$ is conjugate isomorphism.

When $D_1$ and $D_2$ have the same factor systems,

Here, does the term factor system refer to little co-group?

However, when comparing two different k-points, the factor systems are also different in general, and I don't know how to calculate $U$ in such a case.

I've initiated a similar discussion here, and the JordanDecomposition based solution suggested by Gianluca Gorni seems like a good way to go.

In any case, the qualified $U$ is not unique. This technology only needs to find one that meets the conjugate similarity relation.

BTW, the appropriate place to discuss your validation will be SpaceGroupIrep's issue page because these irreps are not same as those of spgrep.

The author of SpaceGroupIrep is a friend of mine, and we discussed this in private.

@lan496
Copy link
Member

lan496 commented Aug 7, 2022

Here, does the term factor system refer to little co-group?

I mean $\mu$ in spgrep's document.

and the JordanDecomposition based solution suggested by Gianluca Gorni seems like a good way to go.

The Jordan decomposition is notoriously known to vulnerable to numerical noise. So I'm not sure whether it works.

@hongyi-zhao
Copy link
Author

hongyi-zhao commented Aug 7, 2022

The Jordan decomposition is notoriously known to vulnerable to numerical noise. So I'm not sure whether it works.

Another approach is based on eigenvalue and Gaussian elimination, as represented by Hans Dolhaine in the above wolfram forum discussion:

(*Your matrices  *)
A = {{-I, 0, 0, 0}, {0, I, 0, 0}, {0, 0, 0, -I}, {0, 0, -I, 0}};
B = {{0, 1, 0, 0}, {-1, 0, 0, 0}, {0, 0, 0, I}, {0, 0, I, 0}};
(* Are they conjugates , do they have the same Eigenvalues (Thanks to Daniel)  ?*)
Eigenvalues[A]
Eigenvalues[B]
 (* The potential Matrix for the transformation *)
mm = Table[m[i, k], {i, 1, 4}, {k, 1, 4}];
mm // MatrixForm
(* Make an equation for your problem *)
e1 = # == 0 & /@ Flatten[A.mm - mm.B]
(* and transform it to an algebraic problem *)
e2 = CoefficientArrays[e1, Flatten[mm]]
(* get the according matrix *)
e3 = Normal[e2][[2]];
e3 // MatrixForm
(*check whether a solution is possible ( that means det = 0 ) *)
Det[e3]
(* There are 16 - rank of matrix = 8 solutions of the problem *)
MatrixRank[e3]
(*Find the solutions to the enhanced problem *)
vecs = NullSpace[e3]
(* Transform the solution vectors back to matrices *)
mats = Partition[#, 4] & /@ vecs
(* each fulfills the original problem, as it must be *)
Simplify[A.# - #.B] & /@ mats
(* but none is invertible  *)
Det[#] & /@ mats
(* so sum them up *)
mat = Total[mats]
Det[mat]
(* and *)
A.mat - mat.B

@hongyi-zhao
Copy link
Author

hongyi-zhao commented Aug 7, 2022

#20 (comment)
I mean $\mu$ in spgrep's document.

Projective representation is the method used in this package to obtain the small representation on the fly, i.e., the projective irreps of little co-group.

The BC book only gives the representation data of the defined k-point (table 3.6), which in principle can be consulted directly from the table in the book. However, the representations of other k-points in the same star are not given in the BC book, which, if required, need additional calculations, but SpaceGroupIrep gives all of these representations directly.

In the example discussed here, the standard definition of k point X is {0,1/2,0}, so BC book gives only a small representation corresponding to this k point, instead of the one at {1/2,0,0}. On the other hand, when you need to calculate the irreducible representation of a space group (that is, the induced representation of a small representation), the small representation of any k-point in a star is needed. Of course, if you only use small representations and don't need their induced representations, it's usually not too much of a problem to assume that {1/2,0,0} is the same as the small representations of {0,1/2,0}. However, there is no guarantee that there will be no problem at any time, for example, in the MOS2 single-layer system, the representation of the top of the valence band must have the time reversal symmetry in order to meet the requirements of system symmetry.

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