mirror of https://gitlab.com/QEF/q-e.git
XClib - Libxc dfts with no Exc included
This commit is contained in:
parent
001fe34adf
commit
b8a537d66d
|
@ -65,9 +65,11 @@ PROGRAM xc_infos
|
|||
!
|
||||
CALL xclib_set_dft_from_name( dft )
|
||||
!
|
||||
IF ( xc_kind_error ) WRITE(stdout,*) 'WARNING: This functional includes terms &
|
||||
&that are currently not usable in QE (kin&
|
||||
&etic) and they will be ignored.'
|
||||
#if defined(__LIBXC)
|
||||
IF ( xc_kind_error ) WRITE(stdout,*) 'WARNING: This functional includes Libxc &
|
||||
&terms that are currently not usable in &
|
||||
&QE (kinetic) and they will be ignored.'
|
||||
#endif
|
||||
!
|
||||
iexch = xclib_get_ID('LDA','EXCH')
|
||||
is_libxc(1) = xclib_dft_is_libxc('LDA','EXCH')
|
||||
|
|
|
@ -18,6 +18,7 @@ SUBROUTINE xc_gcx_( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
#include "xc_version.h"
|
||||
USE xc_f03_lib_m
|
||||
USE dft_setting_params, ONLY: xc_func, xc_info
|
||||
USE dft_setting_routines, ONLY: get_libxc_flags_exc
|
||||
#endif
|
||||
!
|
||||
USE kind_l, ONLY: DP
|
||||
|
@ -63,7 +64,7 @@ SUBROUTINE xc_gcx_( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
REAL(DP), PARAMETER :: pi34 = 0.6203504908994_DP
|
||||
!
|
||||
LOGICAL :: POLARIZED
|
||||
INTEGER :: ildax, ildac, pol_unpol
|
||||
INTEGER :: ildax, ildac, pol_unpol, eflag
|
||||
#if (XC_MAJOR_VERSION > 4)
|
||||
INTEGER(8) :: lengthxc
|
||||
#else
|
||||
|
@ -151,11 +152,18 @@ SUBROUTINE xc_gcx_( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
!
|
||||
! ---- GGA CORRELATION
|
||||
!
|
||||
IF (is_libxc(4)) fkind_x = xc_f03_func_info_get_kind( xc_info(4) )
|
||||
!
|
||||
IF ( is_libxc(4) ) THEN !lda part of LYP not present in libxc (still so? - check)
|
||||
!
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func(4), rho_threshold_gga )
|
||||
fkind_x = xc_f03_func_info_get_kind( xc_info(4) )
|
||||
CALL xc_f03_gga_exc_vxc( xc_func(4), lengthxc, rho_lxc(1), sigma(1), ec_lxc(1), vc_rho(1), vc_sigma(1) )
|
||||
CALL get_libxc_flags_exc( xc_info(4), eflag )
|
||||
IF (eflag==1) THEN
|
||||
CALL xc_f03_gga_exc_vxc( xc_func(4), lengthxc, rho_lxc(1), sigma(1), ec_lxc(1), vc_rho(1), vc_sigma(1) )
|
||||
ELSE
|
||||
CALL xc_f03_gga_vxc( xc_func(4), lengthxc, rho_lxc(1), sigma(1), vc_rho(1), vc_sigma(1) )
|
||||
ec_lxc = 0.d0
|
||||
ENDIF
|
||||
!
|
||||
IF (.NOT. POLARIZED) THEN
|
||||
DO k = 1, length
|
||||
|
@ -221,7 +229,7 @@ SUBROUTINE xc_gcx_( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
IF ( igcc/=14 ) CALL gcc_spin( length, rh, zeta, grho2(:,1), ec, v1c, v2c(:,1) )
|
||||
IF ( igcc==14 ) CALL gcc_spin_beef( length, rh, zeta, grho2(:,1), ec, v1c, v2c(:,1) )
|
||||
!
|
||||
v2c(:,2) = v2c(:,1)
|
||||
v2c(:,2) = v2c(:,1)
|
||||
IF ( PRESENT(v2c_ud) ) v2c_ud(:) = v2c(:,1)
|
||||
!
|
||||
DEALLOCATE( rh, zeta )
|
||||
|
@ -239,7 +247,13 @@ SUBROUTINE xc_gcx_( length, ns, rho, grho, ex, ec, v1x, v2x, v1c, v2c, v2c_ud )
|
|||
IF ( is_libxc(3) ) THEN
|
||||
!
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func(3), rho_threshold_gga )
|
||||
CALL xc_f03_gga_exc_vxc( xc_func(3), lengthxc, rho_lxc(1), sigma(1), ex_lxc(1), vx_rho(1), vx_sigma(1) )
|
||||
CALL get_libxc_flags_exc( xc_info(3), eflag )
|
||||
IF (eflag==1) THEN
|
||||
CALL xc_f03_gga_exc_vxc( xc_func(3), lengthxc, rho_lxc(1), sigma(1), ex_lxc(1), vx_rho(1), vx_sigma(1) )
|
||||
ELSE
|
||||
CALL xc_f03_gga_vxc( xc_func(3), lengthxc, rho_lxc(1), sigma(1), vx_rho(1), vx_sigma(1) )
|
||||
ex_lxc = 0.d0
|
||||
ENDIF
|
||||
!
|
||||
IF (.NOT. POLARIZED) THEN
|
||||
DO k = 1, length
|
||||
|
|
|
@ -14,7 +14,8 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
#if defined(__LIBXC)
|
||||
#include "xc_version.h"
|
||||
USE xc_f03_lib_m
|
||||
USE dft_setting_params, ONLY: xc_func, xc_info
|
||||
USE dft_setting_params, ONLY: xc_func, xc_info
|
||||
USE dft_setting_routines, ONLY: get_libxc_flags_exc
|
||||
#endif
|
||||
!
|
||||
USE kind_l, ONLY: DP
|
||||
|
@ -44,7 +45,7 @@ SUBROUTINE xc( length, sr_d, sv_d, rho_in, ex_out, ec_out, vx_out, vc_out )
|
|||
! ... local variables
|
||||
!
|
||||
#if defined(__LIBXC)
|
||||
INTEGER :: fkind_x
|
||||
INTEGER :: fkind_x, eflag
|
||||
REAL(DP) :: amag
|
||||
REAL(DP), ALLOCATABLE :: rho_lxc(:)
|
||||
REAL(DP), ALLOCATABLE :: vx_lxc(:), vc_lxc(:)
|
||||
|
@ -104,15 +105,25 @@ 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_f03_func_set_dens_threshold( xc_func(1), rho_threshold_lda )
|
||||
CALL xc_f03_lda_exc_vxc( xc_func(1), lengthxc, rho_lxc(1), ex_out(1), vx_lxc(1) )
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func(1), rho_threshold_lda )
|
||||
CALL get_libxc_flags_exc( xc_info(1), eflag )
|
||||
IF (eflag==1) THEN
|
||||
CALL xc_f03_lda_exc_vxc( xc_func(1), lengthxc, rho_lxc(1), ex_out(1), vx_lxc(1) )
|
||||
ELSE
|
||||
CALL xc_f03_lda_vxc( xc_func(1), lengthxc, rho_lxc(1), vx_lxc(1) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
!
|
||||
! ... CORRELATION
|
||||
IF ( is_libxc(2) ) THEN
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func(2), rho_threshold_lda )
|
||||
fkind_x = xc_f03_func_info_get_kind( xc_info(2) )
|
||||
CALL xc_f03_lda_exc_vxc( xc_func(2), lengthxc, rho_lxc(1), ec_out(1), vc_lxc(1) )
|
||||
CALL get_libxc_flags_exc( xc_info(2), eflag )
|
||||
IF (eflag==1) THEN
|
||||
CALL xc_f03_lda_exc_vxc( xc_func(2), lengthxc, rho_lxc(1), ec_out(1), vc_lxc(1) )
|
||||
ELSE
|
||||
CALL xc_f03_lda_vxc( xc_func(2), lengthxc, rho_lxc(1), vc_lxc(1) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
!
|
||||
IF ( ((.NOT.is_libxc(1)) .OR. (.NOT.is_libxc(2))) &
|
||||
|
|
|
@ -18,10 +18,10 @@ SUBROUTINE xc_metagcx( length, ns, np, rho, grho, tau, ex, ec, v1x, v2x, v3x, v1
|
|||
USE dft_setting_params, ONLY: xc_func, xc_info
|
||||
#endif
|
||||
!
|
||||
USE kind_l, ONLY: DP
|
||||
USE dft_setting_params, ONLY: imeta, imetac, is_libxc, rho_threshold_mgga, &
|
||||
grho2_threshold_mgga, tau_threshold_mgga, scan_exx, &
|
||||
exx_started, exx_fraction
|
||||
USE kind_l, ONLY: DP
|
||||
USE dft_setting_params, ONLY: imeta, imetac, is_libxc, rho_threshold_mgga, &
|
||||
grho2_threshold_mgga, tau_threshold_mgga, scan_exx, &
|
||||
exx_started, exx_fraction
|
||||
USE qe_drivers_mgga
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -155,6 +155,7 @@ SUBROUTINE xc_metagcx( length, ns, np, rho, grho, tau, ex, ec, v1x, v2x, v3x, v1
|
|||
ELSE
|
||||
CALL xc_f03_mgga_vxc( xc_func(5), lengthxc, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
vx_rho(1), vx_sigma(1), vlapl_rho(1), vx_tau(1) )
|
||||
ex_lxc = 0.d0
|
||||
ENDIF
|
||||
!
|
||||
IF (.NOT. POLARIZED) THEN
|
||||
|
@ -193,8 +194,15 @@ SUBROUTINE xc_metagcx( length, ns, np, rho, grho, tau, ex, ec, v1x, v2x, v3x, v1
|
|||
IF ( is_libxc(6) ) THEN
|
||||
!
|
||||
CALL xc_f03_func_set_dens_threshold( xc_func(6), rho_threshold_mgga )
|
||||
CALL xc_f03_mgga_exc_vxc( xc_func(6), lengthxc, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
CALL get_libxc_flags_exc( xc_info(6), eflag )
|
||||
IF (eflag==1) THEN
|
||||
CALL xc_f03_mgga_exc_vxc( xc_func(6), lengthxc, 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) )
|
||||
ELSE
|
||||
CALL xc_f03_mgga_vxc( xc_func(6), lengthxc, rho_lxc(1), sigma(1), lapl_rho(1), tau_lxc(1), &
|
||||
vc_rho(1), vc_sigma(1), vlapl_rho(1), vc_tau(1) )
|
||||
ec_lxc = 0.d0
|
||||
ENDIF
|
||||
!
|
||||
IF (.NOT. POLARIZED) THEN
|
||||
DO k = 1, length
|
||||
|
|
|
@ -390,9 +390,6 @@ PROGRAM xclib_test
|
|||
!
|
||||
DO id = 1, n_qe_func
|
||||
!
|
||||
|
||||
if (id==160 .or.id==182) cycle
|
||||
|
||||
CALL xclib_reset_dft()
|
||||
!
|
||||
IF ( dft_init=='all_terms' ) THEN
|
||||
|
@ -445,18 +442,17 @@ PROGRAM xclib_test
|
|||
CALL print_test_status( skipped )
|
||||
CYCLE
|
||||
ENDIF
|
||||
#endif
|
||||
! libxc id=576 segfault.. Libxc5.1.5 bug (same name of id(575))
|
||||
IF ( dft_init=='all_libxc' .AND. id==576 ) THEN
|
||||
CALL print_test_status( skipped )
|
||||
CYCLE
|
||||
ENDIF
|
||||
#else
|
||||
! libxc id=576 -> Libxc5.1.5 bug (same name of id=575)
|
||||
IF ( dft_init=='all_libxc' ) THEN
|
||||
#if defined(__LIBXC)
|
||||
IF ( id==576 ) THEN
|
||||
CALL print_test_status( skipped )
|
||||
CYCLE
|
||||
ENDIF
|
||||
dft = xc_f03_functional_get_name( id )
|
||||
IF ( TRIM(dft) == '' ) CYCLE
|
||||
#endif
|
||||
ENDIF
|
||||
#endif
|
||||
!
|
||||
CALL xclib_set_dft_from_name( dft )
|
||||
!
|
||||
|
@ -580,7 +576,7 @@ PROGRAM xclib_test
|
|||
IF (.NOT.xc_derivative) THEN
|
||||
IF (LDA ) naver = 2
|
||||
IF (GGA ) naver = 3
|
||||
IF (MGGA) naver = 4
|
||||
IF (MGGA) naver = 8
|
||||
ELSE
|
||||
IF (LDA ) naver = 1
|
||||
IF (GGA ) naver = 3
|
||||
|
|
Loading…
Reference in New Issue