! !----------------------------------------------------------------------- subroutine star_q3 ( xq, at, bg, nsym, s, invs, nq, sxq, isq, imq) !----------------------------------------------------------------------- ! ! generate the star of q vectors that are equivalent to the input one ! and return their list along with the symmetry ops. needed to obtain ! them. symmetry arrays (nsym, s) (in input) are those ! appropriate to the crystal symmetry (not to the small-qroup of q). ! #include "f_defs.h" USE io_global, ONLY : stdout USE kinds, only : DP implicit none ! ! input variables ! real(kind=DP) :: xq (3), at (3, 3), bg (3, 3) ! q vector ! direct lattice vectors ! reciprocal lattice vectors integer :: nsym, s (3, 3, 48), invs (48), nq, isq (48), imq ! number of symmetry operations ! the symmetry operations ! list of inverse operation indices ! degeneracy of the star of q ! index of q in the star for a given sym ! index of -q in the star (0 if not present) ! ! output variables ! real(kind=DP) :: sxq (3, 48) ! list of vectors in the star of q ! ! Local variables ! integer :: nsq (48), isym, iq, i ! number of symmetry ops. of bravais lattice. ! counters on symmetry ops. ! counter on q-vectors ! generic counter real(kind=DP) :: rq (3), zero (3) ! rotated q in crystal coordinates ! coordinates of fractionary translations ! a zero vector: used in eqvect and as dummy q-vector in sgama logical, external :: eqvect ! function used to compare two vectors zero(:) = 0.d0 ! ! go to crystal coordinates, rotate, and back to cartesian ! call cryst_to_cart ( 1, xq, at, -1) do iq = 1, nq call irotate ( xq, s(:,:,invs(isq(iq))), sxq(:,iq) ) enddo call cryst_to_cart ( nq, sxq(:,1:nq), bg, 1) call cryst_to_cart ( 1, xq, bg, 1) ! write ( stdout, * ) write ( stdout, '(7x,i4,3f14.9)') (iq, (sxq(i,iq), i=1,3), iq=1,nq) if (imq.eq.0) write ( stdout, '(7x,i4,3f12.9)') (iq, (-sxq(i,iq), i=1,3), iq=1,nq) ! return end subroutine star_q3 !