Line data Source code
1 : MODULE m_angles
2 :
3 : USE m_types_sym
4 : USE m_constants
5 :
6 : IMPLICIT NONE
7 :
8 : CONTAINS
9 :
10 : !Calculate the correct phase shifts for the rotation in spin-space
11 : !(needed for LDA+U and Green's functions with noco%l_mperp)
12 :
13 2 : SUBROUTINE angles(sym)
14 :
15 : TYPE(t_sym), INTENT(INOUT) :: sym
16 :
17 : INTEGER iop,d,t
18 :
19 6 : sym%phase = 0.0
20 :
21 6 : DO iop = 1, sym%nop
22 4 : d = det(sym%mrot(:,:,iop))
23 4 : t = (sym%mrot(1,1,iop)+sym%mrot(2,2,iop)+sym%mrot(3,3,iop)) * d
24 4 : IF(t.EQ.-1) sym%phase(iop) = 1.0
25 4 : IF(t.EQ.0) sym%phase(iop) = 2.0/3.0
26 4 : IF(t.EQ.1) sym%phase(iop) = 1.0/2.0
27 4 : IF(t.EQ.2) sym%phase(iop) = 1.0/3.0
28 4 : IF(t.EQ.3) sym%phase(iop) = 0.0
29 6 : sym%phase(iop) = d*sym%phase(iop)*pi_const
30 : ENDDO
31 :
32 2 : END SUBROUTINE
33 :
34 4 : INTEGER FUNCTION det(m)
35 : INTEGER m(:,:)
36 : det = m(1,1)*m(2,2)*m(3,3) + m(1,2)*m(2,3)*m(3,1) + &
37 : m(2,1)*m(3,2)*m(1,3) - m(1,3)*m(2,2)*m(3,1) - &
38 4 : m(2,3)*m(3,2)*m(1,1) - m(2,1)*m(1,2)*m(3,3)
39 4 : END FUNCTION det
40 :
41 :
42 : END MODULE m_angles
|