od_chirot.f 1.98 KB
Newer Older
1 2 3 4 5 6
!--------------------------------------------------------------------------------
! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
! This file is part of FLEUR and available as free software under the conditions
! of the MIT license as expressed in the LICENSE file in more detail.
!--------------------------------------------------------------------------------

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
      MODULE m_od_chirot
      CONTAINS
      SUBROUTINE od_chirot(
     >                  odi,ods,bmat,k,
     <                  kr,phas)

****************************************************************
*     perform symmetry operations of the cylindrical group 
*     of symmetries on the reciprocal vector k, given in internal
*     coordinates
*                                       Y.Mokrousov
****************************************************************

      USE m_types, ONLY : od_inp, od_sym

      IMPLICIT NONE
!     ..
      TYPE (od_inp), INTENT (IN) :: odi
      TYPE (od_sym), INTENT (IN) :: ods
      INTEGER, INTENT (IN)  :: k(3)
      REAL,    INTENT (IN)  :: bmat(3,3)
      REAL,    INTENT (OUT) :: kr(3,ods%nop)
      COMPLEX, INTENT (OUT) :: phas(ods%nop)
!     ..
!     .. Local Scalars ..
      INTEGER n,inv
!     ..
!     ..

      DO n = 1,ods%nop
         kr(1,n) = k(1)*ods%mrot(1,1,n) +
     +             k(2)*ods%mrot(2,1,n) +
     +             k(3)*ods%mrot(3,1,n)
         kr(2,n) = k(1)*ods%mrot(1,2,n) + 
     +             k(2)*ods%mrot(2,2,n) +
     +             k(3)*ods%mrot(3,2,n)
         kr(3,n) = k(1)*ods%mrot(1,3,n) + 
     +             k(2)*ods%mrot(2,3,n) +
     +             k(3)*ods%mrot(3,3,n)
      ENDDO

      IF (odi%chi.NE.1) THEN
         DO n = 1,ods%nop
            inv = ods%invtab(n)
            phas(n) = exp(cmplx(0.,bmat(3,3)*kr(3,n)*ods%tau(3,inv)))
         END DO
      ELSE
         DO n = 1,ods%nop
            phas(n) = cmplx(1.,0.)
         END DO
      END IF
      
      RETURN
      END SUBROUTINE od_chirot
      END MODULE m_od_chirot