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
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(:,:)=symlat(:,:,1)
115 symlat(:,:,1)=symlat(:,:,i)
116 symlat(:,:,i)=sym(:,:)
118 symlatd(1)=symlatd(i)
125 call i3minv(symlat(:,:,i),sym)
127 if ((symlat(1,1,j) == sym(1,1)).and.(symlat(1,2,j) == sym(1,2)).and. &
128 (symlat(1,3,j) == sym(1,3)).and.(symlat(2,1,j) == sym(2,1)).and. &
129 (symlat(2,2,j) == sym(2,2)).and.(symlat(2,3,j) == sym(2,3)).and. &
130 (symlat(3,1,j) == sym(3,1)).and.(symlat(3,2,j) == sym(3,2)).and. &
131 (symlat(3,3,j) == sym(3,3)))
then 137 write(*,
'("Error(findsymlat): inverse operation not found")')
138 write(*,
'(" for lattice symmetry ",I2)') i
145 s(:,:)=dble(symlat(:,:,i))
147 call r3mm(avec,c,symlatc(:,:,i))
152 pure integer function i3mdet(a)
155 integer,
intent(in) :: a(3,3)
157 i3mdet=a(1,1)*(a(2,2)*a(3,3)-a(3,2)*a(2,3)) &
158 +a(2,1)*(a(3,2)*a(1,3)-a(1,2)*a(3,3)) &
159 +a(3,1)*(a(1,2)*a(2,3)-a(2,2)*a(1,3))
pure subroutine r3mtv(a, x, y)
real(8), dimension(3) efieldl
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