quantum-espresso/PP/cubicspinsym.f90

157 lines
8.2 KiB
Fortran

!
! Copyright (C) 2008 Quantum ESPRESSO group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!-----------------------------------------------------------------------
SUBROUTINE cubicspinsym(d_spin)
!-----------------------------------------------------------------------
!
! Provides symmetry operations in the spin space for all cubic and
! lower-symmetry (excepted Hexagonal and Trigonal) bravais lattices
!
USE kinds
USE symm_base, ONLY : nsym, sname
!
IMPLICIT NONE
!
! first the input/output variables
!
COMPLEX(DP) :: d_spin(2,2,48)
! output: the symmetries of the system in the j=1/2 subspace
!
! here the local parameters
!
REAL(DP), parameter :: cost1=0.707106781186547d0, cost2=0.5d0, &
mcost1=-0.707106781186547d0, mcost2=-0.5d0
!
! and the local variables
!
COMPLEX(DP) :: id_spin(2,2,48)
!
! symmetry matrices in the j=1/2 subspace
!
INTEGER :: i,j
!
! counter over the rotations
! counter over the rotations
!
CHARACTER :: isname (48) * 45
!
! full name of the rotational part of each symmetry operation
!
data isname/&
& 'identity ',&
& '180 deg rotation - cart. axis [0,0,1] ',&
& '180 deg rotation - cart. axis [0,1,0] ',&
& '180 deg rotation - cart. axis [1,0,0] ',&
& '180 deg rotation - cart. axis [1,1,0] ',&
& '180 deg rotation - cart. axis [1,-1,0] ',&
& ' 90 deg rotation - cart. axis [0,0,-1] ',&
& ' 90 deg rotation - cart. axis [0,0,1] ',&
& '180 deg rotation - cart. axis [1,0,1] ',&
& '180 deg rotation - cart. axis [-1,0,1] ',&
& ' 90 deg rotation - cart. axis [0,1,0] ',&
& ' 90 deg rotation - cart. axis [0,-1,0] ',&
& '180 deg rotation - cart. axis [0,1,1] ',&
& '180 deg rotation - cart. axis [0,1,-1] ',&
& ' 90 deg rotation - cart. axis [-1,0,0] ',&
& ' 90 deg rotation - cart. axis [1,0,0] ',&
& '120 deg rotation - cart. axis [-1,-1,-1] ',&
& '120 deg rotation - cart. axis [-1,1,1] ',&
& '120 deg rotation - cart. axis [1,1,-1] ',&
& '120 deg rotation - cart. axis [1,-1,1] ',&
& '120 deg rotation - cart. axis [1,1,1] ',&
& '120 deg rotation - cart. axis [-1,1,-1] ',&
& '120 deg rotation - cart. axis [1,-1,-1] ',&
& '120 deg rotation - cart. axis [-1,-1,1] ',&
& 'inversion ',&
& 'inv. 180 deg rotation - cart. axis [0,0,1] ',&
& 'inv. 180 deg rotation - cart. axis [0,1,0] ',&
& 'inv. 180 deg rotation - cart. axis [1,0,0] ',&
& 'inv. 180 deg rotation - cart. axis [1,1,0] ',&
& 'inv. 180 deg rotation - cart. axis [1,-1,0] ',&
& 'inv. 90 deg rotation - cart. axis [0,0,-1] ',&
& 'inv. 90 deg rotation - cart. axis [0,0,1] ',&
& 'inv. 180 deg rotation - cart. axis [1,0,1] ',&
& 'inv. 180 deg rotation - cart. axis [-1,0,1] ',&
& 'inv. 90 deg rotation - cart. axis [0,1,0] ',&
& 'inv. 90 deg rotation - cart. axis [0,-1,0] ',&
& 'inv. 180 deg rotation - cart. axis [0,1,1] ',&
& 'inv. 180 deg rotation - cart. axis [0,1,-1] ',&
& 'inv. 90 deg rotation - cart. axis [-1,0,0] ',&
& 'inv. 90 deg rotation - cart. axis [1,0,0] ',&
& 'inv. 120 deg rotation - cart. axis [-1,-1,-1]',&
& 'inv. 120 deg rotation - cart. axis [-1,1,1] ',&
& 'inv. 120 deg rotation - cart. axis [1,1,-1]' ,&
& 'inv. 120 deg rotation - cart. axis [1,-1,1] ',&
& 'inv. 120 deg rotation - cart. axis [1,1,1] ',&
& 'inv. 120 deg rotation - cart. axis [-1,1,-1] ',&
& 'inv. 120 deg rotation - cart. axis [1,-1,-1]',&
& 'inv. 120 deg rotation - cart. axis [-1,-1,1] ' /
data id_spin / (-1.d0,0.d0), (0.d0,0.d0), (0.d0,0.d0), (-1.d0,0.d0), &
(0.d0,-1.d0), (0.d0,0.d0), (0.d0,0.d0), (0.d0,1.d0), &
(0.d0,0.d0), (1.d0,0.d0), (-1.d0,0.d0), (0.d0,0.d0), &
(0.d0,0.d0), (0.d0,-1.d0), (0.d0,-1.d0), (0.d0,0.d0), &
(0.d0,0.d0), (mcost1,mcost1), (cost1,mcost1),(0.d0,0.d0), &
(0.d0,0.d0), (cost1,mcost1), (mcost1,mcost1), (0.d0,0.d0), &
(cost1,mcost1), (0.d0,0.d0), (0.d0,0.d0), (cost1,cost1), &
(mcost1,mcost1),(0.d0,0.d0), (0.d0,0.d0), (mcost1,cost1), &
(0.d0,mcost1), (0.d0,mcost1), (0.d0,mcost1), (0.d0,cost1), &
(0.d0,mcost1), (0.d0,cost1), (0.d0,cost1), (0.d0,cost1), &
(mcost1,0.d0), (mcost1,0.d0), (cost1,0.d0), (mcost1,0.d0), &
(cost1,0.d0), (mcost1,0.d0), (cost1,0.d0), (cost1,0.d0), &
(0.d0,mcost1), (mcost1,0.d0), (cost1,0.d0), (0.d0,cost1), &
(0.d0,cost1), (mcost1,0.d0), (cost1,0.d0), (0.d0,mcost1), &
(mcost1,0.d0), (0.d0,cost1), (0.d0,cost1), (mcost1,0.d0), &
(mcost1,0.d0), (0.d0,mcost1), (0.d0,mcost1), (mcost1,0.d0), &
(cost2,mcost2),(mcost2,mcost2),(cost2,mcost2),(cost2,cost2), &
(mcost2,mcost2),(mcost2,cost2),(cost2,cost2),(mcost2,cost2), &
(mcost2,cost2),(mcost2,mcost2),(cost2,mcost2),(mcost2,mcost2),&
(mcost2,mcost2),(cost2,mcost2),(mcost2,mcost2),(mcost2,cost2),&
(mcost2,mcost2),(mcost2,mcost2),(cost2,mcost2),(mcost2,cost2),&
(mcost2,cost2),(mcost2,cost2),(cost2,cost2),(mcost2,mcost2),&
(cost2,mcost2),(mcost2,cost2),(cost2,cost2),(cost2,cost2), &
(mcost2,mcost2),(cost2,cost2),(mcost2,cost2),(mcost2,cost2), &
(-1.d0,0.d0), (0.d0,0.d0), (0.d0,0.d0), (-1.d0,0.d0), &
(0.d0,-1.d0), (0.d0,0.d0), (0.d0,0.d0), (0.d0,1.d0), &
(0.d0,0.d0), (1.d0,0.d0), (-1.d0,0.d0), (0.d0,0.d0), &
(0.d0,0.d0), (0.d0,-1.d0), (0.d0,-1.d0), (0.d0,0.d0), &
(0.d0,0.d0), (mcost1,mcost1), (cost1,mcost1),(0.d0,0.d0), &
(0.d0,0.d0), (cost1,mcost1), (mcost1,mcost1), (0.d0,0.d0), &
(cost1,mcost1), (0.d0,0.d0), (0.d0,0.d0), (cost1,cost1), &
(mcost1,mcost1),(0.d0,0.d0), (0.d0,0.d0), (mcost1,cost1), &
(0.d0,mcost1), (0.d0,mcost1), (0.d0,mcost1), (0.d0,cost1), &
(0.d0,mcost1), (0.d0,cost1), (0.d0,cost1), (0.d0,cost1), &
(mcost1,0.d0), (mcost1,0.d0), (cost1,0.d0), (mcost1,0.d0), &
(cost1,0.d0), (mcost1,0.d0), (cost1,0.d0), (cost1,0.d0), &
(0.d0,mcost1), (mcost1,0.d0), (cost1,0.d0), (0.d0,cost1), &
(0.d0,cost1), (mcost1,0.d0), (cost1,0.d0), (0.d0,mcost1), &
(mcost1,0.d0), (0.d0,cost1), (0.d0,cost1), (mcost1,0.d0), &
(mcost1,0.d0), (0.d0,mcost1), (0.d0,mcost1), (mcost1,0.d0), &
(cost2,mcost2),(mcost2,mcost2),(cost2,mcost2),(cost2,cost2), &
(mcost2,mcost2),(mcost2,cost2),(cost2,cost2),(mcost2,cost2), &
(mcost2,cost2),(mcost2,mcost2),(cost2,mcost2),(mcost2,mcost2),&
(mcost2,mcost2),(cost2,mcost2),(mcost2,mcost2),(mcost2,cost2),&
(mcost2,mcost2),(mcost2,mcost2),(cost2,mcost2),(mcost2,cost2),&
(mcost2,cost2),(mcost2,cost2),(cost2,cost2),(mcost2,mcost2), &
(cost2,mcost2),(mcost2,cost2),(cost2,cost2),(cost2,cost2), &
(mcost2,mcost2),(cost2,cost2), (mcost2,cost2), (mcost2,cost2) /
d_spin = (0.d0,0.d0)
DO i=1,nsym
DO j=1,48
IF (sname(i)==isname(j)) THEN
d_spin(1,1,i)=id_spin(1,1,j)
d_spin(2,1,i)=id_spin(2,1,j)
d_spin(1,2,i)=id_spin(1,2,j)
d_spin(2,2,i)=id_spin(2,2,j)
ENDIF
ENDDO
ENDDO
RETURN
!
END SUBROUTINE cubicspinsym