Commit d78dba2b authored by Gregor Michalicek's avatar Gregor Michalicek

Fixed erroneous generation of additional identity symmetry matrices

Time reversal symmetry is exploited to increase the number of symmetry
operations used for the generation of the Brillouin zone iff no inversion
symmetry is present. So far the inverse of each symmetry operation was
added, ignoring translation vectors. However, this could lead to further
identity symmetry operations which caused problems as this matrix has
to be excluded for several code parts.

The fix was developed in collaboration with D. Wortmann.
parent edf3dddd
......@@ -79,7 +79,7 @@
REAL kzero(3) ! shifting vector to bring one k-point to or
! away from (0,0,0) (for even/odd nmop)
INTEGER i,j,k,l,idiv,mkpt
INTEGER i,j,k,l,idiv,mkpt,addSym
INTEGER iofile,iokpt,kpri,ktest,kmidtet
INTEGER idivis(3)
LOGICAL random,trias
......@@ -229,9 +229,20 @@
IF ( (input%film.AND.(.not.sym%invs2)).OR.&
& ((.not.input%film).AND.(.not.sym%invs)) ) THEN
ccr(:,:,sym%nsym+1:2*sym%nsym ) = -ccr(:,:,1:sym%nsym)
rlsymr(:,:,sym%nsym+1:2*sym%nsym ) = -rlsymr(:,:,1:sym%nsym)
sym%nsym = 2 * sym%nsym
addSym = 0
! Note: We have to add the negative of each symmetry operation
! to exploit time reversal symmetry. However, if the new
! symmetry operation is the identity matrix it is excluded.
! This is the case iff it is (-Id) + a translation vector.
DO i = 1, sym%nsym
! This test assumes that ccr(:,:,1) is the identity matrix.
IF(.NOT.ALL(ABS(ccr(:,:,1)+ccr(:,:,i)).LT.10e-10) ) THEN
ccr(:,:,sym%nsym+addSym+1 ) = -ccr(:,:,i)
rlsymr(:,:,sym%nsym+addSym+1 ) = -rlsymr(:,:,i)
addSym = addSym + 1
END IF
END DO
sym%nsym = sym%nsym + addSym
ENDIF
ENDIF
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment