29integer md,sym(3,3),its,i,j
30integer i11,i12,i13,i21,i22,i23,i31,i32,i33
31real(8) s(3,3),g(3,3),sgs(3,3),sc(3,3)
37do i11=-1,1;
do i12=-1,1;
do i13=-1,1
38do i21=-1,1;
do i22=-1,1;
do i23=-1,1
39do 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)")')
100end do;
end do;
end do
101end do;
end do;
end do
102if (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))
156integer,
intent(in) :: a(3,3)
158i3mdet=a(1,1)*(a(2,2)*a(3,3)-a(3,2)*a(2,3)) &
159 +a(2,1)*(a(3,2)*a(1,3)-a(1,2)*a(3,3)) &
160 +a(3,1)*(a(1,2)*a(2,3)-a(2,2)*a(1,3))
real(8), dimension(3, 3) avec
real(8), dimension(3) efieldl
integer, dimension(48) symlatd
real(8), dimension(3, 3) ainv
real(8), dimension(3) afieldl
real(8), dimension(3) vqlss
integer, dimension(3, 3, 48) symlat