32 #include "../base/base_uses.f90"
38 REAL(KIND=
dp),
PARAMETER :: f13 = 1.0_dp/3.0_dp, &
45 REAL(KIND=
dp) :: eps_rho
49 REAL(KIND=
dp),
PARAMETER :: a = 0.04918_dp, &
54 REAL(KIND=
dp),
PARAMETER :: c1 = 0.018897_dp, &
59 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xc_cs1'
72 CHARACTER(LEN=*),
INTENT(OUT),
OPTIONAL :: reference, shortform
73 TYPE(xc_rho_cflags_type),
INTENT(inout),
OPTIONAL :: needs
74 INTEGER,
INTENT(out),
OPTIONAL :: max_deriv
76 IF (
PRESENT(reference))
THEN
77 reference =
"N.C. Handy and A.J. Cohen, J. Chem. Phys., 116, 5411 (2002) {LDA version}"
79 IF (
PRESENT(shortform))
THEN
80 shortform =
"CS1: Handy improved LYP correlation energy functional {LDA}"
82 IF (
PRESENT(needs))
THEN
84 needs%rho_1_3 = .true.
85 needs%norm_drho = .true.
87 IF (
PRESENT(max_deriv)) max_deriv = 3
100 CHARACTER(LEN=*),
INTENT(OUT),
OPTIONAL :: reference, shortform
101 TYPE(xc_rho_cflags_type),
INTENT(inout),
OPTIONAL :: needs
102 INTEGER,
INTENT(out),
OPTIONAL :: max_deriv
104 IF (
PRESENT(reference))
THEN
105 reference =
"N.C. Handy and A.J. Cohen, J. Chem. Phys., 116, 5411 (2002)"
107 IF (
PRESENT(shortform))
THEN
108 shortform =
"CS1: Handy improved LYP correlation energy functional"
110 IF (
PRESENT(needs))
THEN
111 needs%rho_spin = .true.
112 needs%rho_spin_1_3 = .true.
113 needs%norm_drho_spin = .true.
115 IF (
PRESENT(max_deriv)) max_deriv = 1
124 SUBROUTINE cs1_init(cutoff, debug)
126 REAL(kind=
dp),
INTENT(IN) :: cutoff
127 LOGICAL,
INTENT(IN),
OPTIONAL :: debug
132 IF (
PRESENT(debug))
THEN
140 END SUBROUTINE cs1_init
149 TYPE(xc_rho_set_type),
INTENT(IN) :: rho_set
150 TYPE(xc_derivative_set_type),
INTENT(IN) :: deriv_set
151 INTEGER,
INTENT(in) :: order
153 CHARACTER(len=*),
PARAMETER :: routinen =
'cs1_lda_eval'
155 INTEGER :: handle, m, npoints
156 INTEGER,
DIMENSION(2, 3) :: bo
157 REAL(kind=
dp) :: epsilon_rho
158 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :),
POINTER :: e_0, e_ndrho, e_ndrho_ndrho, &
159 e_ndrho_ndrho_ndrho, e_rho, e_rho_ndrho, e_rho_ndrho_ndrho, e_rho_rho, e_rho_rho_ndrho, &
160 e_rho_rho_rho, grho, rho, rho13
161 TYPE(xc_derivative_type),
POINTER :: deriv
163 CALL timeset(routinen, handle)
164 NULLIFY (rho, rho13, grho, e_0, e_rho, e_ndrho, &
165 e_rho_rho, e_rho_ndrho, e_ndrho_ndrho, &
166 e_rho_rho_rho, e_rho_rho_ndrho, e_rho_ndrho_ndrho, &
170 norm_drho=grho, local_bounds=bo, rho_cutoff=epsilon_rho)
171 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
173 CALL cs1_init(epsilon_rho)
177 allocate_deriv=.true.)
180 CALL cs1_u_0(rho, grho, rho13, e_0, npoints)
182 IF (order >= 1 .OR. order == -1)
THEN
184 allocate_deriv=.true.)
187 allocate_deriv=.true.)
190 CALL cs1_u_1(rho, grho, rho13, e_rho, e_ndrho, &
193 IF (order >= 2 .OR. order == -2)
THEN
195 allocate_deriv=.true.)
198 allocate_deriv=.true.)
204 CALL cs1_u_2(rho, grho, rho13, e_rho_rho, e_rho_ndrho, &
205 e_ndrho_ndrho, npoints)
207 IF (order >= 3 .OR. order == -3)
THEN
209 allocate_deriv=.true.)
221 CALL cs1_u_3(rho, grho, rho13, e_rho_rho_rho, e_rho_rho_ndrho, &
222 e_rho_ndrho_ndrho, e_ndrho_ndrho_ndrho, npoints)
224 IF (order > 3 .OR. order < -3)
THEN
225 cpabort(
"derivatives bigger than 3 not implemented")
228 CALL timestop(handle)
238 TYPE(xc_rho_set_type),
INTENT(IN) :: rho_set
239 TYPE(xc_derivative_set_type),
INTENT(IN) :: deriv_set
240 INTEGER,
INTENT(in) :: order
242 CHARACTER(len=*),
PARAMETER :: routinen =
'cs1_lsd_eval'
244 INTEGER :: handle, npoints
245 INTEGER,
DIMENSION(2, 3) :: bo
246 REAL(kind=
dp) :: epsilon_rho
247 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :), &
248 POINTER :: e_0, e_ndrhoa, e_ndrhob, e_rhoa, e_rhob, &
249 norm_drhoa, norm_drhob, rhoa, &
250 rhoa_1_3, rhob, rhob_1_3
251 TYPE(xc_derivative_type),
POINTER :: deriv
253 CALL timeset(routinen, handle)
256 rhoa_1_3=rhoa_1_3, rhob_1_3=rhob_1_3, &
257 norm_drhoa=norm_drhoa, norm_drhob=norm_drhob, &
258 local_bounds=bo, rho_cutoff=epsilon_rho)
259 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
260 CALL cs1_init(epsilon_rho)
264 allocate_deriv=.true.)
267 CALL cs1_ss_0(rhoa, rhob, norm_drhoa, norm_drhob, &
268 rhoa_1_3, rhob_1_3, e_0, npoints)
270 IF (order >= 1 .OR. order == -1)
THEN
272 allocate_deriv=.true.)
275 allocate_deriv=.true.)
278 allocate_deriv=.true.)
281 allocate_deriv=.true.)
284 CALL cs1_ss_1(rhoa, rhob, norm_drhoa, norm_drhob, &
285 rhoa_1_3, rhob_1_3, e_rhoa, e_rhob, e_ndrhoa, e_ndrhob, &
288 IF (order > 1 .OR. order < 1)
THEN
289 cpabort(
"derivatives bigger than 3 not implemented")
291 CALL timestop(handle)
302 SUBROUTINE cs1_u_0(rho, grho, r13, e_0, npoints)
304 REAL(kind=
dp),
DIMENSION(*),
INTENT(IN) :: rho, grho, r13
305 REAL(kind=
dp),
DIMENSION(*),
INTENT(INOUT) :: e_0
306 INTEGER,
INTENT(in) :: npoints
309 REAL(kind=
dp) :: c2p, c3p, c4p, cp, dpv, f1, f2, f3, f4, &
310 g, oc, ocp, od, odp, r, r3, x
324 IF (rho(ip) > eps_rho)
THEN
329 odp = 1.0_dp/(r3 + dpv)
330 ocp = 1.0_dp/(r*r*r3*r3 + cp*g*g)
332 oc = 1.0_dp/(r*r*r3*r3 + c*g*g)
334 f2 = c2p*g**4*r3*r*odp*ocp*ocp
336 f4 = c4p*g**4*r3*r*od*oc*oc
337 e_0(ip) = e_0(ip) + f1 + f2 + f3 + f4
344 END SUBROUTINE cs1_u_0
355 SUBROUTINE cs1_u_1(rho, grho, r13, e_rho, e_ndrho, npoints)
357 REAL(kind=
dp),
DIMENSION(*),
INTENT(IN) :: rho, grho, r13
358 REAL(kind=
dp),
DIMENSION(*),
INTENT(INOUT) :: e_rho, e_ndrho
359 INTEGER,
INTENT(in) :: npoints
362 REAL(kind=
dp) :: c2p, c3p, c4p, cp, df1, df3, dgf2, dgf4, &
363 dpv, drf2, drf4, g, oc, ocp, od, odp, &
380 IF (rho(ip) > eps_rho)
THEN
384 odp = 1.0_dp/(r3 + dpv)
385 ocp = 1.0_dp/(r*r*r3*r3 + cp*g*g)
387 oc = 1.0_dp/(r*r*r3*r3 + c*g*g)
388 df1 = c1*f13*r3*(3*r3 + 4*dpv)*odp*odp
389 drf2 = -f13*c2p*g**4*r3*(13*r**3 - 3*r3*cp*g*g + 12*r*r*r3*r3*dpv - &
390 4*dpv*cp*g*g)*odp**2*ocp**3
391 dgf2 = 4*c2p*g**3*r**4*odp*ocp**3
392 df3 = f13*r3*c3p*(3*r3 + 4*d)*od*od
393 drf4 = -f13*c4p*g**4*r3*(13*r**3 - 3*r3*c*g*g + 12*r*r*r3*r3*d - &
394 4*d*c*g*g)*od**2*oc**3
395 dgf4 = 4*c4p*g**3*r**4*od*oc**3
396 e_rho(ip) = e_rho(ip) + df1 + drf2 + df3 + drf4
397 e_ndrho(ip) = e_ndrho(ip) + dgf2 + dgf4
404 END SUBROUTINE cs1_u_1
416 SUBROUTINE cs1_u_2(rho, grho, r13, e_rho_rho, e_rho_ndrho, e_ndrho_ndrho, &
419 REAL(kind=
dp),
DIMENSION(*),
INTENT(IN) :: rho, grho, r13
420 REAL(kind=
dp),
DIMENSION(*),
INTENT(INOUT) :: e_rho_rho, e_rho_ndrho, e_ndrho_ndrho
421 INTEGER,
INTENT(in) :: npoints
424 REAL(kind=
dp) :: c2p, c3p, c4p, cp, d2f1, d2f3, d2gf2, &
425 d2gf4, d2rf2, d2rf4, dpv, drgf2, &
426 drgf4, g, oc, ocp, od, odp, r, r3
442 IF (rho(ip) > eps_rho)
THEN
446 odp = 1.0_dp/(r3 + dpv)
447 ocp = 1.0_dp/(r*r*r3*r3 + cp*g*g)
449 oc = 1.0_dp/(r*r*r3*r3 + c*g*g)
450 d2f1 = c1*f23*f13*dpv*r3/r*(r3 + 2*dpv)*odp**3
451 d2rf2 = c2p*f13*f23*g**4*r3/r*(193*dpv*r**5*r3*r3 + 90*dpv*dpv*r**5*r3 &
452 - 88*g*g*cp*r**3*r3 - 100*dpv*dpv*cp*g*g*r*r*r3*r3 &
453 + 2*dpv*dpv*cp*cp*g**4 - 190*g*g*r**3*cp*dpv + g**4*r3*cp*cp*dpv &
454 + 104*r**6)*odp**3*ocp**4
455 drgf2 = c2p*f43*g**3*r*r*r3*(-13*r**3*r3*r3 + 11*cp*r*g*g - 12*dpv*r**3*r3 &
456 + 12*r3*r3*dpv*cp*g*g)*odp*odp*ocp**4
457 d2gf2 = -12*c2p*g*g*r**4*(cp*g*g - r*r*r3*r3)*odp*ocp**4
458 d2f3 = f13*f23*c3p*d*r3/r*(r3 + 2*d)*od**3
459 d2rf4 = c4p*f13*f23*g**4*r3/r*(193*d*r**5*r3*r3 + 90*d*d*r**5*r3 &
460 - 88*g*g*c*r**3*r3 - 100*d*d*c*g*g*r*r*r3*r3 &
461 + 2*d*d*c*c*g**4 - 190*g*g*r**3*c*d + g**4*r3*c*c*d &
462 + 104*r**6)*od**3*oc**4
463 drgf4 = c4p*f43*g**3*r*r*r3*(-13*r**3*r3*r3 + 11*c*r*g*g - 12*d*r**3*r3 &
464 + 12*r3*r3*d*c*g*g)*od*od*oc**4
465 d2gf4 = -12*c4p*g*g*r**4*(c*g*g - r*r*r3*r3)*od*oc**4
466 e_rho_rho(ip) = e_rho_rho(ip) + d2f1 + d2rf2 + d2f3 + d2rf4
467 e_rho_ndrho(ip) = e_rho_ndrho(ip) + drgf2 + drgf4
468 e_ndrho_ndrho(ip) = e_ndrho_ndrho(ip) + d2gf2 + d2gf4
475 END SUBROUTINE cs1_u_2
488 SUBROUTINE cs1_u_3(rho, grho, r13, e_rho_rho_rho, e_rho_rho_ndrho, &
489 e_rho_ndrho_ndrho, e_ndrho_ndrho_ndrho, npoints)
491 REAL(kind=
dp),
DIMENSION(*),
INTENT(IN) :: rho, grho, r13
492 REAL(kind=
dp),
DIMENSION(*),
INTENT(INOUT) :: e_rho_rho_rho, e_rho_rho_ndrho, &
493 e_rho_ndrho_ndrho, e_ndrho_ndrho_ndrho
494 INTEGER,
INTENT(in) :: npoints
497 REAL(kind=
dp) :: c2p, c3p, c4p, cp, d2rgf2, d2rgf4, d3f1, d3f3, d3gf2, d3gf4, d3rf2, d3rf4, &
498 dpv, dr2gf2, dr2gf4, g, oc, ocp, od, odp, r, r3, t1, t10, t11, t13, t15, t16, t17, t19, &
499 t2, t22, t23, t26, t29, t3, t32, t33, t37, t4, t44, t45, t50, t51, t52, t58, t6, t61, t7, &
500 t74, t76, t77, t8, t80, t81, t82, t9
521 IF (rho(ip) > eps_rho)
THEN
525 odp = 1.0_dp/(r3 + dpv)
526 ocp = 1.0_dp/(r*r*r3*r3 + cp*g*g)
528 oc = 1.0_dp/(r*r*r3*r3 + c*g*g)
529 d3f1 = -c1*f23*f13*f13*dpv*r3/(r*r)*(11*dpv*r3 + 4*dpv*dpv + 4*r/r3)*odp**4
530 t1 = g**2; t2 = t1**2; t3 = r3; t4 = t3**2; t8 = dpv**2; t9 = t8*dpv
531 t10 = cp**2; t11 = t10*cp; t13 = t2*t1; t16 = r**2; t17 = t4*t16
532 t19 = t10*t2; t22 = t16**2; t23 = t22**2; t32 = t22*t16; t37 = t16*r
533 t58 = t22*r; t61 = cp*t1
534 t74 = 4*t9*t11*t13 + 668*t17*t9*t19 + 5524*t4*t23*dpv + 5171*t3*t23*t8 + &
535 1620*t23*t9 - 3728*t3*t32*cp*t1 + 440*t4*t37*t10*t2 + 1500*t2*t3*t37*dpv*t10 &
536 + 4*t13*t4*dpv*t11 + 1737*t37*t8*t19 + 11*t3*t8*t11*t13 - 3860*t3*t58*t9*t61 + &
537 1976*t23*r - 11535*t4*t58*t8*t61 - 11412*t1*t32*cp*dpv
538 t76 = (t3 + dpv)**2; t77 = t76**2; t80 = t17 + t61; t81 = t80**2; t82 = t81**2
539 d3rf2 = -f23*f13*f13*c2p*t2/t4/r*t74/t77/t82/t80
540 t4 = t3*r; t6 = r**2; t7 = t6**2; t8 = t7*t6; t9 = dpv**2; t15 = t1**2
541 t17 = cp**2; t23 = t3**2; t26 = t6*r; t29 = cp*t1; t33 = t17*t15; t44 = t3 + dpv
542 t45 = t44**2; t50 = t23*t6 + t29; t51 = t50**2; t52 = t51**2
543 d2rgf2 = c2p*f23*f43*t1*g*t4*(90*t8*t9 + 193*t3*t8*dpv + 44*t15*t4*t17 - 236*t1 &
544 *t7*cp + 104*t23*t8 - 240*t3*t26*t9*t29 + 54*t23*t9*t33 - 478*t23*t26*dpv*t29 &
545 + 97*r*dpv*t33)/t45/t44/t52/t50
546 dr2gf2 = -4*c2p*g*g*r*r*r3*(-40*r**3*r3*dpv*cp*g*g + 12*r3*r3*dpv*cp*cp*g**4 &
547 + 13*r**6*r3 - 40*r**3*r3*r3*cp*g*g + 11*r*cp*cp*g**4 + 12*r**6*dpv) &
549 d3gf2 = c2p*24*g*r**3*r3*(r**6 - 5*cp*g*g*r**3*r3 + 2*cp*cp*g**4*r3*r3)*odp*ocp**5
550 d3f3 = -f23*f13*f13*c3p*d*r3/(r*r)*(11*d*r3 + 4*d*d + 4*r3*r3)*od**4
551 t1 = g**2; t2 = t1**2; t3 = r3; t4 = t3**2; t8 = d**2; t9 = t8*d
552 t10 = c**2; t11 = t10*c; t13 = t2*t1; t16 = r**2; t17 = t4*t16
553 t19 = t10*t2; t22 = t16**2; t23 = t22**2; t32 = t22*t16; t37 = t16*r
554 t58 = t22*r; t61 = c*t1
555 t74 = 4*t9*t11*t13 + 668*t17*t9*t19 + 5524*t4*t23*d + 5171*t3*t23*t8 + &
556 1620*t23*t9 - 3728*t3*t32*c*t1 + 440*t4*t37*t10*t2 + 1500*t2*t3*t37*d*t10 &
557 + 4*t13*t4*d*t11 + 1737*t37*t8*t19 + 11*t3*t8*t11*t13 - 3860*t3*t58*t9*t61 + &
558 1976*t23*r - 11535*t4*t58*t8*t61 - 11412*t1*t32*c*d
559 t76 = (t3 + d)**2; t77 = t76**2; t80 = t17 + t61; t81 = t80**2; t82 = t81**2
560 d3rf4 = -f23*f13*f13*c4p*t2/t4/r*t74/t77/t82/t80
561 t4 = t3*r; t6 = r**2; t7 = t6**2; t8 = t7*t6; t9 = d**2; t15 = t1**2
562 t17 = c**2; t23 = t3**2; t26 = t6*r; t29 = c*t1; t33 = t17*t15; t44 = t3 + d
563 t45 = t44**2; t50 = t23*t6 + t29; t51 = t50**2; t52 = t51**2
564 d2rgf4 = c4p*f23*f43*t1*g*t4*(90*t8*t9 + 193*t3*t8*d + 44*t15*t4*t17 - 236*t1 &
565 *t7*c + 104*t23*t8 - 240*t3*t26*t9*t29 + 54*t23*t9*t33 - 478*t23*t26*d*t29 &
566 + 97*r*d*t33)/t45/t44/t52/t50
567 dr2gf4 = -4*c4p*g*g*r*r*r3*(-40*r**3*r3*d*c*g*g + 12*r3*r3*d*c*c*g**4 &
568 + 13*r**6*r3 - 40*r**3*r3*r3*c*g*g + 11*r*c*c*g**4 + 12*r**6*d) &
570 d3gf4 = c4p*24*g*r**3*r3*(r**6 - 5*c*g*g*r**3*r3 + 2*c*c*g**4*r3*r3)*od*oc**5
571 e_rho_rho_rho(ip) = e_rho_rho_rho(ip) + d3f1 + d3rf2 + d3f3 + d3rf4
572 e_rho_rho_ndrho(ip) = e_rho_rho_ndrho(ip) + d2rgf2 + d2rgf4
573 e_rho_ndrho_ndrho(ip) = e_rho_ndrho_ndrho(ip) + dr2gf2 + dr2gf4
574 e_ndrho_ndrho_ndrho(ip) = e_ndrho_ndrho_ndrho(ip) + d3gf2 + d3gf4
581 END SUBROUTINE cs1_u_3
594 SUBROUTINE cs1_ss_0(rhoa, rhob, grhoa, grhob, r13a, r13b, e_0, &
597 REAL(kind=
dp),
DIMENSION(*),
INTENT(IN) :: rhoa, rhob, grhoa, grhob, r13a, r13b
598 REAL(kind=
dp),
DIMENSION(*),
INTENT(INOUT) :: e_0
599 INTEGER,
INTENT(in) :: npoints
602 REAL(kind=
dp) :: f1a, f1b, f2a, f2b, ga, gb, oca, ocb, &
603 oda, odb, r3a, r3b, ra, rb, xa, xb
607 cpwarn(
"not tested!")
617 IF (rhoa(ip) < eps_rho)
THEN
625 oda = 1.0_dp/(r3a + d)
626 oca = 1.0_dp/(ra*ra*r3a*r3a + c*ga*ga)
628 f2a = c2*ga**4*r3a*ra*oda*oca*oca
630 IF (rhob(ip) < eps_rho)
THEN
638 odb = 1.0_dp/(r3b + d)
639 ocb = 1.0_dp/(rb*rb*r3b*r3b + c*gb*gb)
641 f2b = c2*gb**4*r3b*rb*odb*ocb*ocb
644 e_0(ip) = e_0(ip) + f1a + f1b + f2a + f2b
650 END SUBROUTINE cs1_ss_0
666 SUBROUTINE cs1_ss_1(rhoa, rhob, grhoa, grhob, r13a, r13b, e_rhoa, &
667 e_rhob, e_ndrhoa, e_ndrhob, npoints)
669 REAL(kind=
dp),
DIMENSION(*),
INTENT(IN) :: rhoa, rhob, grhoa, grhob, r13a, r13b
670 REAL(kind=
dp),
DIMENSION(*),
INTENT(INOUT) :: e_rhoa, e_rhob, e_ndrhoa, e_ndrhob
671 INTEGER,
INTENT(in) :: npoints
674 REAL(kind=
dp) :: df1a, df1b, dgf2a, dgf2b, drf2a, drf2b, &
675 ga, gb, oca, ocb, oda, odb, r3a, r3b, &
678 cpwarn(
"not tested!")
688 IF (rhoa(ip) < eps_rho)
THEN
696 oda = 1.0_dp/(r3a + d)
697 oca = 1.0_dp/(ra*ra*r3a*r3a + c*ga*ga)
698 df1a = c1*f13*r3a*(3*r3a + 4*d)*oda*oda
700 drf2a = -f13*c2*ga**4*r3a*(13*ra**3 - 3*r3a*c*ga*ga + 12*ra*ra*r3a*r3a*d - &
701 4*d*c*ga*ga)*oda**2*oca**3
703 dgf2a = 4*c2*ga**3*ra**4*oda*oca**3
706 IF (rhob(ip) < eps_rho)
THEN
714 odb = 1.0_dp/(r3b + d)
715 ocb = 1.0_dp/(rb*rb*r3b*r3b + c*gb*gb)
716 df1b = c1*f13*r3b*(3*r3b + 4*d)*odb*odb
718 drf2b = -f13*c2*gb**4*r3b*(13*rb**3 - 3*r3b*c*gb*gb + 12*rb*rb*r3b*r3b*d - &
719 4*d*c*gb*gb)*odb**2*ocb**3
721 dgf2b = 4*c2*gb**3*rb**4*odb*ocb**3
725 e_rhoa(ip) = e_rhoa(ip) + df1a + drf2a
726 e_ndrhoa(ip) = e_ndrhoa(ip) + dgf2a
727 e_rhob(ip) = e_rhob(ip) + df1b + drf2b
728 e_ndrhob(ip) = e_ndrhob(ip) + dgf2b
734 END SUBROUTINE cs1_ss_1
Defines the basic variable types.
integer, parameter, public dp
Calculate the CS1 Functional (Handy s improved LYP functional)
subroutine, public cs1_lda_eval(rho_set, deriv_set, order)
...
subroutine, public cs1_lsd_eval(rho_set, deriv_set, order)
...
subroutine, public cs1_lsd_info(reference, shortform, needs, max_deriv)
return various information on the functional
subroutine, public cs1_lda_info(reference, shortform, needs, max_deriv)
return various information on the functional
Module with functions to handle derivative descriptors. derivative description are strings have the f...
integer, parameter, public deriv_norm_drho
integer, parameter, public deriv_norm_drhoa
integer, parameter, public deriv_rhob
integer, parameter, public deriv_rhoa
integer, parameter, public deriv_rho
integer, parameter, public deriv_norm_drhob
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
Utility routines for the functional calculations.
subroutine, public set_util(cutoff)
...
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