mirror of https://gitlab.com/QEF/q-e.git
mods for compatibility with libxc5.0.0
This commit is contained in:
parent
23c99610f3
commit
ac97e0da5d
|
@ -41,6 +41,7 @@ SUBROUTINE dgcxc( length, sp, r_in, g_in, dvxc_rr, dvxc_sr, dvxc_ss )
|
|||
REAL(DP), ALLOCATABLE :: rho_lbxc(:)
|
||||
REAL(DP), ALLOCATABLE :: v2rho2_x(:), v2rhosigma_x(:), v2sigma2_x(:)
|
||||
REAL(DP), ALLOCATABLE :: v2rho2_c(:), v2rhosigma_c(:), v2sigma2_c(:)
|
||||
INTEGER(8) :: length8
|
||||
#endif
|
||||
!
|
||||
INTEGER :: igcx, igcc
|
||||
|
@ -54,6 +55,8 @@ SUBROUTINE dgcxc( length, sp, r_in, g_in, dvxc_rr, dvxc_sr, dvxc_ss )
|
|||
igcc = get_igcc()
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
!
|
||||
length8 = length
|
||||
!
|
||||
IF ( (is_libxc(3) .OR. igcx==0) .AND. (is_libxc(4) .OR. igcc==0)) THEN
|
||||
!
|
||||
|
@ -104,7 +107,7 @@ SUBROUTINE dgcxc( length, sp, r_in, g_in, dvxc_rr, dvxc_sr, dvxc_ss )
|
|||
CALL xc_f03_func_init( xc_func, igcx, sp )
|
||||
xc_info1 = xc_f03_func_get_info( xc_func )
|
||||
fkind = xc_f03_func_info_get_kind( xc_info1 )
|
||||
CALL xc_f03_gga_fxc( xc_func, length, rho_lbxc(1), sigma(1), v2rho2_x(1), v2rhosigma_x(1), v2sigma2_x(1) )
|
||||
CALL xc_f03_gga_fxc( xc_func, length8, rho_lbxc(1), sigma(1), v2rho2_x(1), v2rhosigma_x(1), v2sigma2_x(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
|
@ -113,7 +116,7 @@ SUBROUTINE dgcxc( length, sp, r_in, g_in, dvxc_rr, dvxc_sr, dvxc_ss )
|
|||
IF (igcc /= 0) THEN
|
||||
CALL xc_f03_func_init( xc_func, igcc, sp )
|
||||
xc_info2 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_gga_fxc( xc_func, length, rho_lbxc(1), sigma(1), v2rho2_c(1), v2rhosigma_c(1), v2sigma2_c(1) )
|
||||
CALL xc_f03_gga_fxc( xc_func, length8, rho_lbxc(1), sigma(1), v2rho2_c(1), v2rhosigma_c(1), v2sigma2_c(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
|
|
|
@ -43,6 +43,7 @@ SUBROUTINE dmxc( length, sr_d, rho_in, dmuxc )
|
|||
REAL(DP), ALLOCATABLE :: rho_lxc(:)
|
||||
REAL(DP), ALLOCATABLE :: dmxc_lxc(:), dmex_lxc(:), dmcr_lxc(:)
|
||||
LOGICAL :: exch_lxc_avail, corr_lxc_avail
|
||||
INTEGER(8) :: length8
|
||||
#endif
|
||||
!
|
||||
INTEGER :: iexch, icorr
|
||||
|
@ -53,6 +54,8 @@ SUBROUTINE dmxc( length, sr_d, rho_in, dmuxc )
|
|||
icorr = get_icorr()
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
!
|
||||
length8 = length
|
||||
!
|
||||
IF ( (is_libxc(1) .OR. iexch==0) .AND. (is_libxc(2) .OR. icorr==0)) THEN
|
||||
!
|
||||
|
@ -98,7 +101,7 @@ SUBROUTINE dmxc( length, sr_d, rho_in, dmuxc )
|
|||
IF (iexch /= 0) THEN
|
||||
CALL xc_f03_func_init( xc_func, iexch, pol_unpol )
|
||||
xc_info1 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_lda_fxc( xc_func, length, rho_lxc(1), dmex_lxc(1) )
|
||||
CALL xc_f03_lda_fxc( xc_func, length8, rho_lxc(1), dmex_lxc(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
|
@ -107,7 +110,7 @@ SUBROUTINE dmxc( length, sr_d, rho_in, dmuxc )
|
|||
IF (icorr /= 0) THEN
|
||||
CALL xc_f03_func_init( xc_func, icorr, pol_unpol )
|
||||
xc_info2 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_lda_fxc( xc_func, length, rho_lxc(1), dmcr_lxc(1) )
|
||||
CALL xc_f03_lda_fxc( xc_func, length8, rho_lxc(1), dmcr_lxc(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
|
|
|
@ -402,6 +402,8 @@ MODULE funct
|
|||
INTEGER :: libxc_major=0, libxc_minor=0, libxc_micro=0
|
||||
PUBLIC :: libxc_major, libxc_minor, libxc_micro, get_libxc_version
|
||||
PUBLIC :: get_libxc_flags_exc
|
||||
LOGICAL :: lxc_hyb = .FALSE.
|
||||
PRIVATE :: lxc_hyb
|
||||
#endif
|
||||
!
|
||||
CONTAINS
|
||||
|
@ -931,6 +933,7 @@ CONTAINS
|
|||
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 )
|
||||
IF ( matches(TRIM(name), '_HYB') ) lxc_hyb = .TRUE.
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
!
|
||||
SELECT CASE( family )
|
||||
|
@ -946,7 +949,7 @@ CONTAINS
|
|||
ENDIF
|
||||
fkind_v(1) = fkind
|
||||
!
|
||||
CASE( XC_FAMILY_GGA, XC_FAMILY_HYB_GGA )
|
||||
CASE( XC_FAMILY_GGA ) !, XC_FAMILY_HYB_GGA )
|
||||
IF (fkind==XC_EXCHANGE .OR. fkind==XC_EXCHANGE_CORRELATION) THEN
|
||||
IF ( LEN(TRIM(name)) > prev_len(3) ) igcx = i
|
||||
is_libxc(3) = .TRUE.
|
||||
|
@ -958,7 +961,7 @@ CONTAINS
|
|||
ENDIF
|
||||
fkind_v(2) = fkind
|
||||
!
|
||||
CASE( XC_FAMILY_MGGA, XC_FAMILY_HYB_MGGA )
|
||||
CASE( XC_FAMILY_MGGA ) !, XC_FAMILY_HYB_MGGA )
|
||||
IF (fkind==XC_EXCHANGE .OR. fkind==XC_EXCHANGE_CORRELATION) THEN
|
||||
IF ( LEN(TRIM(name)) > prev_len(5) ) imeta = i
|
||||
is_libxc(5) = .TRUE.
|
||||
|
@ -1342,15 +1345,15 @@ CONTAINS
|
|||
FUNCTION get_exx_fraction()
|
||||
REAL(DP) :: get_exx_fraction
|
||||
#if defined(__LIBXC)
|
||||
INTEGER :: family
|
||||
!INTEGER :: family
|
||||
TYPE(xc_f03_func_t) :: xc_func
|
||||
TYPE(xc_f03_func_info_t) :: xc_info
|
||||
!TYPE(xc_f03_func_info_t) :: xc_info
|
||||
!
|
||||
IF ( is_libxc(3) ) THEN
|
||||
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 )
|
||||
!xc_info = xc_f03_func_get_info( xc_func )
|
||||
!family = xc_f03_func_info_get_family( xc_info )
|
||||
IF ( lxc_hyb ) exx_fraction = xc_f03_hyb_exx_coef( xc_func )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
#endif
|
||||
|
|
|
@ -97,6 +97,7 @@ SUBROUTINE xc_gcx( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
!
|
||||
LOGICAL :: POLARIZED
|
||||
INTEGER :: ildax, ildac, pol_unpol
|
||||
INTEGER(8) :: length8
|
||||
#endif
|
||||
REAL(DP), ALLOCATABLE :: arho(:,:)
|
||||
REAL(DP), ALLOCATABLE :: rh(:), zeta(:)
|
||||
|
@ -119,6 +120,8 @@ SUBROUTINE xc_gcx( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
IF ( PRESENT(v2c_ud) ) v2c_ud = 0.0_DP
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
!
|
||||
length8 = length
|
||||
!
|
||||
POLARIZED = .FALSE.
|
||||
IF (ns == 2) THEN
|
||||
|
@ -182,7 +185,7 @@ SUBROUTINE xc_gcx( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
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_gga_exc_vxc( xc_func, length, rho_lxc(1), sigma(1), ex_lxc(1), vx_rho(1), vx_sigma(1) )
|
||||
CALL xc_f03_gga_exc_vxc( xc_func, length8, rho_lxc(1), sigma(1), ex_lxc(1), vx_rho(1), vx_sigma(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
!
|
||||
IF (.NOT. POLARIZED) THEN
|
||||
|
@ -226,7 +229,7 @@ SUBROUTINE xc_gcx( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
CALL xc_f03_func_init( xc_func, igcc, pol_unpol )
|
||||
xc_info2 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
CALL xc_f03_gga_exc_vxc( xc_func, length, rho_lxc(1), sigma(1), ec_lxc(1), vc_rho(1), vc_sigma(1) )
|
||||
CALL xc_f03_gga_exc_vxc( xc_func, length8, rho_lxc(1), sigma(1), ec_lxc(1), vc_rho(1), vc_sigma(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
!
|
||||
IF (.NOT. POLARIZED) THEN
|
||||
|
|
|
@ -85,6 +85,7 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
REAL(DP) :: amag
|
||||
REAL(DP), ALLOCATABLE :: rho_lxc(:)
|
||||
REAL(DP), ALLOCATABLE :: vx_lxc(:), vc_lxc(:)
|
||||
INTEGER(8) :: length8
|
||||
#endif
|
||||
!
|
||||
REAL(DP), ALLOCATABLE :: arho(:), zeta(:)
|
||||
|
@ -98,6 +99,8 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
ec_out = 0.0_DP ; vc_out = 0.0_DP
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
!
|
||||
length8 = length
|
||||
!
|
||||
IF ( ANY(is_libxc(1:2)) ) THEN
|
||||
!
|
||||
|
@ -140,7 +143,7 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
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_lda_exc_vxc( xc_func, length8, rho_lxc(1), ex_out(1), vx_lxc(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
|
@ -149,7 +152,7 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
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_lda_exc_vxc( xc_func, length8, rho_lxc(1), ec_out(1), vc_lxc(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
ENDIF
|
||||
!
|
||||
|
|
|
@ -102,6 +102,9 @@ SUBROUTINE xc_metagcx( length, ns, np, rho, grho, tau, ex, ec, v1x, v2x, v3x, v1
|
|||
REAL(DP) :: exx_fraction
|
||||
INTEGER :: k, ipol, pol_unpol, eflag
|
||||
LOGICAL :: POLARIZED
|
||||
INTEGER(8) :: length8
|
||||
!
|
||||
length8 = length
|
||||
!
|
||||
imeta = get_meta()
|
||||
imetac = get_metac()
|
||||
|
@ -181,10 +184,10 @@ SUBROUTINE xc_metagcx( length, ns, np, rho, grho, tau, ex, ec, v1x, v2x, v3x, v1
|
|||
CALL xc_f03_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
CALL get_libxc_flags_exc( xc_info1, eflag )
|
||||
IF (eflag==1) THEN
|
||||
CALL xc_f03_mgga_exc_vxc( xc_func, length, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
CALL xc_f03_mgga_exc_vxc( xc_func, length8, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
ex_lxc(1), vx_rho(1), vx_sigma(1), vlapl_rho(1), vx_tau(1) )
|
||||
ELSE
|
||||
CALL xc_f03_mgga_vxc( xc_func, length, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
CALL xc_f03_mgga_vxc( xc_func, length8, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
vx_rho(1), vx_sigma(1), vlapl_rho(1), vx_tau(1) )
|
||||
ENDIF
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
|
@ -228,7 +231,7 @@ SUBROUTINE xc_metagcx( length, ns, np, rho, grho, tau, ex, ec, v1x, v2x, v3x, v1
|
|||
CALL xc_f03_func_init( xc_func, imetac, pol_unpol )
|
||||
xc_info1 = xc_f03_func_get_info( xc_func )
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func, rho_threshold )
|
||||
CALL xc_f03_mgga_exc_vxc( xc_func, length, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
CALL xc_f03_mgga_exc_vxc( xc_func, length8, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
ec_lxc(1), vc_rho(1), vc_sigma(1), vlapl_rho(1), vc_tau(1) )
|
||||
CALL xc_f03_func_end( xc_func )
|
||||
!
|
||||
|
|
|
@ -121,7 +121,7 @@ FFLAGS_NOMAIN = @fflags_nomain@
|
|||
|
||||
# Linker, linker-specific flags (if any)
|
||||
# Typically LD coincides with F90 or MPIF90, LD_LIBS is empty
|
||||
# for libxc, set LD_LIBS=-L/path/to/libxc/lib/ -lxcf03 -lxc
|
||||
# for libxc, set LD_LIBS=-L/path/to/libxc/lib/ -lxcf90 -lxc
|
||||
|
||||
LD = @ld@
|
||||
LDFLAGS = @ldflags@
|
||||
|
|
Loading…
Reference in New Issue