36#include "../base/base_uses.f90"
41 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
42 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xc_tpss'
59 SUBROUTINE tpss_lda_info(tpss_params, reference, shortform, needs, max_deriv)
61 CHARACTER(LEN=*),
INTENT(OUT),
OPTIONAL :: reference, shortform
63 INTEGER,
INTENT(out),
OPTIONAL :: max_deriv
65 REAL(kind=
dp) :: sc, sx
70 IF (
PRESENT(reference))
THEN
71 IF (sx == 1._dp .AND. sc == 1._dp)
THEN
72 reference =
"J. Tao, J.P.Perdew, V.N.Staroverov, E.Scuseria PRL, 91, 146401 (2003) {LDA version}"
74 WRITE (reference,
"(a,'sx=',f5.3,'sc=',f5.3,' {LDA version}')") &
75 "J. Tao, J.P.Perdew, V.N.Staroverov, E.Scuseria PRL, 91, 146401 (2003)", &
79 IF (
PRESENT(shortform))
THEN
80 IF (sx == 1._dp .AND. sc == 1._dp)
THEN
81 shortform =
"TPSS meta-GGA functional (LDA)"
83 WRITE (shortform,
"(a,'sx=',f5.3,'sc=',f5.3,' (LDA)')") &
84 "TPSS meta-GGA functional", &
88 IF (
PRESENT(needs))
THEN
91 needs%norm_drho = .true.
93 IF (
PRESENT(max_deriv)) max_deriv = 1
109 INTEGER,
INTENT(in) :: grad_deriv
112 CHARACTER(len=*),
PARAMETER :: routinen =
'tpss_lda_eval'
114 INTEGER :: handle, non_coer, npoints
115 INTEGER,
DIMENSION(2, 3) :: bo
116 REAL(kind=
dp) :: epsilon_rho, epsilon_tau, scale_ec, &
118 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :), &
119 POINTER :: dummy, e_0, e_ndrho, e_rho, e_tau, &
124 CALL timeset(routinen, handle)
129 norm_drho=norm_drho, local_bounds=bo, rho_cutoff=epsilon_rho, &
130 tau=tau, tau_cutoff=epsilon_tau)
131 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
140 IF (grad_deriv >= 0)
THEN
142 allocate_deriv=.true.)
145 IF (grad_deriv >= 1)
THEN
147 allocate_deriv=.true.)
150 allocate_deriv=.true.)
153 allocate_deriv=.true.)
156 IF (grad_deriv > 1)
THEN
157 cpabort(
"derivatives bigger than 1 not implemented")
170 CALL tpss_lda_calc(rho=rho, norm_drho=norm_drho, &
171 tau=tau, e_0=e_0, e_rho=e_rho, e_ndrho=e_ndrho, e_tau=e_tau, &
172 grad_deriv=grad_deriv, npoints=npoints, epsilon_rho=epsilon_rho, &
173 epsilon_tau=epsilon_tau, scale_ec=scale_ec, scale_ex=scale_ex, non_coer=non_coer)
179 IF (non_coer > 0)
THEN
183 CALL timestop(handle)
207 SUBROUTINE tpss_lda_calc(rho, norm_drho, tau, e_0, e_rho, e_ndrho, e_tau, &
208 npoints, grad_deriv, epsilon_rho, epsilon_tau, &
209 scale_ec, scale_ex, non_coer)
210 REAL(kind=
dp),
DIMENSION(*),
INTENT(in) :: rho, norm_drho, tau
211 REAL(kind=
dp),
DIMENSION(*),
INTENT(inout) :: e_0, e_rho, e_ndrho, e_tau
212 INTEGER,
INTENT(in) :: npoints, grad_deriv
213 REAL(kind=
dp),
INTENT(in) :: epsilon_rho, epsilon_tau, scale_ec, &
215 INTEGER,
INTENT(inout) :: non_coer
218 LOGICAL :: clipped_tau, floored_tau, t571, t639
219 REAL(
dp) :: incoming_gradient, incoming_rho, incoming_tau, partial_gradient, partial_rho, &
220 partial_tau, tau_floor, tau_unif_inverse
221 REAL(kind=
dp) :: a, a_1, a_2, a_s1, a_s1rho, a_s2, a_s2rho, alpha, alpha_1_1, alpha_1_2, &
222 alphanorm_drho, alpharho, alphatau, arho, b, beta, beta_1_1, beta_1_2, beta_2_1, &
223 beta_2_2, beta_3_1, beta_3_2, beta_4_1, beta_4_2, c, d, e_c_u_0, e_c_u_0rho, e_c_u_1_s1, &
224 e_c_u_1_s1rho, e_c_u_1_s2, e_c_u_1_s2rho, e_var, epsilon_cgga, epsilon_cgga_0_1, &
225 epsilon_cgga_1_0, epsilon_cggarho, epsilon_crevpkzb, epsilon_crevpkzbnorm_drho, &
226 epsilon_crevpkzbrho, epsilon_crevpkzbtau, ex_unif, fx, gamma_var, hnorm_drho, k_f_s1, &
227 k_f_s1rho, k_s, k_s_s1, k_s_s2, kappa, m, ma, manorm_drho, marho, mb, mbnorm_drho, mbrho
228 REAL(kind=
dp) :: mu, my_ndrho, my_rho, my_tau, p, p_1, p_2, p_3, phi_s1, phi_s2, pnorm_drho, &
229 prho, regular_tau, rs, rs_s1, rs_s1rho, rs_s2, rs_s2rho, rsrho, t, t1, t100, t101, t111, &
230 t12, t13, t138, t14, t140, t143, t145, t146, t147, t151, t152, t16, t161, t168, t177, &
231 t186, t187, t189, t19, t190, t191, t193, t194, t196, t197, t198, t199, t2, t20, t201, &
232 t202, t204, t205, t208, t209, t21, t211, t212, t213, t215, t216, t218, t219, t22, t220, &
233 t221, t223, t224, t226, t227, t230, t231, t233, t234, t235, t238, t239, t241, t242, t243, &
234 t245, t246, t248, t249, t252, t253, t254, t256, t26, t260, t263
235 REAL(kind=
dp) :: t264, t265, t267, t268, t269, t27, t271, t272, t274, t275, t276, t277, &
236 t278, t279, t28, t280, t281, t284, t286, t29, t290, t291, t293, t294, t295, t299, t3, &
237 t301, t302, t303, t305, t307, t310, t313, t316, t319, t322, t325, t327, t328, t329, t331, &
238 t337, t340, t343, t344, t35, t351, t36, t370, t371, t376, t383, t385, t386, t39, t390, &
239 t391, t395, t396, t398, t4, t403, t404, t406, t41, t410, t411, t419, t42, t437, t445, &
240 t450, t452, t464, t472, t475, t485, t489, t49, t490, t5, t505, t513, t517, t536, t541, &
241 t542, t546, t547, t549, t55, t554, t555, t557, t561, t562, t569, t574
242 REAL(kind=
dp) :: t58, t585, t6, t60, t604, t609, t610, t614, t615, t617, t622, t623, t625, &
243 t629, t630, t637, t642, t645, t659, t67, t7, t71, t73, t77, t78, t79, t799, t80, t84, &
244 t85, t89, t9, t94, t95, t96, t_s1, t_s1norm_drho, t_s1rho, t_s2, t_s2norm_drho, t_s2rho, &
245 tau_w, tau_wnorm_drho, tau_wrho, tildeq_b, tildeq_bnorm_drho, tildeq_brho, tildeq_btau, &
246 tnorm_drho, trho, z, znorm_drho, zrho, ztau
251 gamma_var = (0.1e1_dp - log(0.2e1_dp))/
pi**2
258 alpha_1_1 = 0.21370e0_dp
259 beta_1_1 = 0.75957e1_dp
260 beta_2_1 = 0.35876e1_dp
261 beta_3_1 = 0.16382e1_dp
262 beta_4_1 = 0.49294e0_dp
265 alpha_1_2 = 0.20548e0_dp
266 beta_1_2 = 0.141189e2_dp
267 beta_2_2 = 0.61977e1_dp
268 beta_3_2 = 0.33662e1_dp
269 beta_4_2 = 0.62517e0_dp
272 tau_floor = max(epsilon_tau, epsilon(0.0_dp))
273 t1 = 3._dp**(0.1e1_dp/0.3e1_dp)
274 t2 = 4._dp**(0.1e1_dp/0.3e1_dp)
277 t5 = 2._dp**(0.1e1_dp/0.3e1_dp)
287 floored_tau = tau(ii) <= tau_floor
288 regular_tau = max(tau(ii), tau_floor)
291 IF (my_rho > epsilon_rho)
THEN
292 my_ndrho = norm_drho(ii)
293 IF (grad_deriv > 0)
THEN
294 incoming_rho = e_rho(ii)
295 incoming_gradient = e_ndrho(ii)
296 incoming_tau = e_tau(ii)
301 tau_w = t254*t7/0.8e1_dp
303 clipped_tau = my_tau < tau_w
304 IF (clipped_tau)
THEN
306 m = 0.5_dp*t254 + 4.0_dp*my_rho*my_tau
307 my_tau = m/8._dp/my_rho
311 non_coer = non_coer + 1
314 t9 = (t6*t7)**(0.1e1_dp/0.3e1_dp)
315 rs_s1 = t4*t5*t9/0.4e1_dp
316 phi_s1 = t12/0.2e1_dp
319 t16 = (t14*my_rho)**(0.1e1_dp/0.3e1_dp)
320 k_f_s1 = t13*t16/0.2e1_dp
321 t19 = sqrt(k_f_s1*t6)
322 k_s_s1 = 0.2e1_dp*t19
323 t20 = 0.1e1_dp/phi_s1
325 t22 = 0.1e1_dp/k_s_s1
326 t_s1 = t21*t22*t7/0.2e1_dp
329 t26 = sqrt(k_f_s1*t6)
330 k_s_s2 = 0.2e1_dp*t26
331 t27 = 0.1e1_dp/phi_s2
333 t29 = 0.1e1_dp/k_s_s2
334 t_s2 = t28*t29*t7/0.2e1_dp
340 t49 = log(0.1e1_dp + t35/(beta_1_1*t36 + beta_2_1*rs_s2 + &
341 beta_3_1*t39 + beta_4_1*t42)/0.2e1_dp)
345 t67 = log(0.1e1_dp + t35/(beta_1_1*t55 + beta_2_1*rs_s1 + &
346 beta_3_1*t58 + beta_4_1*t60)/0.2e1_dp)
347 t71 = 0.1e1_dp + alpha_1_2*rs_s2
352 t80 = beta_1_2*t36 + beta_2_2*rs_s2 + beta_3_2*t39 + t79
353 t84 = 0.1e1_dp + t73/t80/0.2e1_dp
355 e_c_u_1_s2 = -0.2e1_dp*a_2*t71*t85
356 t89 = 0.1e1_dp + alpha_1_2*rs_s1
359 t96 = beta_1_2*t55 + beta_2_2*rs_s1 + beta_3_2*t58 + t95
360 t100 = 0.1e1_dp + t73/t96/0.2e1_dp
362 e_c_u_1_s1 = -0.2e1_dp*a_2*t89*t101
365 t138 = 0.1e1_dp + alpha_1_1*rs
370 t147 = beta_1_1*t140 + beta_2_1*rs + beta_3_1*t143 + t146
371 t151 = 0.1e1_dp + t35/t147/0.2e1_dp
373 e_c_u_0 = -0.2e1_dp*a_1*t138*t152
375 t168 = log(0.1e1_dp + t73/(beta_1_2*t140 + beta_2_2*rs + &
376 beta_3_2*t143 + beta_4_2*t161)/0.2e1_dp)
378 t186 = 0.1e1_dp/gamma_var
383 t193 = exp(-e_c_u_1_s1*t186*t191)
384 t194 = t193 - 0.1e1_dp
386 t196 = gamma_var*t190
389 t199 = 0.1e1_dp + t198
392 t204 = 0.1e1_dp + t198 + t201*t202
394 t208 = 0.1e1_dp + t187*t197*t199*t205
396 epsilon_cgga_1_0 = e_c_u_1_s1 + t196*t209
400 t215 = exp(-e_c_u_1_s2*t186*t213)
401 t216 = t215 - 0.1e1_dp
403 t218 = gamma_var*t212
406 t221 = t220 + 0.1e1_dp
409 t226 = 0.1e1_dp + t220 + t223*t224
411 t230 = 0.1e1_dp + t187*t219*t221*t227
413 epsilon_cgga_0_1 = e_c_u_1_s2 + t218*t231
414 t233 = sqrt(t1*t16*t6)
419 t238 = exp(-e_c_u_0*t186)
420 t239 = -0.1e1_dp + t238
424 t243 = 0.1e1_dp + t242
427 t248 = 0.1e1_dp + t242 + t245*t246
429 t252 = 0.1e1_dp + t187*t241*t243*t249
431 epsilon_cgga = e_c_u_0 + gamma_var*t253
432 ma = max(epsilon_cgga_1_0, epsilon_cgga)
433 mb = max(epsilon_cgga_0_1, epsilon_cgga)
435 t260 = ma/0.2e1_dp + mb/0.2e1_dp
436 t263 = 0.53e0_dp*epsilon_cgga*t256 - 0.153e1_dp*t256*t260
439 epsilon_crevpkzb = epsilon_cgga + t263*t265
440 t267 = my_rho*epsilon_crevpkzb
441 t268 = d*epsilon_crevpkzb
443 t271 = 0.1e1_dp/t264/my_tau
445 t274 = 0.1e1_dp + t268*t272
447 t276 = t14**(0.1e1_dp/0.3e1_dp)
451 t280 = my_rho**(0.1e1_dp/0.3e1_dp)
453 t284 = t278/t281/t279
454 p = t275*t284/0.12e2_dp
455 t286 = 0.1e1_dp/my_tau
458 tau_unif_inverse = 10.0_dp/9.0_dp*t1*t278/(t281*my_rho)
459 alpha = (my_tau - tau_w)*tau_unif_inverse
460 t290 = alpha - 0.1e1_dp
462 t293 = 0.1e1_dp + t291*t290
465 tildeq_b = 0.9e1_dp/0.20e2_dp*t290*t295 + 0.2e1_dp/0.3e1_dp*p
467 t301 = 0.1e1_dp + t299
470 t305 = 0.10e2_dp/0.81e2_dp + c*t299*t303
473 t313 = sqrt(0.18e2_dp*t299 + 0.50e2_dp*t310)
474 t316 = 0.1e1_dp/kappa
477 t325 = t305*p + 0.146e3_dp/0.2025e4_dp*t307 - 0.73e2_dp/ &
478 0.4050e4_dp*tildeq_b*t313 + 0.100e3_dp/0.6561e4_dp*t316* &
479 t310 + 0.4e1_dp/0.45e2_dp*t319*t299 + t322*t310*p
480 t327 = 0.1e1_dp + t319*p
483 t331 = 0.1e1_dp + t325*t329*t316
484 fx = 0.1e1_dp + kappa - kappa/t331
485 ex_unif = -0.3e1_dp/0.4e1_dp*t1*t16*t6
486 t337 = my_rho*ex_unif
488 e_0(ii) = e_0(ii) + &
489 scale_ec*t267*t274 + scale_ex*t337*fx
491 IF (grad_deriv > 0)
THEN
494 t344 = 0.1e1_dp/t340*t6*t343
495 rsrho = -t4*t344/0.12e2_dp
497 e_c_u_0rho = -0.2e1_dp*a_1*alpha_1_1*rsrho*t152 + t138/ &
498 t351*(beta_1_1/t140*rsrho/0.2e1_dp + beta_2_1*rsrho + &
499 0.3e1_dp/0.2e1_dp*beta_3_1*t140*rsrho + t146*t41*rsrho/ &
504 trho = -my_ndrho/t376*t7/t233*t1*t371*t14*t6 &
505 /0.6e1_dp - t235*t343/0.2e1_dp
509 arho = t385/t386*e_c_u_0rho*t238
514 t398 = 0.2e1_dp*t396*trho
521 epsilon_cggarho = e_c_u_0rho + gamma_var*(0.2e1_dp*t390*t391 &
522 *trho + t187*t241*(t395 + t398)*t249 - t403*t406*(t395 + &
523 t398 + 0.2e1_dp*a*t246*arho + 0.4e1_dp*t411*trho))*t419
524 tau_wrho = -t254*t343/0.8e1_dp
525 prho = -0.2e1_dp/0.9e1_dp*t275*t278/t281/t279/my_rho
527 alpharho = 5.0_dp/3.0_dp*(p - alpha)*t7
528 t437 = t290/t294/t293
529 tildeq_brho = 0.9e1_dp/0.20e2_dp*alpharho*t295 - 0.9e1_dp/ &
530 0.40e2_dp*t437*(b*alpharho*t290 + t291*alpharho) + &
531 0.2e1_dp/0.3e1_dp*prho
534 t452 = 0.1e1_dp/t302/t301
537 IF (t313 > 0.0_dp) t464 = tildeq_b/t313
540 t485 = t325/t328/t327
543 rs_s1rho = -t4*t5*t344/0.12e2_dp
544 k_f_s1rho = t13*t371*t14/0.6e1_dp
546 t_s1rho = -t21/t505*t7/t19*k_f_s1rho*t6/0.2e1_dp - t21 &
550 e_c_u_1_s1rho = -0.2e1_dp*t513*rs_s1rho*t101 + t89/t517* &
551 (beta_1_2/t55*rs_s1rho/0.2e1_dp + beta_2_2*rs_s1rho + &
552 0.3e1_dp/0.2e1_dp*beta_3_2*t55*rs_s1rho + t95*t77* &
555 a_s1rho = t385/t536*e_c_u_1_s1rho*t191*t193
560 t549 = 0.2e1_dp*t547*t_s1rho
567 t571 = epsilon_cgga < epsilon_cgga_1_0
569 marho = e_c_u_1_s1rho + t196*(0.2e1_dp*t541*t542 &
570 *t_s1rho + t187*t197*(t546 + t549)*t205 - t554*t557*(t546 &
571 + t549 + 0.2e1_dp*a_s1*t202*a_s1rho + 0.4e1_dp*t562* &
574 marho = epsilon_cggarho
578 t_s2rho = -t28/t574*t7/t26*k_f_s1rho*t6/0.2e1_dp - t28 &
581 e_c_u_1_s2rho = -0.2e1_dp*t513*rs_s2rho*t85 + t71/t585*( &
582 beta_1_2/t36*rs_s2rho/0.2e1_dp + beta_2_2*rs_s2rho + &
583 0.3e1_dp/0.2e1_dp*beta_3_2*t36*rs_s2rho + t79*t77* &
586 a_s2rho = t385/t604*e_c_u_1_s2rho*t213*t215
591 t617 = 0.2e1_dp*t615*t_s2rho
598 t639 = epsilon_cgga < epsilon_cgga_0_1
600 mbrho = e_c_u_1_s2rho + t218*(0.2e1_dp*t609*t610 &
601 *t_s2rho + t187*t219*(t614 + t617)*t227 - t622*t625*(t614 &
602 + t617 + 0.2e1_dp*a_s2*t224*a_s2rho + 0.4e1_dp*t630* &
605 mbrho = epsilon_cggarho
607 t642 = epsilon_cgga*tau_w
609 epsilon_crevpkzbrho = epsilon_cggarho + (0.53e0_dp* &
610 epsilon_cggarho*t256 + 0.106e1_dp*t642*tau_wrho - 0.306e1_dp* &
611 t645*tau_wrho - 0.153e1_dp*t256*(marho/0.2e1_dp + mbrho/ &
615 e_rho(ii) = e_rho(ii) + &
616 scale_ec*(epsilon_crevpkzb*t274 + my_rho* &
617 epsilon_crevpkzbrho*t274 + t267*(d*epsilon_crevpkzbrho*t272 &
618 + 0.3e1_dp*t268*t659*tau_wrho)) + scale_ex*(ex_unif*fx - &
619 my_rho*
pi*t1*t371*fx/0.4e1_dp + t337* &
620 t490*(((0.2e1_dp*t445*t303*zrho - 0.4e1_dp*t450*t452* &
621 zrho)*p + t305*prho + 0.292e3_dp/0.2025e4_dp*tildeq_b* &
622 tildeq_brho - 0.73e2_dp/0.4050e4_dp*tildeq_brho*t313 - &
623 0.73e2_dp/0.8100e4_dp*t464*(0.36e2_dp*z*zrho + 0.100e3_dp &
624 *p*prho) + 0.200e3_dp/0.6561e4_dp*t472*prho + 0.8e1_dp/ &
625 0.45e2_dp*t475*zrho + 0.3e1_dp*t322*t310*prho)*t329 - &
626 0.2e1_dp*t485*t319*prho))
628 tnorm_drho = t234*t7/0.2e1_dp
629 hnorm_drho = gamma_var*(0.2e1_dp*t390*t391*tnorm_drho + &
630 0.2e1_dp*t187*t410*a*tnorm_drho*t249 - t403*t406*( &
631 0.2e1_dp*t396*tnorm_drho + 0.4e1_dp*t411*tnorm_drho))*t419
632 tau_wnorm_drho = my_ndrho*t7/0.4e1_dp
633 pnorm_drho = my_ndrho*t1*t284/0.6e1_dp
634 znorm_drho = tau_wnorm_drho*t286
635 alphanorm_drho = -5.0_dp/3.0_dp*pnorm_drho
636 tildeq_bnorm_drho = 0.9e1_dp/0.20e2_dp*alphanorm_drho*t295 - &
637 0.9e1_dp/0.40e2_dp*t437*(b*alphanorm_drho*t290 + t291* &
638 alphanorm_drho) + 0.2e1_dp/0.3e1_dp*pnorm_drho
639 t_s1norm_drho = t20*t22*t7/0.2e1_dp
641 manorm_drho = t196*(0.2e1_dp*t541*t542* &
642 t_s1norm_drho + 0.2e1_dp*t187*t561*a_s1*t_s1norm_drho*t205 &
643 - t554*t557*(0.2e1_dp*t547*t_s1norm_drho + 0.4e1_dp*t562 &
644 *t_s1norm_drho))*t569
646 manorm_drho = hnorm_drho
648 t_s2norm_drho = t27*t29*t7/0.2e1_dp
650 mbnorm_drho = t218*(0.2e1_dp*t609*t610* &
651 t_s2norm_drho + 0.2e1_dp*t187*t629*a_s2*t_s2norm_drho*t227 &
652 - t622*t625*(0.2e1_dp*t615*t_s2norm_drho + 0.4e1_dp*t630 &
653 *t_s2norm_drho))*t637
655 mbnorm_drho = hnorm_drho
657 epsilon_crevpkzbnorm_drho = hnorm_drho + (0.53e0_dp*hnorm_drho* &
658 t256 + 0.106e1_dp*t642*tau_wnorm_drho - 0.306e1_dp*t645* &
659 tau_wnorm_drho - 0.153e1_dp*t256*(manorm_drho/0.2e1_dp + &
660 mbnorm_drho/0.2e1_dp))*t265
662 e_ndrho(ii) = e_ndrho(ii) + &
663 scale_ec*(my_rho*epsilon_crevpkzbnorm_drho* &
664 t274 + t267*(d*epsilon_crevpkzbnorm_drho*t272 + 0.3e1_dp* &
665 t268*t659*tau_wnorm_drho)) + scale_ex*t337*t490*((( &
666 0.2e1_dp*t445*t303*znorm_drho - 0.4e1_dp*t450*t452* &
667 znorm_drho)*p + t305*pnorm_drho + 0.292e3_dp/0.2025e4_dp* &
668 tildeq_b*tildeq_bnorm_drho - 0.73e2_dp/0.4050e4_dp* &
669 tildeq_bnorm_drho*t313 - 0.73e2_dp/0.8100e4_dp*t464*( &
670 0.36e2_dp*z*znorm_drho + 0.100e3_dp*p*pnorm_drho) + &
671 0.200e3_dp/0.6561e4_dp*t472*pnorm_drho + 0.8e1_dp/0.45e2_dp &
672 *t475*znorm_drho + 0.3e1_dp*t322*t310*pnorm_drho)*t329 - &
673 0.2e1_dp*t485*t319*pnorm_drho)
675 epsilon_crevpkzbtau = -0.2e1_dp*t263*t271
678 alphatau = tau_unif_inverse
679 tildeq_btau = 0.9e1_dp/0.20e2_dp*alphatau*t295 - 0.9e1_dp/ &
680 0.40e2_dp*t437*(b*alphatau*t290 + t291*alphatau)
682 e_tau(ii) = e_tau(ii) + &
683 scale_ec*(my_rho*epsilon_crevpkzbtau*t274 + t267* &
684 (d*epsilon_crevpkzbtau*t272 - 0.3e1_dp*t268*t269/t799)) + &
685 scale_ex*t337*t490*((0.2e1_dp*t445*t303*ztau - 0.4e1_dp &
686 *t450*t452*ztau)*p + 0.292e3_dp/0.2025e4_dp*tildeq_b* &
687 tildeq_btau - 0.73e2_dp/0.4050e4_dp*tildeq_btau*t313 - &
688 0.73e2_dp/0.225e3_dp*t464*z*ztau + 0.8e1_dp/0.45e2_dp* &
690 IF (clipped_tau)
THEN
693 partial_rho = e_rho(ii) - incoming_rho
694 partial_gradient = e_ndrho(ii) - incoming_gradient
695 partial_tau = e_tau(ii) - incoming_tau
696 e_rho(ii) = incoming_rho + partial_rho + &
697 2.0_dp*regular_tau/my_ndrho*partial_gradient - &
698 norm_drho(ii)**2/(16.0_dp*my_rho**2)*partial_tau
699 e_ndrho(ii) = incoming_gradient + &
700 0.5_dp*norm_drho(ii)/my_ndrho*partial_gradient + &
701 norm_drho(ii)/(8.0_dp*my_rho)*partial_tau
702 e_tau(ii) = incoming_tau + 2.0_dp*my_rho/my_ndrho*partial_gradient + 0.5_dp*partial_tau
704 IF (floored_tau) e_tau(ii) = incoming_tau
711 END SUBROUTINE tpss_lda_calc
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public tao2003
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Module with functions to handle derivative descriptors. derivative description are strings have the f...
integer, parameter, public deriv_norm_drho
integer, parameter, public deriv_tau
integer, parameter, public deriv_rho
represent a group ofunctional derivatives
type(xc_derivative_type) function, pointer, public xc_dset_get_derivative(derivative_set, description, allocate_deriv)
returns the requested xc_derivative
Provides types for the management of the xc-functionals and their derivatives.
subroutine, public xc_derivative_get(deriv, split_desc, order, deriv_data, accept_null_data)
returns various information on the given derivative
subroutine, public xc_rho_set_get(rho_set, can_return_null, rho, drho, norm_drho, rhoa, rhob, norm_drhoa, norm_drhob, rho_1_3, rhoa_1_3, rhob_1_3, laplace_rho, laplace_rhoa, laplace_rhob, drhoa, drhob, rho_cutoff, drho_cutoff, tau_cutoff, tau, tau_a, tau_b, local_bounds)
returns the various attributes of rho_set
Calculates the tpss functional.
subroutine, public tpss_lda_eval(rho_set, deriv_set, grad_deriv, tpss_params)
evaluates the tpss functional in the spin unpolarized (lda) case
subroutine, public tpss_lda_info(tpss_params, reference, shortform, needs, max_deriv)
return various information on the functional
type of a logger, at the moment it contains just a print level starting at which level it should be l...
A derivative set contains the different derivatives of a xc-functional in form of a linked list.
represent a derivative of a functional
contains a flag for each component of xc_rho_set, so that you can use it to tell which components you...
represent a density, with all the representation and data needed to perform a functional evaluation