Bug fix: In particular cases the order of the orbitals was not correct.

(A. Smogunov and ADC) (Bug found by G. Sclauzero).


git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@3151 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
dalcorso 2006-06-05 07:49:05 +00:00
parent b7a43ee927
commit 43ac7466b7
1 changed files with 18 additions and 10 deletions

View File

@ -35,7 +35,7 @@ subroutine init_orbitals (zlen, bd1, bd2, z, nrz, rsph, lsr)
integer :: noins, lnocros, rnocros, nocros, norb, na, nt, ih, ih1,& integer :: noins, lnocros, rnocros, nocros, norb, na, nt, ih, ih1,&
ioins, ilocros, irocros, orbin, orbfin, ib, lsr, nrz, & ioins, ilocros, irocros, orbin, orbfin, ib, lsr, nrz, &
m, k, ipol, iorb, iorb1, is m, k, ipol, iorb, iorb1, ind, is
integer, allocatable :: orbind(:,:), tblm(:,:), cros(:,:), natih(:,:) integer, allocatable :: orbind(:,:), tblm(:,:), cros(:,:), natih(:,:)
real(DP), parameter :: eps=1.d-8 real(DP), parameter :: eps=1.d-8
real(DP) :: ledge, redge, ledgel, redgel, ledger, redger, & real(DP) :: ledge, redge, ledgel, redgel, ledger, redger, &
@ -197,27 +197,35 @@ subroutine init_orbitals (zlen, bd1, bd2, z, nrz, rsph, lsr)
! !
! order orbital in order of increasing taunew ! order orbital in order of increasing taunew
! !
do iorb=1,ilocros do iorb=1,lnocros
do iorb1=iorb+1,ilocros do iorb1=iorb+1,lnocros
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) & if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then
call exchange(natih(1,iorb),tblm(1,iorb),taunew(1,iorb), & do ind=iorb,iorb1-1
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) ) call exchange(natih(1,ind),tblm(1,ind),taunew(1,ind), &
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) )
enddo
endif
enddo enddo
enddo enddo
do iorb=lnocros+1,lnocros+noins do iorb=lnocros+1,lnocros+noins
do iorb1=iorb+1,lnocros+noins do iorb1=iorb+1,lnocros+noins
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) & if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then
call exchange(natih(1,iorb),tblm(1,iorb),taunew(1,iorb), & do ind=iorb,iorb1-1
call exchange(natih(1,ind),tblm(1,ind),taunew(1,ind), &
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) ) natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) )
enddo
endif
enddo enddo
enddo enddo
do iorb=lnocros+noins+1,lnocros+noins+rnocros do iorb=lnocros+noins+1,lnocros+noins+rnocros
do iorb1=iorb+1,lnocros+noins+rnocros do iorb1=iorb+1,lnocros+noins+rnocros
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then
call exchange(natih(1,iorb),tblm(1,iorb),taunew(1,iorb), & do ind=iorb,iorb1-1
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) ) call exchange(natih(1,ind),tblm(1,ind),taunew(1,ind), &
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) )
enddo
endif endif
enddo enddo
enddo enddo