35#include "../base/base_uses.f90"
40 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
41 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xc_xbecke88'
42 REAL(kind=
dp),
PARAMETER :: beta = 0.0042_dp
59 CHARACTER(LEN=*),
INTENT(OUT),
OPTIONAL :: reference, shortform
61 INTEGER,
INTENT(out),
OPTIONAL :: max_deriv
63 IF (
PRESENT(reference))
THEN
64 reference =
"A. Becke, Phys. Rev. A 38, 3098 (1988) {LDA version}"
66 IF (
PRESENT(shortform))
THEN
67 shortform =
"Becke 1988 Exchange Functional (LDA)"
69 IF (
PRESENT(needs))
THEN
71 needs%rho_1_3 = .true.
72 needs%norm_drho = .true.
74 IF (
PRESENT(max_deriv)) max_deriv = 3
90 CHARACTER(LEN=*),
INTENT(OUT),
OPTIONAL :: reference, shortform
92 INTEGER,
INTENT(out),
OPTIONAL :: max_deriv
94 IF (
PRESENT(reference))
THEN
95 reference =
"A. Becke, Phys. Rev. A 38, 3098 (1988) {LSD version}"
97 IF (
PRESENT(shortform))
THEN
98 shortform =
"Becke 1988 Exchange Functional (LSD)"
100 IF (
PRESENT(needs))
THEN
101 needs%rho_spin = .true.
102 needs%rho_spin_1_3 = .true.
103 needs%norm_drho_spin = .true.
105 IF (
PRESENT(max_deriv)) max_deriv = 3
124 INTEGER,
INTENT(in) :: grad_deriv
127 CHARACTER(len=*),
PARAMETER :: routinen =
'xb88_lda_eval'
129 INTEGER :: handle, npoints
130 INTEGER,
DIMENSION(2, 3) :: bo
131 REAL(kind=
dp) :: epsilon_rho, sx
132 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :),
POINTER :: dummy, e_0, e_ndrho, &
133 e_ndrho_ndrho, e_ndrho_ndrho_ndrho, e_ndrho_ndrho_rho, e_ndrho_rho, e_ndrho_rho_rho, &
134 e_rho, e_rho_rho, e_rho_rho_rho, norm_drho, rho, rho_1_3
137 CALL timeset(routinen, handle)
144 norm_drho=norm_drho, local_bounds=bo, rho_cutoff=epsilon_rho)
145 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
154 e_ndrho_ndrho => dummy
155 e_rho_rho_rho => dummy
156 e_ndrho_rho_rho => dummy
157 e_ndrho_ndrho_rho => dummy
158 e_ndrho_ndrho_ndrho => dummy
161 allocate_deriv=.true.)
163 IF (grad_deriv >= 1)
THEN
165 allocate_deriv=.true.)
168 allocate_deriv=.true.)
171 IF (grad_deriv >= 2)
THEN
173 allocate_deriv=.true.)
176 allocate_deriv=.true.)
182 IF (grad_deriv >= 3)
THEN
184 allocate_deriv=.true.)
196 IF (grad_deriv > 3)
THEN
197 cpabort(
"derivatives bigger than 3 not implemented")
208 CALL xb88_lda_calc(rho=rho, rho_1_3=rho_1_3, norm_drho=norm_drho, &
209 e_0=e_0, e_rho=e_rho, e_ndrho=e_ndrho, e_rho_rho=e_rho_rho, &
210 e_ndrho_rho=e_ndrho_rho, e_ndrho_ndrho=e_ndrho_ndrho, &
211 e_rho_rho_rho=e_rho_rho_rho, e_ndrho_rho_rho=e_ndrho_rho_rho, &
212 e_ndrho_ndrho_rho=e_ndrho_ndrho_rho, &
213 e_ndrho_ndrho_ndrho=e_ndrho_ndrho_ndrho, grad_deriv=grad_deriv, &
214 npoints=npoints, epsilon_rho=epsilon_rho, sx=sx)
218 CALL timestop(handle)
245 SUBROUTINE xb88_lda_calc(rho, rho_1_3, norm_drho, &
246 e_0, e_rho, e_ndrho, e_rho_rho, e_ndrho_rho, &
247 e_ndrho_ndrho, e_rho_rho_rho, e_ndrho_rho_rho, e_ndrho_ndrho_rho, &
248 e_ndrho_ndrho_ndrho, grad_deriv, npoints, epsilon_rho, sx)
249 INTEGER,
INTENT(in) :: npoints, grad_deriv
250 REAL(kind=
dp),
DIMENSION(1:npoints),
INTENT(inout) :: e_ndrho_ndrho_ndrho, &
251 e_ndrho_ndrho_rho, e_ndrho_rho_rho, e_rho_rho_rho, e_ndrho_ndrho, e_ndrho_rho, e_rho_rho, &
253 REAL(kind=
dp),
DIMENSION(1:npoints),
INTENT(in) :: norm_drho, rho_1_3, rho
254 REAL(kind=
dp),
INTENT(in) :: epsilon_rho, sx
257 REAL(kind=
dp) :: c, epsilon_rho43, my_rho, my_rho_1_3, t1, t10, t100, t104, t11, t12, t126, &
258 t13, t159, t164, t17, t170, t176, t18, t189, t2, t21, t23, t29, t3, t31, t33, t37, t39, &
259 t40, t43, t44, t49, t5, t51, t54, t6, t64, t67, t7, t72, t74, t75, t79, t83, t86, t90, &
262 c = 1.5_dp*(0.75_dp/
pi)**(1.0_dp/3.0_dp)
263 t1 = 2**(0.1e1_dp/0.3e1_dp)
267 epsilon_rho43 = epsilon_rho**(4._dp/3._dp)
269 SELECT CASE (grad_deriv)
277 IF (my_rho > epsilon_rho)
THEN
278 my_rho_1_3 = rho_1_3(ii)
279 t3 = my_rho_1_3*my_rho
280 x = norm_drho(ii)/max(t3, epsilon_rho43)
282 t10 = t2*t6 + 0.1e1_dp
286 t17 = 0.1e1_dp + 0.6e1_dp*t7*x*t13
290 e_0(ii) = e_0(ii) + (t2*t3*t21/0.2e1_dp)*sx
303 IF (my_rho > epsilon_rho)
THEN
304 my_rho_1_3 = rho_1_3(ii)
305 t3 = my_rho_1_3*my_rho
308 t10 = t2*t6 + 0.1e1_dp
312 t17 = 0.1e1_dp + 0.6e1_dp*t7*x*t13
316 e_0(ii) = e_0(ii) + (t2*t3*t21/0.2e1_dp)*sx
322 t37 = 0.6e1_dp*t7*t13 + 0.6e1_dp*t7*x*t31*t33
325 t43 = -0.2e1_dp*t5*x*t18 + t5*t6*t37*t40
328 e_rho(ii) = e_rho(ii) &
329 - (0.2e1_dp/0.3e1_dp*t23*t44 - 0.2e1_dp/0.3e1_dp* &
331 e_ndrho(ii) = e_ndrho(ii) &
332 + (t2*t43/0.2e1_dp)*sx
346 IF (my_rho > epsilon_rho)
THEN
347 my_rho_1_3 = rho_1_3(ii)
348 t3 = my_rho_1_3*my_rho
351 t10 = t2*t6 + 0.1e1_dp
355 t17 = 0.1e1_dp + 0.6e1_dp*t7*x*t13
359 e_0(ii) = e_0(ii) + (t2*t3*t21/0.2e1_dp)*sx
365 t37 = 0.6e1_dp*t7*t13 + 0.6e1_dp*t7*x*t31*t33
368 t43 = -0.2e1_dp*t5*x*t18 + t5*t6*t37*t40
371 e_rho(ii) = e_rho(ii) &
372 - (0.2e1_dp/0.3e1_dp*t23*t44 - 0.2e1_dp/0.3e1_dp* &
374 e_ndrho(ii) = e_ndrho(ii) &
375 + (t2*t43/0.2e1_dp)*sx
380 t64 = 0.1e1_dp/t11/t10
381 t67 = t2*t29 - 0.2e1_dp*t1*t6*t64
385 t79 = 0.12e2_dp*t7*t31*t33 + 0.6e1_dp*t7*x*t67*t33 &
386 - 0.6e1_dp*t7*x*t72*t75
388 t86 = 0.1e1_dp/t39/t17
389 t90 = -0.2e1_dp*t5*t18 + 0.4e1_dp*t5*t54*t37 + t5*t6* &
390 t79*t40 - 0.2e1_dp*t5*t6*t83*t86
392 t98 = 0.1e1_dp/my_rho
397 e_rho_rho(ii) = e_rho_rho(ii) &
398 + (0.8e1_dp/0.9e1_dp*t51*t91 - 0.2e1_dp/0.9e1_dp* &
399 t51*t44 + 0.2e1_dp/0.9e1_dp*t51*t21)*sx
400 e_ndrho_rho(ii) = e_ndrho_rho(ii) &
401 - (0.2e1_dp/0.3e1_dp*t99*t100)*sx
402 e_ndrho_ndrho(ii) = e_ndrho_ndrho(ii) &
403 + (t2*t90*t104/0.2e1_dp)*sx
416 IF (my_rho > epsilon_rho)
THEN
417 my_rho_1_3 = rho_1_3(ii)
418 t3 = my_rho_1_3*my_rho
421 t10 = t2*t6 + 0.1e1_dp
425 t17 = 0.1e1_dp + 0.6e1_dp*t7*x*t13
429 e_0(ii) = e_0(ii) + (t2*t3*t21/0.2e1_dp)*sx
431 IF (grad_deriv >= 1)
THEN
436 t37 = 0.6e1_dp*t7*t13 + 0.6e1_dp*t7*x*t31*t33
439 t43 = -0.2e1_dp*t5*x*t18 + t5*t6*t37*t40
442 e_rho(ii) = e_rho(ii) &
443 - (0.2e1_dp/0.3e1_dp*t23*t44 - 0.2e1_dp/0.3e1_dp* &
445 e_ndrho(ii) = e_ndrho(ii) &
446 + (t2*t43/0.2e1_dp)*sx
449 IF (grad_deriv >= 2)
THEN
453 t64 = 0.1e1_dp/t11/t10
454 t67 = t2*t29 - 0.2e1_dp*t1*t6*t64
458 t79 = 0.12e2_dp*t7*t31*t33 + 0.6e1_dp*t7*x*t67*t33 &
459 - 0.6e1_dp*t7*x*t72*t75
461 t86 = 0.1e1_dp/t39/t17
462 t90 = -0.2e1_dp*t5*t18 + 0.4e1_dp*t5*t54*t37 + t5*t6* &
463 t79*t40 - 0.2e1_dp*t5*t6*t83*t86
465 t98 = 0.1e1_dp/my_rho
470 e_rho_rho(ii) = e_rho_rho(ii) &
471 + (0.8e1_dp/0.9e1_dp*t51*t91 - 0.2e1_dp/0.9e1_dp* &
472 t51*t44 + 0.2e1_dp/0.9e1_dp*t51*t21)*sx
473 e_ndrho_rho(ii) = e_ndrho_rho(ii) &
474 - (0.2e1_dp/0.3e1_dp*t99*t100)*sx
475 e_ndrho_ndrho(ii) = e_ndrho_ndrho(ii) &
476 + (t2*t90*t104/0.2e1_dp)*sx
479 IF (grad_deriv >= 3)
THEN
482 t164 = 0.6e1_dp*t5*t40*t37 - 0.12e2_dp*t5*x*t86*t83 &
483 + 0.6e1_dp*t5*t54*t79 + t5*t6*(0.18e2_dp*t7*t67 &
484 *t33 - 0.18e2_dp*t7*t72*t75 + 0.6e1_dp*t7*x* &
485 (-0.6e1_dp*t1*t64*x + 0.12e2_dp*t6*x/t11/t126) &
486 *t33 - 0.18e2_dp*t7*x*t67*t75*t31 + 0.12e2_dp*t7 &
487 *x*t72*t31/t74/t12)*t40 - 0.6e1_dp*t5*t6*t79 &
488 *t86*t37 + 0.6e1_dp*t5*t6*t83*t37/t159
489 t170 = 0.8e1_dp/0.9e1_dp*t51*t164*t6 + 0.14e2_dp/0.9e1_dp &
494 e_rho_rho_rho(ii) = e_rho_rho_rho(ii) &
495 - (0.4e1_dp/0.3e1_dp*t170*x*t98 + 0.16e2_dp/0.27e2_dp &
496 *t176*t91 - 0.4e1_dp/0.27e2_dp*t176*t44 + &
497 0.4e1_dp/0.27e2_dp*t176*t21)*sx
498 e_ndrho_rho_rho(ii) = e_ndrho_rho_rho(ii) &
500 e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) &
501 + ((-0.2e1_dp/0.3e1_dp*t99*t164*x - &
502 0.2e1_dp/0.3e1_dp*t99*t90)*t104)*sx
503 e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) &
504 + (t2*t164/t49/t189/0.2e1_dp)*sx
513 END SUBROUTINE xb88_lda_calc
529 INTEGER,
INTENT(in) :: grad_deriv
532 CHARACTER(len=*),
PARAMETER :: routinen =
'xb88_lsd_eval'
534 INTEGER :: handle, i, ispin, npoints
535 INTEGER,
DIMENSION(2, 3) :: bo
536 REAL(kind=
dp) :: epsilon_rho, sx
537 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :, :), &
538 POINTER :: dummy, e_0
539 TYPE(
cp_3d_r_cp_type),
DIMENSION(2) :: e_ndrho, e_ndrho_ndrho, e_ndrho_ndrho_ndrho, &
540 e_ndrho_ndrho_rho, e_ndrho_rho, e_ndrho_rho_rho, e_rho, e_rho_rho, e_rho_rho_rho, &
541 norm_drho, rho, rho_1_3
544 CALL timeset(routinen, handle)
550 NULLIFY (norm_drho(i)%array, rho(i)%array, rho_1_3(i)%array)
555 rhob_1_3=rho_1_3(2)%array, rhoa=rho(1)%array, &
556 rhob=rho(2)%array, norm_drhoa=norm_drho(1)%array, &
557 norm_drhob=norm_drho(2)%array, rho_cutoff=epsilon_rho, &
559 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
561 dummy => rho(1)%array
565 e_rho(i)%array => dummy
566 e_ndrho(i)%array => dummy
567 e_rho_rho(i)%array => dummy
568 e_ndrho_rho(i)%array => dummy
569 e_ndrho_ndrho(i)%array => dummy
570 e_rho_rho_rho(i)%array => dummy
571 e_ndrho_rho_rho(i)%array => dummy
572 e_ndrho_ndrho_rho(i)%array => dummy
573 e_ndrho_ndrho_ndrho(i)%array => dummy
577 allocate_deriv=.true.)
579 IF (grad_deriv >= 1)
THEN
581 allocate_deriv=.true.)
584 allocate_deriv=.true.)
587 allocate_deriv=.true.)
590 allocate_deriv=.true.)
593 IF (grad_deriv >= 2)
THEN
595 allocate_deriv=.true.)
598 allocate_deriv=.true.)
601 allocate_deriv=.true.)
604 allocate_deriv=.true.)
613 IF (grad_deriv >= 3)
THEN
615 allocate_deriv=.true.)
618 allocate_deriv=.true.)
639 IF (grad_deriv > 3)
THEN
640 cpabort(
"derivatives bigger than 3 not implemented")
653 CALL xb88_lsd_calc( &
654 rho_spin=rho(ispin)%array, &
655 rho_1_3_spin=rho_1_3(ispin)%array, &
656 norm_drho_spin=norm_drho(ispin)%array, &
658 e_rho_spin=e_rho(ispin)%array, &
659 e_ndrho_spin=e_ndrho(ispin)%array, &
660 e_rho_rho_spin=e_rho_rho(ispin)%array, &
661 e_ndrho_rho_spin=e_ndrho_rho(ispin)%array, &
662 e_ndrho_ndrho_spin=e_ndrho_ndrho(ispin)%array, &
663 e_rho_rho_rho_spin=e_rho_rho_rho(ispin)%array, &
664 e_ndrho_rho_rho_spin=e_ndrho_rho_rho(ispin)%array, &
665 e_ndrho_ndrho_rho_spin=e_ndrho_ndrho_rho(ispin)%array, &
666 e_ndrho_ndrho_ndrho_spin=e_ndrho_ndrho_ndrho(ispin)%array, &
667 grad_deriv=grad_deriv, npoints=npoints, &
668 epsilon_rho=epsilon_rho, sx=sx)
674 CALL timestop(handle)
703 SUBROUTINE xb88_lsd_calc(rho_spin, rho_1_3_spin, norm_drho_spin, e_0, &
704 e_rho_spin, e_ndrho_spin, e_rho_rho_spin, e_ndrho_rho_spin, &
705 e_ndrho_ndrho_spin, e_rho_rho_rho_spin, e_ndrho_rho_rho_spin, &
706 e_ndrho_ndrho_rho_spin, &
707 e_ndrho_ndrho_ndrho_spin, grad_deriv, npoints, epsilon_rho, sx)
708 REAL(kind=
dp),
DIMENSION(*),
INTENT(in) :: rho_spin, rho_1_3_spin, norm_drho_spin
709 REAL(kind=
dp),
DIMENSION(*),
INTENT(inout) :: e_0, e_rho_spin, e_ndrho_spin, e_rho_rho_spin, &
710 e_ndrho_rho_spin, e_ndrho_ndrho_spin, e_rho_rho_rho_spin, e_ndrho_rho_rho_spin, &
711 e_ndrho_ndrho_rho_spin, e_ndrho_ndrho_ndrho_spin
712 INTEGER,
INTENT(in) :: grad_deriv, npoints
713 REAL(kind=
dp),
INTENT(in) :: epsilon_rho, sx
716 REAL(kind=
dp) :: c, epsilon_rho43, my_epsilon_rho, my_rho, t1, t103, t11, t12, t127, t133, &
717 t138, t14, t151, t17, t18, t2, t20, t22, t23, t27, t28, t3, t30, t35, t36, t4, t42, t43, &
718 t44, t5, t51, t53, t57, t58, t59, t6, t63, t64, t66, t67, t7, t75, t76, t79, t8, t87, x
720 c = 1.5_dp*(0.75_dp/
pi)**(1.0_dp/3.0_dp)
721 my_epsilon_rho = 0.5_dp*epsilon_rho
722 epsilon_rho43 = my_epsilon_rho**(4._dp/3._dp)
724 SELECT CASE (grad_deriv)
730 my_rho = rho_spin(ii)
731 IF (my_rho > my_epsilon_rho)
THEN
732 t1 = rho_1_3_spin(ii)*my_rho
733 x = norm_drho_spin(ii)/t1
741 t11 = 0.1e1_dp + 0.6e1_dp*t4*t8
757 my_rho = rho_spin(ii)
758 IF (my_rho > my_epsilon_rho)
THEN
759 t1 = rho_1_3_spin(ii)*my_rho
760 x = norm_drho_spin(ii)/t1
768 t11 = 0.1e1_dp + 0.6e1_dp*t4*t8
778 t22 = 0.1e1_dp + t20*x
780 t27 = 0.6e1_dp*beta*t8 + 0.6e1_dp*t4*t22*t23
782 t30 = -0.2e1_dp*t4*t12 + t3*t28
784 e_rho_spin(ii) = e_rho_spin(ii) &
785 - (0.4e1_dp/0.3e1_dp*rho_1_3_spin(ii)*t30*x - &
786 0.4e1_dp/0.3e1_dp*rho_1_3_spin(ii)*t14)*sx
787 e_ndrho_spin(ii) = e_ndrho_spin(ii) &
799 my_rho = rho_spin(ii)
800 IF (my_rho > my_epsilon_rho)
THEN
801 t1 = rho_1_3_spin(ii)*my_rho
802 x = norm_drho_spin(ii)/t1
810 t11 = 0.1e1_dp + 0.6e1_dp*t4*t8
817 IF (grad_deriv >= 1)
THEN
821 t22 = 0.1e1_dp + t20*x
823 t27 = 0.6e1_dp*beta*t8 + 0.6e1_dp*t4*t22*t23
825 t30 = -0.2e1_dp*t4*t12 + t3*t28
827 e_rho_spin(ii) = e_rho_spin(ii) &
828 - (0.4e1_dp/0.3e1_dp*rho_1_3_spin(ii)*t30*x - &
829 0.4e1_dp/0.3e1_dp*rho_1_3_spin(ii)*t14)*sx
830 e_ndrho_spin(ii) = e_ndrho_spin(ii) &
834 IF (grad_deriv >= 2)
THEN
835 t35 = rho_1_3_spin(ii)**2
837 t42 = 0.1e1_dp/t17/t11
845 t63 = 0.12e2_dp*beta*t22*t23 + 0.6e1_dp*t4*t53*t23 - 0.6e1_dp*t4*t57*t59
847 t66 = -0.2e1_dp*beta*t12 + 0.4e1_dp*t4*t28 - 0.2e1_dp*t3*t44 + t3*t64
849 t75 = 0.1e1_dp/my_rho
853 e_rho_rho_spin(ii) = e_rho_rho_spin(ii) &
854 + (0.16e2_dp/0.9e1_dp*t67*t2 - 0.4e1_dp/0.9e1_dp &
855 *t36*t30*x + 0.4e1_dp/0.9e1_dp*t36*t14)*sx
856 e_ndrho_rho_spin(ii) = e_ndrho_rho_spin(ii) &
857 - (0.4e1_dp/0.3e1_dp*t76*x)*sx
858 e_ndrho_ndrho_spin(ii) = e_ndrho_ndrho_spin(ii) + &
862 IF (grad_deriv >= 3)
THEN
865 t127 = 0.6e1_dp*beta*t18*t27 - 0.12e2_dp*t4*t44 + 0.6e1_dp &
866 *t4*t64 + 0.6e1_dp*t3/t87*t43*t27 - 0.6e1_dp*t3 &
867 *t42*t27*t63 + t3*t18*(0.18e2_dp*beta*t53*t23 &
868 - 0.18e2_dp*beta*t57*t59 + 0.6e1_dp*t4*(0.3e1_dp/ &
869 t6/t103*t2*x - 0.3e1_dp*t51*x)*t23 - 0.18e2_dp* &
870 t4*t53*t59*t22 + 0.12e2_dp*t4*t57*t22/t58/t7)
871 t133 = 0.16e2_dp/0.9e1_dp*t36*t127*t2 + 0.28e2_dp/0.9e1_dp &
873 t138 = 0.1e1_dp/t35/my_rho
876 e_rho_rho_rho_spin(ii) = e_rho_rho_rho_spin(ii) &
877 - (0.4e1_dp/0.3e1_dp*t133*x*t75 + 0.32e2_dp/0.27e2_dp &
878 *t138*t66*t2 - 0.8e1_dp/0.27e2_dp*t138*t30* &
879 x + 0.8e1_dp/0.27e2_dp*t138*t14)*sx
880 e_ndrho_rho_rho_spin(ii) = e_ndrho_rho_rho_spin(ii) &
882 e_ndrho_ndrho_rho_spin(ii) = e_ndrho_ndrho_rho_spin(ii) &
883 + ((-0.4e1_dp/0.3e1_dp*t75*t127*x - &
884 0.4e1_dp/0.3e1_dp*t76)*t79)*sx
885 e_ndrho_ndrho_ndrho_spin(ii) = e_ndrho_ndrho_ndrho_spin(ii) &
895 END SUBROUTINE xb88_lsd_calc
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public becke1988
various utilities that regard array of different kinds: output, allocation,... maybe it is not a good...
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_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
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 Becke 88 exchange functional
subroutine, public xb88_lsd_info(reference, shortform, needs, max_deriv)
return various information on the functional
subroutine, public xb88_lda_eval(rho_set, deriv_set, grad_deriv, xb88_params)
evaluates the becke 88 exchange functional for lda
subroutine, public xb88_lsd_eval(rho_set, deriv_set, grad_deriv, xb88_params)
evaluates the becke 88 exchange functional for lsd
subroutine, public xb88_lda_info(reference, shortform, needs, max_deriv)
return various information on the functional
represent a pointer to a contiguous 3d array
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