29 integer md,sym(3,3),its,i,j
30 integer i11,i12,i13,i21,i22,i23,i31,i32,i33
31 real(8) s(3,3),g(3,3),sgs(3,3),sc(3,3)
32 real(8) c(3,3),v(3),t1
37 do i11=-1,1;
do i12=-1,1;
do i13=-1,1
38 do i21=-1,1;
do i22=-1,1;
do i23=-1,1
39 do i31=-1,1;
do i32=-1,1;
do i33=-1,1
40 sym(1,1)=i11; sym(1,2)=i12; sym(1,3)=i13
41 sym(2,1)=i21; sym(2,2)=i22; sym(2,3)=i23
42 sym(3,1)=i31; sym(3,2)=i32; sym(3,3)=i33
46 if (abs(md) /= 1)
goto 10
48 s(1:3,1:3)=dble(sym(1:3,1:3))
53 if (abs(sgs(i,j)-g(i,j)) >
epslat)
goto 10
90 write(*,
'("Error(findsymlat): more than 48 symmetries found")')
91 write(*,
'(" (lattice vectors may be linearly dependent)")')
99 end do; end do; end do
100 end do; end do; end do
101 end do; end do; end do
102 if (nsymlat == 0)
then 104 write(*,
'("Error(findsymlat): no symmetries found")')
110 if ((symlat(1,1,i) == 1).and.(symlat(1,2,i) == 0).and.(symlat(1,3,i) == 0) &
111 .and.(symlat(2,1,i) == 0).and.(symlat(2,2,i) == 1).and.(symlat(2,3,i) == 0) &
112 .and.(symlat(3,1,i) == 0).and.(symlat(3,2,i) == 0).and.(symlat(3,3,i) == 1)) &
114 sym(1:3,1:3)=symlat(1:3,1:3,1)
115 symlat(1:3,1:3,1)=symlat(1:3,1:3,i)
116 symlat(1:3,1:3,i)=sym(1:3,1:3)
118 symlatd(1)=symlatd(i)
125 call i3minv(symlat(:,:,i),sym)
127 if (all(symlat(1:3,1:3,j) == sym(1:3,1:3)))
then 133 write(*,
'("Error(findsymlat): inverse operation not found")')
134 write(*,
'(" for lattice symmetry ",I0)') i
141 s(1:3,1:3)=dble(symlat(1:3,1:3,i))
143 call r3mm(avec,c,symlatc(:,:,i))
148 pure integer function i3mdet(a)
151 integer,
intent(in) :: a(3,3)
153 i3mdet=a(1,1)*(a(2,2)*a(3,3)-a(3,2)*a(2,3)) &
154 +a(2,1)*(a(3,2)*a(1,3)-a(1,2)*a(3,3)) &
155 +a(3,1)*(a(1,2)*a(2,3)-a(2,2)*a(1,3))
158 pure subroutine i3minv(a,b)
161 integer,
intent(in) :: a(3,3)
162 integer,
intent(out) :: b(3,3)
166 b(1,1)=md*(a(2,2)*a(3,3)-a(2,3)*a(3,2))
167 b(2,1)=md*(a(2,3)*a(3,1)-a(2,1)*a(3,3))
168 b(3,1)=md*(a(2,1)*a(3,2)-a(2,2)*a(3,1))
169 b(1,2)=md*(a(1,3)*a(3,2)-a(1,2)*a(3,3))
170 b(2,2)=md*(a(1,1)*a(3,3)-a(1,3)*a(3,1))
171 b(3,2)=md*(a(1,2)*a(3,1)-a(1,1)*a(3,2))
172 b(1,3)=md*(a(1,2)*a(2,3)-a(1,3)*a(2,2))
173 b(2,3)=md*(a(1,3)*a(2,1)-a(1,1)*a(2,3))
174 b(3,3)=md*(a(1,1)*a(2,2)-a(1,2)*a(2,1))
pure subroutine r3mtv(a, x, y)
real(8), dimension(3) efieldl
pure subroutine i3minv(a, b)
real(8), dimension(3, 3) ainv
integer, dimension(3, 3, 48) symlat
real(8), dimension(3) vqlss
pure subroutine r3mtm(a, b, c)
real(8), dimension(3, 3) avec
integer, dimension(48) symlatd
real(8), dimension(:,:), allocatable afieldt
pure subroutine r3mv(a, x, y)
pure subroutine r3mm(a, b, c)
pure integer function i3mdet(a)
real(8), dimension(3) afieldl