From 77d23ca99440720f8ac73cb9920bdb7ade99e5c7 Mon Sep 17 00:00:00 2001 From: Daniel Mejia-Rodriguez Date: Mon, 19 Dec 2022 16:00:33 -0800 Subject: [PATCH 1/2] Changes for LibXC 4.x --- src/nwdft/libxc/nwchem_libxc_compute.F | 53 ++++++++++++++++++++++---- src/nwdft/libxc/nwchem_libxc_util.F | 12 +----- 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/nwdft/libxc/nwchem_libxc_compute.F b/src/nwdft/libxc/nwchem_libxc_compute.F index d029e2d82b..b0b7afa8d5 100644 --- a/src/nwdft/libxc/nwchem_libxc_compute.F +++ b/src/nwdft/libxc/nwchem_libxc_compute.F @@ -159,8 +159,8 @@ fac = libxc_facts(ifunc) call xc_f03_func_init(xcfunc,libxc_funcs(ifunc),polarized) -#if XC_MAJOR_VERSION > 4 call xc_f03_func_set_dens_threshold(xcfunc, tol_rho) +#if XC_MAJOR_VERSION > 4 call xc_f03_func_set_sigma_threshold(xcfunc, tol_rho**2) call xc_f03_func_set_zeta_threshold(xcfunc, 1d-10) #endif @@ -178,7 +178,9 @@ call xc_f03_lda_exc_vxc_fxc(xcfunc,nqs,dbl_mb(krho), $ dbl_mb(kexc),dbl_mb(kvrho),dbl_mb(kv2rho2)) #else - call errquit(' libxc interface incomplete',0,0) + call xc_f03_lda_exc_vxc(xcfunc,nqs,dbl_mb(krho), + $ dbl_mb(kexc),dbl_mb(kvrho)) + call xc_f03_lda_fxc(xcfunc,nqs,dbl_mb(krho),dbl_mb(kv2rho2)) #endif else #if XC_MAJOR_VERSION > 4 @@ -186,7 +188,10 @@ $ dbl_mb(kexc),dbl_mb(kvrho),dbl_mb(kv2rho2), $ dbl_mb(kv3rho3)) #else - call errquit(' libxc interface incomplete',0,0) + call xc_f03_lda_exc_vxc(xcfunc,nqs,dbl_mb(krho), + $ dbl_mb(kexc),dbl_mb(kvrho)) + call xc_f03_lda_fxc(xcfunc,nqs,dbl_mb(krho),dbl_mb(kv2rho2)) + call xc_f03_lda_kxc(xcfunc,nqs,dbl_mb(krho),dbl_mb(kv3rho3)) #endif endif @@ -210,7 +215,14 @@ $ dbl_mb(kvrho),dbl_mb(kvsigma),dbl_mb(kv2rho2), $ dbl_mb(kv2rhosig),dbl_mb(kv2sig2)) #else - call errquit(' libxc interface incomplete',0,0) + call xc_f03_gga_exc_vxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kexc), + $ dbl_mb(kvrho),dbl_mb(kvsigma)) + call xc_f03_gga_fxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kv2rho2),dbl_mb(kv2rhosig), + $ dbl_mb(kv2sig2)) #endif else #if XC_MAJOR_VERSION > 4 @@ -221,7 +233,18 @@ $ dbl_mb(kv3rho3),dbl_mb(kv3rho2sig), $ dbl_mb(kv3rhosig2),dbl_mb(kv3sig3)) #else - call errquit(' libxc interface incomplete',0,0) + call xc_f03_gga_exc_vxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kexc), + $ dbl_mb(kvrho),dbl_mb(kvsigma)) + call xc_f03_gga_fxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kv2rho2),dbl_mb(kv2rhosig), + $ dbl_mb(kv2sig2)) + call xc_f03_gga_kxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kv3rho3),dbl_mb(kv3rho2sig), + $ dbl_mb(kv3rhosig2),dbl_mb(kv3sig3)) #endif endif else @@ -236,7 +259,13 @@ $ dbl_mb(kvrho),dbl_mb(kvsigma),dbl_mb(kv2rho2), $ dbl_mb(kv2rhosig),dbl_mb(kv2sig2)) #else - call errquit(' libxc interface incomplete',0,0) + call xc_f03_gga_vxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kvrho),dbl_mb(kvsigma)) + call xc_f03_gga_fxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kv2rho2),dbl_mb(kv2rhosig), + $ dbl_mb(kv2sig2)) #endif else #if XC_MAJOR_VERSION > 4 @@ -247,7 +276,17 @@ $ dbl_mb(kv3rho3),dbl_mb(kv3rho2sig), $ dbl_mb(kv3rhosig2),dbl_mb(kv3sig3)) #else - call errquit(' libxc interface incomplete',0,0) + call xc_f03_gga_vxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kvrho),dbl_mb(kvsigma)) + call xc_f03_gga_fxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kv2rho2),dbl_mb(kv2rhosig), + $ dbl_mb(kv2sig2)) + call xc_f03_gga_kxc(xcfunc,nqs, + $ dbl_mb(krho),dbl_mb(ksigma), + $ dbl_mb(kv3rho3),dbl_mb(kv3rho2sig), + $ dbl_mb(kv3rhosig2),dbl_mb(kv3sig3)) #endif endif call dfill(nq,0d0,dbl_mb(kexc),1) diff --git a/src/nwdft/libxc/nwchem_libxc_util.F b/src/nwdft/libxc/nwchem_libxc_util.F index 57e95e679e..36b370af18 100644 --- a/src/nwdft/libxc/nwchem_libxc_util.F +++ b/src/nwdft/libxc/nwchem_libxc_util.F @@ -73,11 +73,7 @@ subroutine nwchem_libxc_print use,intrinsic :: iso_c_binding #ifdef USE_LIBXC - use xc_f03_lib_m, only: xc_f03_version_string, -#if XC_MAJOR_VERSION > 4 - $ xc_f03_reference, -#endif - $ xc_f03_functional_get_name + use xc_f03_lib_m, only: xc_f03_functional_get_name #endif implicit none @@ -111,11 +107,7 @@ subroutine nwchem_libxc_print_header use,intrinsic :: iso_c_binding #ifdef USE_LIBXC - use xc_f03_lib_m, only: xc_f03_version_string, -#if XC_MAJOR_VERSION > 4 - $ xc_f03_reference, -#endif - $ xc_f03_functional_get_name + use xc_f03_lib_m, only: xc_f03_version_string #endif implicit none From 294175a88ddd79fae4ff1e060c83505560ac110a Mon Sep 17 00:00:00 2001 From: Daniel Mejia-Rodriguez Date: Mon, 19 Dec 2022 16:17:25 -0800 Subject: [PATCH 2/2] Adjust sigma threshold (libxc uses the square of this value) --- src/nwdft/libxc/nwchem_libxc_compute.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nwdft/libxc/nwchem_libxc_compute.F b/src/nwdft/libxc/nwchem_libxc_compute.F index b0b7afa8d5..f188b98507 100644 --- a/src/nwdft/libxc/nwchem_libxc_compute.F +++ b/src/nwdft/libxc/nwchem_libxc_compute.F @@ -161,7 +161,7 @@ call xc_f03_func_init(xcfunc,libxc_funcs(ifunc),polarized) call xc_f03_func_set_dens_threshold(xcfunc, tol_rho) #if XC_MAJOR_VERSION > 4 - call xc_f03_func_set_sigma_threshold(xcfunc, tol_rho**2) + call xc_f03_func_set_sigma_threshold(xcfunc, tol_rho) call xc_f03_func_set_zeta_threshold(xcfunc, 1d-10) #endif select case(libxc_family(ifunc))