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,&
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(:,:)
real(DP), parameter :: eps=1.d-8
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
!
do iorb=1,ilocros
do iorb1=iorb+1,ilocros
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) &
call exchange(natih(1,iorb),tblm(1,iorb),taunew(1,iorb), &
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) )
do iorb=1,lnocros
do iorb1=iorb+1,lnocros
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then
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) )
enddo
endif
enddo
enddo
do iorb=lnocros+1,lnocros+noins
do iorb1=iorb+1,lnocros+noins
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) &
call exchange(natih(1,iorb),tblm(1,iorb),taunew(1,iorb), &
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then
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) )
enddo
endif
enddo
enddo
do iorb=lnocros+noins+1,lnocros+noins+rnocros
do iorb1=iorb+1,lnocros+noins+rnocros
if (taunew(3,iorb1).lt.taunew(3,iorb)-1.d-8) then
call exchange(natih(1,iorb),tblm(1,iorb),taunew(1,iorb), &
natih(1,iorb1),tblm(1,iorb1),taunew(1,iorb1) )
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) )
enddo
endif
enddo
enddo