mods for compatibility with libxc5.0.0

This commit is contained in:
fabrizio22 2020-06-16 13:14:24 +02:00
parent 23c99610f3
commit ac97e0da5d
7 changed files with 37 additions and 19 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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