XClib - one interface for dmxc

This commit is contained in:
fabrizio22 2020-09-09 13:33:41 +02:00
parent 2a27424530
commit fb38f8a9c1
8 changed files with 21 additions and 60 deletions

View File

@ -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)

View File

@ -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
!

View File

@ -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(:,:) !

View File

@ -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
!

View File

@ -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)

View File

@ -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

View File

@ -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
!

View File

@ -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
!