!
! Copyright (C) 2001-2018 Quantum ESPRESSO group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
LOGICAL FUNCTION check_q_points_sym(nqs, q, at, bg, nsym, s, invs, &
                                    nq1, nq2, nq3)
  !
  !  This function returns .true. if the mesh of q points given as input
  !  is compatible with the FFT mesh. It returns .false. if a rotation of
  !  the point group gives a q point that is not in the FFT mesh.
  !
  USE kinds, ONLY : DP

  IMPLICIT NONE

  INTEGER, INTENT(IN) :: nqs, nsym
  INTEGER, INTENT(IN) :: nq1, nq2, nq3
  INTEGER, INTENT(IN) :: s(3,3,48), invs(48)
  REAL(DP), INTENT(IN) :: q(3,nqs), at(3,3), bg(3,3)

  INTEGER :: nq, ipol, icar, iq, jq
  INTEGER :: nr(3), isq (48), imq
  LOGICAL :: lq
  REAL(DP) :: xq, sxq(3,48)
  REAL(DP) :: eps=1.d-5

  nr(1)=nq1
  nr(2)=nq2
  nr(3)=nq3
  lq = .TRUE.

  DO iq = 1,nqs
     CALL star_q (q(:,iq), at, bg, nsym, s, invs, nq, sxq, isq, imq, .FALSE. )
     DO jq = 1,nq
        DO ipol = 1,3
           xq = 0.0d0
           DO icar = 1,3
              xq = xq + at(icar,ipol) * sxq(icar,jq) * nr(ipol)
           ENDDO
           lq = lq .AND. (ABS(NINT(xq) - xq) .LT. eps)
        ENDDO
     ENDDO
  ENDDO

  check_q_points_sym = lq

  RETURN

END FUNCTION check_q_points_sym
