U_projection_type = 'norm-atomic' will allow the normalization of atomic

Bloch function when they are not normalized in the pseudopotential. This
is a quick and dirty fix to the problem (normalization of the atomic
wavefunctions should be done in the atomic code) that produces meaningless
occupations for LDA+U calculations. Explanation added in INPUT_PW


git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4054 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
cococ 2007-07-23 16:47:12 +00:00
parent 7dcbb3900d
commit 1e786410ff
2 changed files with 22 additions and 8 deletions

View File

@ -426,6 +426,13 @@ U_projection_type CHARACTER (default='atomic')
Currently available choices:
'atomic': use atomic wfc's (as they are) to build the projector
'ortho-atomic': use Lowdin orthogonalized atomic wfc's
'norm-atomic': Lowdin normalization of atomic wfc. Keep in mind:
atomic wfc are not orthogonalized in this case.
This is a "quick and dirty" trick to be used when
atomic wfc from the pseudopotential are not
normalized (and thus produce occupation whose
value exceeds unity). If orthogonalized wfc are
not needed always try 'atomic' first.
'file': use the information from file "prefix".atwfc that must
have been generated previously, for instance by pmw.x
(see PP/poormanwannier.f90 for details)

View File

@ -71,6 +71,13 @@ SUBROUTINE orthoatwfc
WRITE( stdout,*) 'Gamma-only calculation for this case not implemented'
STOP
END IF
ELSE IF (U_projection=="norm-atomic") THEN
orthogonalize_wfc = .TRUE.
WRITE( stdout,*) 'Atomic wfc used for LDA+U Projector are normalized but NOT orthogonalized'
IF (gamma_only) THEN
WRITE( stdout,*) 'Gamma-only calculation for this case not implemented'
STOP
END IF
ELSE
WRITE( stdout,*) "U_projection_type =", U_projection
CALL errore ("orthoatwfc"," this U_projection_type is not valid",1)
@ -140,14 +147,14 @@ SUBROUTINE orthoatwfc
#ifdef __PARA
CALL reduce (2 * natomwfc * natomwfc, overlap)
#endif
! IF (.not.orthogonalize_wfc) THEN
! DO i = 1, natomwfc
! DO j = i+1, natomwfc
! overlap(i,j) = cmplx(0.d0,0.d0)
! overlap(j,i) = cmplx(0.d0,0.d0)
! ENDDO
! ENDDO
! END IF
IF (U_projection=="norm-atomic") THEN
DO i = 1, natomwfc
DO j = i+1, natomwfc
overlap(i,j) = cmplx(0.d0,0.d0)
overlap(j,i) = cmplx(0.d0,0.d0)
ENDDO
ENDDO
END IF
!
! find O^-.5
!