diff --git a/src/nwdft/input_dft/dft_rdinput.F b/src/nwdft/input_dft/dft_rdinput.F index 81d3565eb0..ac03d289cc 100644 --- a/src/nwdft/input_dft/dft_rdinput.F +++ b/src/nwdft/input_dft/dft_rdinput.F @@ -703,6 +703,7 @@ c xname(83)=' MN15-L Exchange Functional' xname(84)=' MN15 Exchange Functional' xname(85)=' M06-SX Exchange Functional' + xname(87)=' NCAPR GGA Exchange Functional' c c Exchange-Correlation combination functional name defaults. c @@ -785,6 +786,7 @@ c xcname(84)=' MN15 Method XC Functional' xcname(85)=' M06-SX Method XC Functional' xcname(86)=' r^2SCAN0 Method XC Functional' + xcname(87)=' NCAPR Method XC Functional' c c place character XC parameters in rtdb c diff --git a/src/nwdft/input_dft/xc_inp.F b/src/nwdft/input_dft/xc_inp.F index f59a74d3e2..696ef9c8f4 100644 --- a/src/nwdft/input_dft/xc_inp.F +++ b/src/nwdft/input_dft/xc_inp.F @@ -153,7 +153,7 @@ c c r2scan0 ==> 19 c integer num_dirs, ind, mlen, iline, n, itemp - parameter (num_dirs=168) + parameter (num_dirs=169) c character*15 dirs(num_dirs) character*255 test @@ -212,7 +212,7 @@ c & 'xscan', 'cscan', & 'hcth147@tz2p', W 'wb97','wb97x','wb97x-d3', - & 'xr2scan', 'cr2scan','r2scan0' / + & 'xr2scan', 'cr2scan','r2scan0', 'ncapr' / c becke97-d, ssb-d logical disp, dumdirect integer ivdw @@ -298,7 +298,8 @@ c & 9710,9720,9650,9660,9615,9616, & 1947, & 9410,9420,9430, - & 9661,9662,9670, + & 9661,9662,9670, + & 9730, & 1999 ) ind @@ -1817,6 +1818,17 @@ c nlxfac(72) = .true. xfac(72) = 1.0d0 goto 10 + + +9730 xccomb(87) = .true. + cfac(3) = 1d0 + lcfac(3) = .true. + cfac(4) = 1d0 + nlcfac(4) = .true. + lxfac(87) = .true. + nlxfac(87) = .true. + xfac(87) = 1.0d0 + goto 10 c c r2SCAN metaGGA c diff --git a/src/nwdft/lr_tddft/tddft_analysis.F b/src/nwdft/lr_tddft/tddft_analysis.F index 6d6d13712c..53f66fe845 100644 --- a/src/nwdft/lr_tddft/tddft_analysis.F +++ b/src/nwdft/lr_tddft/tddft_analysis.F @@ -1646,6 +1646,7 @@ c Clean scratch space if (nodezero) call util_flush(LuOut) c endif ! gmh + c enddo ! outer loop over roots c diff --git a/src/nwdft/xc/xc_eval_fnl.F b/src/nwdft/xc/xc_eval_fnl.F index 991ae62c56..3f27d51b83 100644 --- a/src/nwdft/xc/xc_eval_fnl.F +++ b/src/nwdft/xc/xc_eval_fnl.F @@ -1855,15 +1855,32 @@ c if (.not. do_2nd .and..not. do_3rd) then call xc_xncap(tol_rho, xfac(72), rho, & delrho, Amat, Cmat, nq, ipol, - & Ex, qwght, ldew, func) + & Ex, qwght, ldew, func, ' ') else if (.not. do_3rd) then call xc_xncap_d2(tol_rho, xfac(72), rho, & delrho, Amat, Amat2, Cmat, Cmat2, nq, ipol, - & Ex, qwght, ldew, func) + & Ex, qwght, ldew, func, ' ') else call xc_xncap_d3(tol_rho, xfac(72), rho, & delrho, Amat, Amat2, Amat3, Cmat, Cmat2, Cmat3, - & nq, ipol, Ex, qwght, ldew, func) + & nq, ipol, Ex, qwght, ldew, func, ' ') + endif + endif +c + + if (abs(xfac(87)).gt.eps)then + if (.not. do_2nd .and..not. do_3rd) then + call xc_xncap(tol_rho, xfac(87), rho, + & delrho, Amat, Cmat, nq, ipol, + & Ex, qwght, ldew, func, 'r') + else if (.not. do_3rd) then + call xc_xncap_d2(tol_rho, xfac(87), rho, + & delrho, Amat, Amat2, Cmat, Cmat2, nq, ipol, + & Ex, qwght, ldew, func, 'r') + else + call xc_xncap_d3(tol_rho, xfac(87), rho, + & delrho, Amat, Amat2, Amat3, Cmat, Cmat2, Cmat3, + & nq, ipol, Ex, qwght, ldew, func, 'r') endif endif c diff --git a/src/nwdft/xc/xc_xncap.F b/src/nwdft/xc/xc_xncap.F index 02e3223b39..26525d4658 100644 --- a/src/nwdft/xc/xc_xncap.F +++ b/src/nwdft/xc/xc_xncap.F @@ -32,19 +32,23 @@ c c #if !defined SECOND_DERIV && !defined THIRD_DERIV Subroutine xc_xncap(tol_rho, fac, rho, delrho, - & Amat, Cmat, nq, ipol, Ex, qwght,ldew,func) + & Amat, Cmat, nq, ipol, Ex, qwght,ldew,func, + & version) #elif defined(SECOND_DERIV) && !defined THIRD_DERIV Subroutine xc_xncap_d2(tol_rho, fac, rho, delrho, & Amat, Amat2, Cmat, Cmat2, nq, ipol, Ex, - & qwght,ldew,func) + & qwght,ldew,func, + & version) #else Subroutine xc_xncap_d3(tol_rho, fac, rho, delrho, & Amat, Amat2, Amat3, Cmat, Cmat2, Cmat3, - & nq, ipol, Ex, qwght,ldew,func) + & nq, ipol, Ex, qwght,ldew,func, + & version) #endif c implicit none -c +c + character*1 version double precision fac, Ex integer nq, ipol logical ldew @@ -77,8 +81,7 @@ c double precision ckf, Ax double precision F43, F13, F23, F49 c - parameter(mu=0.2195149727645171d0, beta=0.01808569669d0) - parameter(zeta=0.30412141859531383d0) + parameter(mu=0.2195149727645171d0) parameter (F43=4.d0/3.d0, F13=1.d0/3.d0, F23=2.0d0/3.0d0) parameter (F49=4d0/9d0) @@ -105,6 +108,14 @@ c d2arcsinh(s) = -s/dsqrt(1d0+s*s)**3 d3arcsinh(s) = (2d0*s*s - 1d0)/dsqrt(1d0+s*s)**5 c + if (version.eq.'r') then + zeta = 0.5d0 + beta = 0.017983d0 + else + zeta = 0.30412141859531383d0 + beta = 0.01808569669d0 + endif + pi = acos(-1.d0) ckf = (3d0*pi*pi)**F13 Ax = -3d0/(4d0*pi)*ckf