mirror of https://gitlab.com/QEF/q-e.git
More uspp variables rearrangement (beware undesired side effects!)
qq_spinorb moved into Modules/uspp.f90 as qq_so dvan => dvan + dvan_so (for spin-orbit only) PW/clean_pw.f90 replaces PWNC/clean_pw.f90 (PG) git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@945 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
parent
595bda9fe8
commit
25ff6785e3
|
@ -56,6 +56,7 @@ MODULE uspp
|
|||
SAVE
|
||||
PUBLIC :: nlx, lpx, lpl, ap, aainit, indv, nhtol, nhtolm, nkb, vkb, dvan, &
|
||||
deeq, qq, nhtoj, beta, becsum, deallocate_uspp
|
||||
PUBLIC :: qq_so, dvan_so!!!, deeq_so,
|
||||
INTEGER, PARAMETER :: &
|
||||
nlx = (lmaxx+1)**2, &! maximum number of combined angular momentum
|
||||
mx = 2*lqmax-1 ! maximum magnetic angular momentum of Q
|
||||
|
@ -75,15 +76,22 @@ MODULE uspp
|
|||
!
|
||||
COMPLEX(KIND=DP), ALLOCATABLE, TARGET :: &
|
||||
vkb(:,:) ! all beta functions in reciprocal space
|
||||
COMPLEX(KIND=DP), ALLOCATABLE :: &
|
||||
dvan(:,:,:,:), &! the D functions of the solid
|
||||
deeq(:,:,:,:) ! the integral of V_eff and Q_{nm}
|
||||
! NB: dvan and deeq are complex because of spin-orbit
|
||||
REAL(KIND=DP), ALLOCATABLE :: &
|
||||
dvan(:,:,:,:), &! the D functions of the solid
|
||||
!!! deeq(:,:,:,:), &! the integral of V_eff and Q_{nm}
|
||||
becsum(:,:,:), &! \sum_i f(i) <psi(i)|beta_l><beta_m|psi(i)>
|
||||
qq(:,:,:), &! the q functions in the solid
|
||||
nhtoj(:,:) ! correspondence n <-> total angular momentum
|
||||
!
|
||||
COMPLEX(KIND=DP), ALLOCATABLE :: & ! variables for spin-orbit case:
|
||||
qq_so(:,:,:,:), &! Q_{nm}
|
||||
dvan_so(:,:,:,:), &! D_{nm}
|
||||
deeq(:,:,:,:) ! \int V_{eff}(r) Q_{nm}(r) dr
|
||||
!
|
||||
! In a spin-orbit calculations these variable are complex instead of real;
|
||||
! qq_so has and additional spin index. In order to avoid to make the code
|
||||
! more complex or slower, separate variables are defined and used
|
||||
!
|
||||
REAL(KIND=DP), ALLOCATABLE :: &
|
||||
beta(:,:,:) ! beta functions for CP (without struct.factor)
|
||||
!
|
||||
|
@ -246,10 +254,13 @@ CONTAINS
|
|||
IF( ALLOCATED( nhtolm ) ) DEALLOCATE( nhtolm )
|
||||
IF( ALLOCATED( nhtoj ) ) DEALLOCATE( nhtoj )
|
||||
IF( ALLOCATED( vkb ) ) DEALLOCATE( vkb )
|
||||
IF( ALLOCATED( becsum ) ) DEALLOCATE( becsum )
|
||||
IF( ALLOCATED( qq ) ) DEALLOCATE( qq )
|
||||
IF( ALLOCATED( dvan ) ) DEALLOCATE( dvan )
|
||||
IF( ALLOCATED( deeq ) ) DEALLOCATE( deeq )
|
||||
IF( ALLOCATED( becsum ) ) DEALLOCATE( becsum )
|
||||
IF( ALLOCATED( qq_so ) ) DEALLOCATE( qq_so )
|
||||
IF( ALLOCATED( dvan_so ) ) DEALLOCATE( dvan_so )
|
||||
!! IF( ALLOCATED( deeq_so ) ) DEALLOCATE( deeq_so )
|
||||
end subroutine deallocate_uspp
|
||||
|
||||
end module uspp
|
||||
|
|
|
@ -34,9 +34,10 @@ subroutine allocate_nlpot
|
|||
USE ldaU, ONLY: Hubbard_lmax, ns, nsnew
|
||||
USE wvfct, ONLY: npwx, npw, igk, igk_l2g, g2kin
|
||||
USE us, ONLY: qrad, tab, tab_at, dq, nqx, nqxq
|
||||
USE uspp, ONLY: indv, nhtol, nhtolm, qq, dvan, deeq, vkb, nkb, nhtoj, becsum
|
||||
USE uspp, ONLY: indv, nhtol, nhtolm, qq, dvan, deeq, vkb, nkb, nhtoj, &
|
||||
becsum, qq_so, dvan_so
|
||||
USE uspp_param, ONLY: lmaxq, lmaxkb, lll, nbeta, nh, nhm
|
||||
USE spin_orb, ONLY: lspinorb, qq_spinorb, fcoef
|
||||
USE spin_orb, ONLY: lspinorb, fcoef
|
||||
implicit none
|
||||
!
|
||||
! a few local variables
|
||||
|
@ -83,14 +84,15 @@ subroutine allocate_nlpot
|
|||
allocate (nhtol(nhm, ntyp))
|
||||
allocate (nhtolm(nhm, ntyp))
|
||||
allocate (nhtoj(nhm, ntyp))
|
||||
allocate (qq( nhm, nhm, ntyp))
|
||||
allocate (dvan( nhm, nhm, nspin, ntyp))
|
||||
allocate (deeq( nhm, nhm, nat, nspin))
|
||||
if (lspinorb) then
|
||||
allocate (qq_spinorb(nhm, nhm, 4, ntyp))
|
||||
allocate (qq_so(nhm, nhm, 4, ntyp))
|
||||
allocate (dvan_so( nhm, nhm, nspin, ntyp))
|
||||
allocate (fcoef(nhm,nhm,2,2,ntyp))
|
||||
else
|
||||
allocate (qq( nhm, nhm, ntyp))
|
||||
allocate (dvan( nhm, nhm, nspin, ntyp))
|
||||
endif
|
||||
|
||||
!
|
||||
nqxq = ( (sqrt(gcutm) + sqrt(xqq(1)**2 + xqq(2)**2 + xqq(3)**2) ) &
|
||||
/ dq + 4) * cell_factor
|
||||
|
|
|
@ -23,7 +23,7 @@ SUBROUTINE clean_pw()
|
|||
USE force_mod, ONLY : force
|
||||
USE scf, ONLY : rho, rho_save,vr, vltot, rho_core, vrs
|
||||
USE relax, ONLY : if_pos
|
||||
USE wavefunctions_module, ONLY : evc, psic
|
||||
USE wavefunctions_module, ONLY : evc, psic, evc_nc, psic_nc
|
||||
USE us, ONLY : qrad, tab, tab_at
|
||||
USE uspp, ONLY : deallocate_uspp
|
||||
USE ldaU, ONLY : ns, nsnew, swfcatom
|
||||
|
@ -35,9 +35,9 @@ SUBROUTINE clean_pw()
|
|||
USE afftnec, ONLY : auxp
|
||||
#endif
|
||||
USE fft_types, ONLY : fft_dlay_deallocate
|
||||
USE spin_orb, ONLY : lspinorb, qq_spinorb, fcoef
|
||||
USE spin_orb, ONLY : lspinorb, fcoef
|
||||
USE constraints_module, ONLY : constr, target
|
||||
|
||||
USE noncollin_module, ONLY : deallocate_noncol
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -74,6 +74,7 @@ SUBROUTINE clean_pw()
|
|||
IF ( ALLOCATED( vnew ) ) DEALLOCATE( vnew )
|
||||
IF ( ALLOCATED( rho_core ) ) DEALLOCATE( rho_core )
|
||||
IF ( ALLOCATED( psic ) ) DEALLOCATE( psic )
|
||||
IF ( ALLOCATED( psic_nc ) ) DEALLOCATE( psic_nc )
|
||||
IF ( ALLOCATED( vrs ) ) DEALLOCATE( vrs )
|
||||
IF ( doublegrid ) THEN
|
||||
IF ( ASSOCIATED( nls ) ) DEALLOCATE( nls )
|
||||
|
@ -101,17 +102,20 @@ SUBROUTINE clean_pw()
|
|||
IF ( ALLOCATED( tab ) ) DEALLOCATE( tab )
|
||||
IF ( ALLOCATED( tab_at ) ) DEALLOCATE( tab_at )
|
||||
IF (lspinorb) then
|
||||
IF ( ALLOCATED( qq_spinorb ) ) DEALLOCATE( qq_spinorb )
|
||||
IF ( ALLOCATED( fcoef ) ) DEALLOCATE( fcoef )
|
||||
END IF
|
||||
!
|
||||
call deallocate_uspp ()
|
||||
!
|
||||
call deallocate_noncol ()
|
||||
!
|
||||
! ... arrays allocated in allocate_wfc.f90 ( and never deallocated )
|
||||
!
|
||||
IF ( ALLOCATED( et ) ) DEALLOCATE( et )
|
||||
IF ( ALLOCATED( wg ) ) DEALLOCATE( wg )
|
||||
IF ( ALLOCATED( evc ) ) DEALLOCATE( evc )
|
||||
IF ( ALLOCATED( swfcatom ) ) DEALLOCATE( swfcatom )
|
||||
IF ( ALLOCATED( evc_nc ) ) DEALLOCATE( evc_nc )
|
||||
!
|
||||
#ifdef __SX6
|
||||
!
|
||||
|
|
|
@ -37,11 +37,11 @@ subroutine init_us_1
|
|||
USE pseud, ONLY: lloc, lmax
|
||||
USE lsda_mod, ONLY : nspin
|
||||
USE us, ONLY: okvan, nqxq, dq, nqx, tab, qrad
|
||||
USE uspp, ONLY: nhtol, nhtoj, nhtolm, dvan, qq, indv
|
||||
USE uspp, ONLY: nhtol, nhtoj, nhtolm, dvan, qq, indv, ap, aainit, &
|
||||
qq_so, dvan_so
|
||||
USE uspp_param, ONLY: lmaxq, dion, betar, qfunc, qfcoef, rinner, nbeta, &
|
||||
kkbeta, nqf, nqlc, lll, jjj, lmaxkb, nh, tvanp, nhm
|
||||
USE uspp, ONLY : ap, aainit
|
||||
USE spin_orb, ONLY : lspinorb, rot_ylm, qq_spinorb, fcoef
|
||||
USE spin_orb, ONLY : lspinorb, rot_ylm, fcoef
|
||||
implicit none
|
||||
!
|
||||
! here a few local variables
|
||||
|
@ -77,13 +77,12 @@ subroutine init_us_1
|
|||
allocate (besr( ndm))
|
||||
allocate (qtot( ndm , nbrx , nbrx))
|
||||
allocate (ylmk0( lmaxq * lmaxq))
|
||||
dvan = 0.d0
|
||||
qq (:,:,:) = 0.d0
|
||||
ap (:,:,:) = 0.d0
|
||||
if (lmaxq > 0) qrad(:,:,:,:)= 0.d0
|
||||
|
||||
prefr = fpi / omega
|
||||
if (lspinorb) then
|
||||
dvan_so = 0.d0
|
||||
!
|
||||
! In the spin-orbit case we need the unitary matrix u which rotates the
|
||||
! real spherical harmonics and yields the complex ones.
|
||||
|
@ -102,7 +101,10 @@ subroutine init_us_1
|
|||
rot_ylm(n,n1+1)=dcmplx(0.d0, sqrt2)
|
||||
enddo
|
||||
fcoef=(0.d0,0.d0)
|
||||
qq_spinorb=(0.d0,0.d0)
|
||||
qq_so=(0.d0,0.d0)
|
||||
else
|
||||
qq (:,:,:) = 0.d0
|
||||
dvan = 0.d0
|
||||
endif
|
||||
!
|
||||
! For each pseudopotential we initialize the indices nhtol, nhtolm,
|
||||
|
@ -169,7 +171,8 @@ subroutine init_us_1
|
|||
do is1=1,2
|
||||
do is2=1,2
|
||||
ijs=ijs+1
|
||||
dvan(ih,jh,ijs,nt)=dion(vi,vj,nt)*fcoef(ih,jh,is1,is2,nt)
|
||||
dvan_so(ih,jh,ijs,nt) = dion(vi,vj,nt) * &
|
||||
fcoef(ih,jh,is1,is2,nt)
|
||||
if (vi.ne.vj) fcoef(ih,jh,is1,is2,nt)=(0.d0,0.d0)
|
||||
enddo
|
||||
enddo
|
||||
|
@ -283,8 +286,8 @@ subroutine init_us_1
|
|||
do is2=1,2
|
||||
ijs=ijs+1
|
||||
do is=1,2
|
||||
qq_spinorb(kh,lh,ijs,nt) = qq_spinorb(kh,lh,ijs,nt) &
|
||||
+ omega*DREAL(qgm(1))*fcoef(kh,ih,is1,is,nt) &
|
||||
qq_so(kh,lh,ijs,nt) = qq_so(kh,lh,ijs,nt) &
|
||||
+ omega*DREAL(qgm(1))*fcoef(kh,ih,is1,is,nt)&
|
||||
*fcoef(jh,lh,is,is2,nt)
|
||||
enddo
|
||||
enddo
|
||||
|
@ -307,7 +310,7 @@ subroutine init_us_1
|
|||
#ifdef __PARA
|
||||
100 continue
|
||||
if (lspinorb) then
|
||||
call reduce ( nhm * nhm * ntyp * 8, qq_spinorb )
|
||||
call reduce ( nhm * nhm * ntyp * 8, qq_so )
|
||||
else
|
||||
call reduce ( nhm * nhm * ntyp, qq )
|
||||
endif
|
||||
|
|
|
@ -44,4 +44,13 @@ MODULE noncollin_module
|
|||
m_loc(:,:) ! local integrated magnetization
|
||||
! mcons(:,:), ! constrained values for local variables
|
||||
!
|
||||
CONTAINS
|
||||
subroutine deallocate_noncol()
|
||||
IF ( ALLOCATED( pointlist) ) DEALLOCATE( pointlist )
|
||||
IF ( ALLOCATED( factlist ) ) DEALLOCATE( factlist )
|
||||
IF ( ALLOCATED( pointnum ) ) DEALLOCATE( pointnum )
|
||||
IF ( ALLOCATED( r_loc ) ) DEALLOCATE( r_loc )
|
||||
IF ( ALLOCATED( m_loc ) ) DEALLOCATE( m_loc )
|
||||
end subroutine deallocate_noncol
|
||||
!
|
||||
END MODULE noncollin_module
|
||||
|
|
|
@ -574,13 +574,6 @@ MODULE spin_orb
|
|||
! spherical harmonics into complex ones
|
||||
COMPLEX (kind=dp), ALLOCATABLE :: fcoef(:,:,:,:,:) ! function needed to
|
||||
! account for spinors.
|
||||
COMPLEX (kind=dp),ALLOCATABLE :: qq_spinorb(:,:,:,:) ! the qq coefficients
|
||||
! in the spin_orbit case. NB: This variable should
|
||||
! not be necessary, but to introduce an additional
|
||||
! index in any place where qq is used was too
|
||||
! cumbersome. As a first step I have introduced
|
||||
! another variable with the required index
|
||||
! (ADC 26/3/04)
|
||||
END MODULE spin_orb
|
||||
!
|
||||
|
||||
|
|
Loading…
Reference in New Issue