tetrahedra + noncolinear spin fixed, courtesy of Yurii Timrov

git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@7551 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
giannozz 2011-03-07 10:54:10 +00:00
parent 699f738470
commit d5a4b5c192
3 changed files with 25 additions and 16 deletions

View File

@ -48,6 +48,7 @@ Fixed in 4.3 version:
calculations with non-orthorhombic simulation cells. Also fixed
an old but minor bug on averaging of Berry phases between strings
* PW: problem with symmetrization in the noncollinear case
* PW: tetraheadr+noncolinear case fixed (courtesy of Yurii Timrov)
* option -D__USE_3D_FFT wasn't working any longer in v.4.2.x
* PP: calculation of ILDOS with USPP wasn't working in v.4.2.x
* PH: elph=.true. and trans=.false. was not working any longer.

View File

@ -1,15 +1,18 @@
!
! Copyright (C) 2001-2003 PWSCF group
! Copyright (C) 2001-2011 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 .
!
!
!--------------------------------------------------------------------
function sumkt (et, nbnd, nks, nspin, ntetra, tetra, e, is, isk)
FUNCTION sumkt (et, nbnd, nks, nspin, ntetra, tetra, e, is, isk)
!--------------------------------------------------------------------
!
! ... Sum over all states with tetrahedron method
! ... At Fermi energy e=E_F, sumkt(e) == number of electrons
! ... Generalization to noncollinear case courtesy of Yurii Timrov
!
USE kinds
implicit none
! output variable
@ -74,12 +77,12 @@ function sumkt (et, nbnd, nks, nspin, ntetra, tetra, e, is, isk)
endif
enddo
enddo
enddo
! add correct spin normalization : 2 for LDA, 1 for LSDA calculations
! add correct spin normalization (2 for LDA, 1 for other cases)
IF ( nspin == 1 ) sumkt = sumkt * 2.d0
return
end function sumkt

View File

@ -1,16 +1,18 @@
!
! Copyright (C) 2001-2003 PWSCF group
! Copyright (C) 2001-2011 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 .
!
!
!--------------------------------------------------------------------
subroutine tweights (nks, nspin, nbnd, nelec, ntetra, tetra, et, &
ef, wg, is, isk )
!--------------------------------------------------------------------
! calculates weights with the tetrahedron method (Bloechl version)
!
! ... calculates weights with the tetrahedron method (P.E.Bloechl)
! ... Generalization to noncollinear case courtesy of Yurii Timrov
USE kinds
implicit none
! I/O variables
@ -22,6 +24,7 @@ subroutine tweights (nks, nspin, nbnd, nelec, ntetra, tetra, et, &
real(DP), external :: efermit
real(DP) :: e1, e2, e3, e4, c1, c2, c3, c4, etetra (4), dosef
integer :: ik, ibnd, nt, nk, ns, i, kp1, kp2, kp3, kp4, itetra (4)
integer :: nspin_lsda
! Calculate the Fermi energy ef
@ -40,7 +43,13 @@ subroutine tweights (nks, nspin, nbnd, nelec, ntetra, tetra, et, &
enddo
enddo
do ns = 1, nspin
IF ( nspin == 2 ) THEN
nspin_lsda = 2
ELSE
nspin_lsda = 1
END IF
do ns = 1, nspin_lsda
if (is /= 0) then
if (ns .ne. is) cycle
end if
@ -143,12 +152,8 @@ subroutine tweights (nks, nspin, nbnd, nelec, ntetra, tetra, et, &
enddo
! add correct spin normalization : 2 for LDA, 1 for LSDA calculations
do ik = 1, nks
do ibnd = 1, nbnd
wg (ibnd, ik) = wg (ibnd, ik) * 2.d0 / nspin
enddo
! add correct spin normalization (2 for LDA, 1 for all other cases)
IF ( nspin == 1 ) wg (:,1:nks) = wg (:,1:nks) * 2.d0
enddo
return
end subroutine tweights