mirror of https://gitlab.com/QEF/q-e.git
switch to xcf03 - lda
This commit is contained in:
parent
4ab5727c5a
commit
4ba02dc5ce
|
@ -38,6 +38,7 @@ MODULE funct
|
|||
#if defined(__LIBXC)
|
||||
USE xc_f90_types_m
|
||||
USE xc_f90_lib_m
|
||||
USE xc_f03_lib_m
|
||||
#endif
|
||||
!
|
||||
#if defined(use_beef)
|
||||
|
@ -906,7 +907,8 @@ CONTAINS
|
|||
CHARACTER(LEN=256) :: name
|
||||
INTEGER :: i, l, prev_len(6), fkind, fkind_v(3), family
|
||||
INTEGER, PARAMETER :: ID_MAX_LIBXC=600
|
||||
TYPE(xc_f90_pointer_t) :: xc_func, xc_info
|
||||
TYPE(xc_f03_func_t) :: xc_func
|
||||
TYPE(xc_f03_func_info_t) :: xc_info
|
||||
LOGICAL, EXTERNAL :: matches
|
||||
CHARACTER(LEN=1), EXTERNAL :: capital
|
||||
!
|
||||
|
@ -914,7 +916,7 @@ CONTAINS
|
|||
!
|
||||
DO i = 1, ID_MAX_LIBXC
|
||||
!
|
||||
CALL xc_f90_functional_get_name( i, name )
|
||||
name = xc_f03_functional_get_name( i )
|
||||
!
|
||||
DO l = 1, LEN_TRIM(name)
|
||||
name(l:l) = capital( name(l:l) )
|
||||
|
@ -927,10 +929,11 @@ CONTAINS
|
|||
!WRITE(*, '("matches libxc",i2,2X,A,2X,A)') i, TRIM(name), TRIM(dft)
|
||||
!
|
||||
fkind=-100 ; family=-100
|
||||
CALL xc_f90_func_init( xc_func, xc_info, i, 1 )
|
||||
fkind = xc_f90_info_kind( xc_info )
|
||||
family = xc_f90_info_family( xc_info )
|
||||
CALL xc_f90_func_end( xc_func )
|
||||
CALL xc_f03_func_init( xc_func, i, 1 )
|
||||
xc_info = xc_f03_func_get_info( xc_func )
|
||||
fkind = xc_f03_func_info_get_kind( xc_info )
|
||||
family = xc_f03_func_info_get_family( xc_info )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
!
|
||||
SELECT CASE( family )
|
||||
CASE( XC_FAMILY_LDA )
|
||||
|
@ -1061,7 +1064,7 @@ CONTAINS
|
|||
nlxc = 0
|
||||
DO i = 1, 6
|
||||
IF (is_libxc(i)) THEN
|
||||
CALL xc_f90_functional_get_name( id_vec(i), lxc_name )
|
||||
lxc_name = xc_f03_functional_get_name( id_vec(i) )
|
||||
DO l = 1, LEN_TRIM(lxc_name)
|
||||
lxc_name(l:l) = capital( lxc_name(l:l) )
|
||||
ENDDO
|
||||
|
@ -1351,13 +1354,15 @@ CONTAINS
|
|||
REAL(DP) :: get_exx_fraction
|
||||
#if defined(__LIBXC)
|
||||
INTEGER :: family
|
||||
TYPE(xc_f90_pointer_t) :: xc_func, xc_info
|
||||
TYPE(xc_f03_func_t) :: xc_func
|
||||
TYPE(xc_f03_func_info_t) :: xc_info
|
||||
!
|
||||
IF ( is_libxc(3) ) THEN
|
||||
CALL xc_f90_func_init( xc_func, xc_info, igcx, 1 )
|
||||
family = xc_f90_info_family( xc_info )
|
||||
IF (family == XC_FAMILY_HYB_GGA) CALL xc_f90_hyb_exx_coef( xc_func, exx_fraction )
|
||||
CALL xc_f90_func_end( xc_func )
|
||||
CALL xc_f03_func_init( xc_func, igcx, 1 )
|
||||
xc_info = xc_f03_func_get_info( xc_func )
|
||||
family = xc_f03_func_info_get_family( xc_info )
|
||||
IF (family == XC_FAMILY_HYB_GGA) exx_fraction = xc_f03_hyb_exx_coef( xc_func )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
#endif
|
||||
get_exx_fraction = exx_fraction
|
||||
|
@ -1426,10 +1431,10 @@ CONTAINS
|
|||
SUBROUTINE get_libxc_flags_exc( xc_info, eflag )
|
||||
! Checks whether Exc is present or not in the output of a libxc
|
||||
! functional (e.g. TB09)
|
||||
TYPE(xc_f90_pointer_t) :: xc_info
|
||||
TYPE(xc_f03_func_info_t) :: xc_info
|
||||
INTEGER :: ii, flags_tot
|
||||
INTEGER, INTENT(OUT) :: eflag
|
||||
flags_tot = xc_f90_info_flags(xc_info)
|
||||
flags_tot = xc_f03_func_info_get_flags(xc_info)
|
||||
eflag = 0
|
||||
DO ii = 15, 0, -1
|
||||
IF ( flags_tot-2**ii<0 ) CYCLE
|
||||
|
|
|
@ -54,8 +54,7 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
!! between q-e and libxc.
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
USE xc_f90_types_m
|
||||
USE xc_f90_lib_m
|
||||
USE xc_f03_lib_m
|
||||
#endif
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -80,8 +79,8 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
! ... local variables
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
TYPE(xc_f90_pointer_t) :: xc_func
|
||||
TYPE(xc_f90_pointer_t) :: xc_info1, xc_info2
|
||||
TYPE(xc_f03_func_t) :: xc_func
|
||||
TYPE(xc_f03_func_info_t) :: xc_info1, xc_info2
|
||||
INTEGER :: fkind_x
|
||||
REAL(DP) :: amag
|
||||
REAL(DP), ALLOCATABLE :: rho_lxc(:)
|
||||
|
@ -137,19 +136,21 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
!
|
||||
! ... EXCHANGE
|
||||
IF ( is_libxc(1) ) THEN
|
||||
CALL xc_f90_func_init( xc_func, xc_info1, iexch, sv_d )
|
||||
CALL xc_f90_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
fkind_x = xc_f90_info_kind( xc_info1 )
|
||||
CALL xc_f90_lda_exc_vxc( xc_func, length, rho_lxc(1), ex_out(1), vx_lxc(1) )
|
||||
CALL xc_f90_func_end( xc_func )
|
||||
CALL xc_f03_func_init( xc_func, iexch, sv_d )
|
||||
xc_info1 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
fkind_x = xc_f03_func_info_get_kind( xc_info1 )
|
||||
CALL xc_f03_lda_exc_vxc( xc_func, length, rho_lxc(1), ex_out(1), vx_lxc(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
! ... CORRELATION
|
||||
IF ( is_libxc(2) ) THEN
|
||||
CALL xc_f90_func_init( xc_func, xc_info2, icorr, sv_d )
|
||||
CALL xc_f90_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
CALL xc_f90_lda_exc_vxc( xc_func, length, rho_lxc(1), ec_out(1), vc_lxc(1) )
|
||||
CALL xc_f90_func_end( xc_func )
|
||||
CALL xc_f03_func_init( xc_func, icorr, sv_d )
|
||||
xc_info2 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
CALL xc_f03_lda_exc_vxc( xc_func, length, rho_lxc(1), ec_out(1), vc_lxc(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
IF ( ((.NOT.is_libxc(1)) .OR. (.NOT.is_libxc(2))) &
|
||||
|
|
Loading…
Reference in New Issue