mirror of https://gitlab.com/QEF/q-e.git
85 lines
2.3 KiB
Fortran
85 lines
2.3 KiB
Fortran
!
|
|
! Copyright (C) 2004 Vanderbilt's group at Rutgers University, NJ
|
|
! 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 .
|
|
!
|
|
SUBROUTINE kp_strings &
|
|
( nppstr,gdir,nrot,s,bg,npk,k1,k2,k3,nk1,nk2,nk3,nks,xk,wk)
|
|
|
|
#include "f_defs.h"
|
|
|
|
! --- Usage of modules ---
|
|
USE kinds, ONLY: dp
|
|
|
|
! --- No implicit definitions ---
|
|
IMPLICIT NONE
|
|
|
|
! --- Input arguments ---
|
|
INTEGER , INTENT(IN) :: k1
|
|
INTEGER , INTENT(IN) :: k2
|
|
INTEGER , INTENT(IN) :: k3
|
|
INTEGER , INTENT(IN) :: nk1
|
|
INTEGER , INTENT(IN) :: nk2
|
|
INTEGER , INTENT(IN) :: nk3
|
|
INTEGER , INTENT(IN) :: nppstr
|
|
INTEGER , INTENT(IN) :: npk
|
|
INTEGER , INTENT(IN) :: nrot
|
|
INTEGER , INTENT(IN) :: gdir
|
|
INTEGER , INTENT(IN) :: s(3,3,48)
|
|
REAL(dp) , INTENT(IN) :: bg(3,3)
|
|
|
|
! --- Output arguments ---
|
|
INTEGER , INTENT(OUT) :: nks
|
|
REAL(dp), INTENT(OUT) :: xk(3,npk)
|
|
REAL(dp), INTENT(OUT) :: wk(npk)
|
|
|
|
! --- Internal definitions ---
|
|
INTEGER :: i
|
|
INTEGER :: ipar
|
|
INTEGER :: iort
|
|
INTEGER :: kindex
|
|
INTEGER :: nkpol
|
|
REAL(dp) :: dk(3)
|
|
REAL(dp) :: xk0(3,npk)
|
|
REAL(dp) :: wk0(npk)
|
|
|
|
! --- Generate a k-point grid in the two dimensions other than gdir ---
|
|
IF (gdir == 1) THEN
|
|
CALL kpoint_grid(nrot,s,bg,npk,k1,k2,k3,1,nk2,nk3,nks,xk0,wk0)
|
|
! DO i=1,nk2*nk3
|
|
! xk0(1,i)=0.0
|
|
! END DO
|
|
ELSE IF (gdir == 2) THEN
|
|
CALL kpoint_grid(nrot,s,bg,npk,k1,k2,k3,nk1,1,nk3,nks,xk0,wk0)
|
|
! DO i=1,nk1*nk3
|
|
! xk0(2,i)=0.0
|
|
! END DO
|
|
ELSE IF (gdir == 3) THEN
|
|
CALL kpoint_grid(nrot,s,bg,npk,k1,k2,k3,nk1,nk2,1,nks,xk0,wk0)
|
|
! DO i=1,nk1*nk2
|
|
! xk0(3,i)=0.0
|
|
! END DO
|
|
ELSE
|
|
CALL errore('kp_strings','gdir different from 1, 2, or 3',1)
|
|
END IF
|
|
|
|
! --- Generate a string of k-points for every k-point in the 2D grid ---
|
|
kindex=0
|
|
dk(1)=bg(1,gdir)/REAL(nppstr-1,dp)
|
|
dk(2)=bg(2,gdir)/REAL(nppstr-1,dp)
|
|
dk(3)=bg(3,gdir)/REAL(nppstr-1,dp)
|
|
DO iort=1,nks
|
|
DO ipar=1,nppstr
|
|
kindex=kindex+1
|
|
xk(1,kindex)=xk0(1,iort)+REAL(ipar-1,dp)*dk(1)
|
|
xk(2,kindex)=xk0(2,iort)+REAL(ipar-1,dp)*dk(2)
|
|
xk(3,kindex)=xk0(3,iort)+REAL(ipar-1,dp)*dk(3)
|
|
wk(kindex)=wk0(iort)/REAL(nppstr,dp)
|
|
END DO
|
|
END DO
|
|
nks=nks*nppstr
|
|
|
|
END SUBROUTINE kp_strings
|