mirror of https://gitlab.com/QEF/q-e.git
XClib - one interface for dmxc
This commit is contained in:
parent
2a27424530
commit
fb38f8a9c1
|
@ -115,7 +115,7 @@ SUBROUTINE A_h(npw,e,h,ah)
|
|||
!
|
||||
ALLOCATE (dv(dfftp%nnr))
|
||||
DO j = 1,dfftp%nnr
|
||||
dv(j) = drho(j)*dmuxc(j)
|
||||
dv(j) = drho(j)*dmuxc(j,1,1)
|
||||
ENDDO
|
||||
!
|
||||
! add gradient correction contribution (if any)
|
||||
|
|
|
@ -30,7 +30,7 @@ SUBROUTINE cg_setup
|
|||
USE gvecw, ONLY: gcutw
|
||||
USE gc_lr, ONLY: grho, dvxc_rr, dvxc_sr, dvxc_ss, dvxc_s
|
||||
USE cgcom, ONLY: dmuxc, dvpsi, dpsi, auxr, aux2, aux3, lrwfc
|
||||
USE xc_interfaces, ONLY: dmxc_lda, xclib_set_threshold
|
||||
USE xc_interfaces, ONLY: dmxc, xclib_set_threshold
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -39,7 +39,7 @@ SUBROUTINE cg_setup
|
|||
CHARACTER (len=256) :: filint
|
||||
INTEGER :: ndr, ierr
|
||||
REAL(DP) :: edum(1,1), wdum(1,1)
|
||||
REAL(DP), DIMENSION(dfftp%nnr) :: rhotot
|
||||
REAL(DP), DIMENSION(dfftp%nnr,1) :: rhotot
|
||||
!
|
||||
CALL start_clock('cg_setup')
|
||||
!
|
||||
|
@ -49,7 +49,7 @@ SUBROUTINE cg_setup
|
|||
!
|
||||
! allocate memory for various arrays
|
||||
!
|
||||
ALLOCATE (dmuxc( dfftp%nnr))
|
||||
ALLOCATE (dmuxc( dfftp%nnr,1,1))
|
||||
ALLOCATE (dvpsi( npwx, nbnd))
|
||||
ALLOCATE ( dpsi( npwx, nbnd))
|
||||
ALLOCATE ( auxr( dfftp%nnr))
|
||||
|
@ -69,12 +69,12 @@ SUBROUTINE cg_setup
|
|||
! compute drhocore/dtau for each atom type (if needed)
|
||||
!
|
||||
nlcc_any = any ( upf(1:ntyp)%nlcc )
|
||||
!!! if (nlcc_any) call set_drhoc(xq, drc)
|
||||
! ! ! if (nlcc_any) call set_drhoc(xq, drc)
|
||||
!
|
||||
rhotot(:) = rho%of_r(:,1) + rho_core(:)
|
||||
rhotot(:,1) = rho%of_r(:,1) + rho_core(:)
|
||||
!
|
||||
CALL xclib_set_threshold( 'lda', 1.E-10_DP )
|
||||
CALL dmxc_lda( dfftp%nnr, rhotot, dmuxc )
|
||||
CALL dmxc( dfftp%nnr, 1, rhotot, dmuxc )
|
||||
!
|
||||
! initialize data needed for gradient corrections
|
||||
!
|
||||
|
|
|
@ -106,7 +106,7 @@ MODULE phon
|
|||
SAVE
|
||||
!
|
||||
REAL(DP), ALLOCATABLE:: &
|
||||
dmuxc(:) ! d V_xc / d rho
|
||||
dmuxc(:,:,:) ! d V_xc / d rho
|
||||
COMPLEX(DP), ALLOCATABLE:: &
|
||||
dvpsi(:,:), &!
|
||||
dpsi(:,:) !
|
||||
|
|
|
@ -84,7 +84,7 @@ SUBROUTINE dvpsi_kb(ik,nu)
|
|||
ENDDO
|
||||
CALL invfft ('Rho', dvb_cc, dfftp)
|
||||
DO ir = 1,dfftp%nnr
|
||||
dv(ir) = dv(ir) + dble(dvb_cc(ir)) * dmuxc(ir)
|
||||
dv(ir) = dv(ir) + dble(dvb_cc(ir)) * dmuxc(ir,1,1)
|
||||
ENDDO
|
||||
ENDIF
|
||||
!
|
||||
|
|
|
@ -81,7 +81,7 @@ SUBROUTINE dynmatcc(dyncc)
|
|||
ENDDO
|
||||
DO i=1,3
|
||||
CALL dvb_cc (nlcc, nt, ngm, dfftp%nnr, &
|
||||
dfftp%nl,igtongl,rhocg,dmuxc,gc(1,i),aux3,gc(1,i))
|
||||
dfftp%nl,igtongl,rhocg,dmuxc(:,1,1),gc(1,i),aux3,gc(1,i))
|
||||
ENDDO
|
||||
DO nb=1,nat
|
||||
ntb=ityp(nb)
|
||||
|
|
|
@ -421,23 +421,23 @@ SUBROUTINE cg_neweps
|
|||
USE ions_base, ONLY : nat, tau
|
||||
USE fft_base, ONLY : dfftp
|
||||
USE scf, ONLY : rho, rho_core
|
||||
USE xc_interfaces, ONLY: dmxc_lda, xclib_set_threshold
|
||||
USE xc_interfaces, ONLY: dmxc, xclib_set_threshold
|
||||
USE cgcom
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: i, j
|
||||
REAL(DP), DIMENSION(3,3) :: chi(3,3)
|
||||
REAL(DP), DIMENSION(dfftp%nnr) :: rhotot, sign_r
|
||||
REAL(DP), DIMENSION(dfftp%nnr,1) :: rhotot, sign_r
|
||||
!
|
||||
CALL newscf
|
||||
!
|
||||
! new derivative of the xc potential - NOT IMPLEMENTED FOR LSDA
|
||||
!
|
||||
rhotot(:) = rho%of_r(:,1) + rho_core(:)
|
||||
rhotot(:,1) = rho%of_r(:,1) + rho_core(:)
|
||||
!
|
||||
CALL xclib_set_threshold( 'lda', 1.E-10_DP )
|
||||
CALL dmxc_lda( dfftp%nnr, rhotot, dmuxc )
|
||||
CALL dmxc( dfftp%nnr, 1, rhotot, dmuxc )
|
||||
!
|
||||
!
|
||||
! re-initialize data needed for gradient corrections
|
||||
|
|
|
@ -8,7 +8,7 @@ MODULE xc_interfaces
|
|||
PRIVATE
|
||||
!
|
||||
! LDA
|
||||
PUBLIC :: XC, XC_GCX, XC_METAGCX, XC_LDA, XC_LSDA, DMXC, DMXC_LDA, DMXC_LSDA, DMXC_NC
|
||||
PUBLIC :: XC, XC_GCX, XC_METAGCX, XC_LDA, XC_LSDA, DMXC
|
||||
PUBLIC :: SLATER, SLATER_SPIN, PW, PW_SPIN, LYP, &
|
||||
LSD_LYP
|
||||
! GGA
|
||||
|
@ -200,49 +200,6 @@ MODULE xc_interfaces
|
|||
!
|
||||
END INTERFACE
|
||||
!
|
||||
INTERFACE DMXC_LDA
|
||||
!
|
||||
SUBROUTINE dmxc_lda_l( length, rho_in, dmuxc )
|
||||
!
|
||||
USE kind_l, ONLY: DP
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: length
|
||||
REAL(DP), INTENT(IN), DIMENSION(length) :: rho_in
|
||||
REAL(DP), INTENT(OUT), DIMENSION(length) :: dmuxc
|
||||
!
|
||||
END SUBROUTINE dmxc_lda_l
|
||||
!
|
||||
END INTERFACE
|
||||
!
|
||||
INTERFACE DMXC_LSDA
|
||||
!
|
||||
SUBROUTINE dmxc_lsda_l( length, rho_in, dmuxc )
|
||||
!
|
||||
USE kind_l, ONLY: DP
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: length
|
||||
REAL(DP), INTENT(IN), DIMENSION(length,2) :: rho_in
|
||||
REAL(DP), INTENT(OUT), DIMENSION(length,2,2) :: dmuxc
|
||||
!
|
||||
END SUBROUTINE dmxc_lsda_l
|
||||
!
|
||||
END INTERFACE
|
||||
!
|
||||
INTERFACE DMXC_NC
|
||||
!
|
||||
SUBROUTINE dmxc_nc_l( length, rho_in, m, dmuxc )
|
||||
!
|
||||
USE kind_l, ONLY: DP
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: length
|
||||
REAL(DP), INTENT(IN), DIMENSION(length) :: rho_in
|
||||
REAL(DP), INTENT(IN), DIMENSION(length,3) :: m
|
||||
REAL(DP), INTENT(OUT), DIMENSION(length,4,4) :: dmuxc
|
||||
!
|
||||
END SUBROUTINE
|
||||
!
|
||||
END INTERFACE
|
||||
!
|
||||
!
|
||||
INTERFACE GCXC
|
||||
!
|
||||
|
|
|
@ -421,7 +421,7 @@ subroutine dvxc_dn(mesh, rho, dvxc)
|
|||
! some routine in PH and flibs will be called
|
||||
!
|
||||
use funct, only : dft_is_gradient
|
||||
use xc_interfaces, only : dmxc_lda, xclib_set_threshold
|
||||
use xc_interfaces, only : dmxc, xclib_set_threshold
|
||||
!
|
||||
implicit none
|
||||
!
|
||||
|
@ -432,6 +432,7 @@ subroutine dvxc_dn(mesh, rho, dvxc)
|
|||
!
|
||||
! local variables
|
||||
!
|
||||
real(kind=8), allocatable :: rho_d(:,:), dvxc_d(:,:,:)
|
||||
integer :: i
|
||||
!
|
||||
!
|
||||
|
@ -441,8 +442,11 @@ subroutine dvxc_dn(mesh, rho, dvxc)
|
|||
!
|
||||
! LDA only
|
||||
!
|
||||
allocate( rho_d(mesh,1), dvxc_d(mesh,1,1) ) !-PROVISIONAL
|
||||
rho_d(:,1) = rho
|
||||
CALL xclib_set_threshold( 'lda', 1.d-10 )
|
||||
CALL dmxc_lda( mesh, rho, dvxc )
|
||||
CALL dmxc( mesh, 1, rho_d, dvxc_d )
|
||||
deallocate( rho_d, dvxc_d )
|
||||
!
|
||||
return
|
||||
!
|
||||
|
|
Loading…
Reference in New Issue