(git:6344619)
Loading...
Searching...
No Matches
xc_xwpbe.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Calculates short range exchange part for wPBE functional and averaged
10!> PBE exchange-hole functional (omega = 0.0 )
11!> \par History
12!> Manuel Guidon (05.2007) : initial version
13!> \author Manuel Guidon (05.2007)
14! **************************************************************************************************
16 USE bibliography, ONLY: heyd2004, &
17 cite_reference
20 USE kinds, ONLY: dp
21 USE mathconstants, ONLY: pi, &
22 rootpi
26 deriv_rho, &
27 deriv_rhoa, &
36#include "../base/base_uses.f90"
37
38 IMPLICIT NONE
39
40 PRIVATE
41
42! *** Global parameters ***
43
46
47 REAL(KIND=dp), PARAMETER :: alpha1 = -1.128223946706117_dp, &
48 alpha2 = 1.452736265762971_dp, &
49 alpha3 = -1.243162299390327_dp, &
50 alpha4 = 0.971824836115601_dp, &
51 alpha5 = -0.568861079687373_dp, &
52 alpha6 = 0.246880514820192_dp, &
53 alpha7 = -0.065032363850763_dp, &
54 alpha8 = 0.008401793031216_dp
55 REAL(KIND=dp), PARAMETER :: beta = 1.455915450052607_dp, &
56 beta2 = 2.0_dp
57 REAL(KIND=dp), PARAMETER :: a1 = 0.00979681_dp, &
58 a2 = 0.04108340_dp, &
59 a3 = 0.18744000_dp, &
60 a4 = 0.00120824_dp, &
61 a5 = 0.0347188_dp
62 REAL(KIND=dp), PARAMETER :: a = 1.0161144_dp, &
63 b = -0.37170836_dp, &
64 c = -0.077215461_dp, &
65 dd = 0.57786348_dp, &
66 e = -0.051955731_dp, &
67 f1 = 0.47965830_dp, &
68 f2 = 6.4753871_dp, &
69 clda = -0.73855876638202240588423_dp
70 REAL(KIND=dp), PARAMETER :: expcutoff = 700.0_dp, &
71 exei1 = 4.0364_dp, &
72 exei2 = 1.15198_dp, &
73 exei3 = 5.03627_dp, &
74 exei4 = 4.19160_dp
75 REAL(KIND=dp), PARAMETER :: smax = 8.572844_dp, &
76 sconst = 18.79622316_dp, &
77 scutoff = 8.3_dp
78 REAL(KIND=dp), PARAMETER :: gcutoff = 0.08_dp, &
79 g1 = -0.02628417880_dp/e, &
80 g2 = -0.07117647788_dp/e, &
81 g3 = 0.08534541323_dp/e, &
82 g4 = 0.0_dp
83 REAL(KIND=dp), PARAMETER :: wcutoff = 14.0_dp
84 REAL(KIND=dp), PARAMETER :: f12 = 0.5_dp, f14 = 0.25_dp, f158 = 15.0_dp/8.0_dp, &
85 f1516 = 15.0_dp/16.0_dp, f24364 = 243.0_dp/64.0_dp, &
86 f2716 = 27.0_dp/16.0_dp, f2732 = 27.0_dp/32.0_dp, &
87 f34 = 0.75_dp, f32 = 1.5_dp, f38 = 0.375_dp, f68 = 0.75_dp, &
88 f6561512 = 6561.0_dp/512.0_dp, f8132 = 81.0_dp/32.0_dp, &
89 f8164 = 81.0_dp/64.0_dp, f729128 = 729.0_dp/128.0_dp, &
90 f52 = 2.5_dp, f94 = 9.0_dp/4.0_dp, f916 = 9.0_dp/16.0_dp, &
91 f89 = 8.0_dp/9.0_dp, f2187256 = 2187.0_dp/256.0_dp, &
92 r1 = 1.0_dp, f98 = 9.0_dp/8.0_dp, r15 = 15.0_dp, &
93 r3 = 3.0_dp, r4 = 4.0_dp, r16 = 16.0_dp, r8 = 8.0_dp, &
94 r6 = 6.0_dp, r2 = 2.0_dp
95
96 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xc_xwpbe'
97
98CONTAINS
99
100! **************************************************************************************************
101!> \brief return various information on the functional
102!> \param reference string with the reference of the actual functional
103!> \param shortform string with the shortform of the functional name
104!> \param needs the components needed by this functional are set to
105!> true (does not set the unneeded components to false)
106!> \param max_deriv ...
107!> \par History
108!> 05.2007 created [Manuel Guidon]
109!> \author Manuel Guidon
110! **************************************************************************************************
111 SUBROUTINE xwpbe_lda_info(reference, shortform, needs, max_deriv)
112 CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
113 TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL :: needs
114 INTEGER, INTENT(out), OPTIONAL :: max_deriv
115
116 IF (PRESENT(reference)) THEN
117 reference = "Jochen Heyd and Gustavo E. Scuseria, J. Chem. Phys., 120, 7274 {LDA version}"
118 END IF
119 IF (PRESENT(shortform)) THEN
120 shortform = "shortrange part of PBE exchange {LDA}"
121 END IF
122 IF (PRESENT(needs)) THEN
123 needs%rho = .true.
124 needs%norm_drho = .true.
125 END IF
126 ! deriv > 1 are not correct
127 IF (PRESENT(max_deriv)) max_deriv = 1
128 END SUBROUTINE xwpbe_lda_info
129
130! **************************************************************************************************
131!> \brief evaluates the screened hole averaged PBE exchange functional for lda
132!> \param rho_set the density where you want to evaluate the functional
133!> \param deriv_set place where to store the functional derivatives (they are
134!> added to the derivatives)
135!> \param order maximum degree of the derivative that should be evaluated
136!> \param xwpbe_params input parameters (scaling,omega)
137!> \par History
138!> 05.2007 created [Manuel Guidon]
139!> \author Manuel Guidon
140!> \note
141!> The current version provides code for derivatives up to second order.
142!> Using the maple sheet in cp2k/doc it is straightforward to produce routines
143!> for higher derivatives.
144! **************************************************************************************************
145 SUBROUTINE xwpbe_lda_eval(rho_set, deriv_set, order, xwpbe_params)
146
147 TYPE(xc_rho_set_type), INTENT(IN) :: rho_set
148 TYPE(xc_derivative_set_type), INTENT(IN) :: deriv_set
149 INTEGER, INTENT(IN) :: order
150 TYPE(section_vals_type), POINTER :: xwpbe_params
151
152 CHARACTER(len=*), PARAMETER :: routinen = 'xwpbe_lda_eval'
153
154 INTEGER :: handle, npoints
155 INTEGER, DIMENSION(2, 3) :: bo
156 REAL(kind=dp) :: epsilon_norm_drho, epsilon_rho, omega, &
157 sx, sx0
158 REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), &
159 POINTER :: dummy, e_0, e_ndrho, e_rho, norm_drho, &
160 rho
161 TYPE(xc_derivative_type), POINTER :: deriv
162
163 CALL timeset(routinen, handle)
164
165 CALL cite_reference(heyd2004)
166
167 CALL section_vals_val_get(xwpbe_params, "SCALE_X", r_val=sx)
168 CALL section_vals_val_get(xwpbe_params, "SCALE_X0", r_val=sx0)
169 CALL section_vals_val_get(xwpbe_params, "OMEGA", r_val=omega)
170
171 CALL xc_rho_set_get(rho_set, rho=rho, &
172 norm_drho=norm_drho, local_bounds=bo, rho_cutoff=epsilon_rho, &
173 drho_cutoff=epsilon_norm_drho)
174 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
175
176 dummy => rho
177
178 e_0 => dummy
179 e_rho => dummy
180 e_ndrho => dummy
181
182 deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
183 allocate_deriv=.true.)
184 CALL xc_derivative_get(deriv, deriv_data=e_0)
185 IF (order >= 1) THEN
186 deriv => xc_dset_get_derivative(deriv_set, [deriv_rho], &
187 allocate_deriv=.true.)
188 CALL xc_derivative_get(deriv, deriv_data=e_rho)
189 deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drho], &
190 allocate_deriv=.true.)
191 CALL xc_derivative_get(deriv, deriv_data=e_ndrho)
192 END IF
193 IF (order > 1) THEN
194 cpabort("derivatives bigger than 1 not implemented")
195 END IF
196
197!$OMP PARALLEL DEFAULT(NONE) &
198!$OMP SHARED(npoints, order, rho, norm_drho, e_0, e_rho, e_ndrho) &
199!$OMP SHARED(epsilon_rho, sx, sx0, omega)
200
201 CALL xwpbe_lda_calc(npoints, order, rho=rho, norm_drho=norm_drho, &
202 e_0=e_0, e_rho=e_rho, e_ndrho=e_ndrho, &
203 epsilon_rho=epsilon_rho, sx=sx, sx0=sx0, omega=omega)
204
205!$OMP END PARALLEL
206
207 CALL timestop(handle)
208
209 END SUBROUTINE xwpbe_lda_eval
210
211! **************************************************************************************************
212!> \brief evaluates the screened hole averaged PBE exchange functional for lda
213!> \param npoints ...
214!> \param order maximum degree of the derivative that should be evaluated
215!> \param rho , ndrho: density and norm of the density gradient
216!> \param norm_drho ...
217!> \param e_0 ...
218!> \param e_rho ...
219!> \param e_ndrho ...
220!> \param epsilon_rho ...
221!> \param sx , sx0: scaling factor for omega!=0 and omega=0
222!> \param sx0 ...
223!> \param omega screening parameter
224!> \par History
225!> 05.2007 created [Manuel Guidon]
226!> \author Manuel Guidon
227!> \note
228!> In order to avoid numerical instabilities, this routine calls different
229!> subroutines. There are 4 routines for the case omega!=0 and 2 routines
230!> for omega=0.
231! **************************************************************************************************
232 SUBROUTINE xwpbe_lda_calc(npoints, order, rho, norm_drho, e_0, e_rho, e_ndrho, &
233 epsilon_rho, sx, sx0, omega)
234
235 INTEGER, INTENT(in) :: npoints, order
236 REAL(kind=dp), DIMENSION(1:npoints), INTENT(inout) :: rho, norm_drho, e_0, e_rho, e_ndrho
237 REAL(kind=dp), INTENT(in) :: epsilon_rho, sx, sx0, omega
238
239 INTEGER :: ip
240 REAL(dp) :: gradient_before, gradient_increment, &
241 my_ndrho, my_rho, pullback
242 REAL(kind=dp) :: ss, ss2, sscale, t1, t2, t3, t4, t5, t6, &
243 t7, t8, ww
244
245!$OMP DO
246
247 DO ip = 1, npoints
248 my_rho = max(rho(ip), 0.0_dp)
249 IF (my_rho > epsilon_rho) THEN
250 gradient_before = e_ndrho(ip)
251 my_ndrho = max(norm_drho(ip), 0.0_dp)
252
253 !Do some precalculation in order to catch the correct branch afterwards
254 sscale = 1.0_dp
255 t1 = pi**2
256 t2 = t1*my_rho
257 t3 = t2**(0.1e1_dp/0.3e1_dp)
258 t4 = 0.1e1_dp/t3
259 t5 = omega*t4
260 ww = 0.6933612743506347048433524e0_dp*t5
261 t6 = my_ndrho*t4
262 t7 = 0.1e1_dp/my_rho
263 t8 = t7*sscale
264 ss = 0.3466806371753173524216762e0_dp*t6*t8
265 IF (ss > scutoff) THEN
266 ss2 = ss*ss
267 sscale = (smax*ss2 - sconst)/(ss2*ss)
268 END IF
269
270 IF (sx0 /= 0.0_dp) THEN
271 !original PBE hole
272 IF (ss*sscale > gcutoff) THEN
273 CALL xwpbe_lda_calc_0(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
274 my_ndrho, sscale, sx0, order)
275 ELSE
276 CALL xwpbe_lda_calc_01(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
277 my_ndrho, sscale, sx0, order)
278 END IF
279 END IF
280
281 IF (sx /= 0.0_dp) THEN
282 IF (omega == 0.0_dp) THEN
283 IF (ss*sscale > gcutoff) THEN
284 CALL xwpbe_lda_calc_0(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
285 my_ndrho, sscale, sx, order)
286 ELSE
287 CALL xwpbe_lda_calc_01(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
288 my_ndrho, sscale, sx, order)
289 END IF
290 ELSE IF (ww < wcutoff .AND. ss*sscale > gcutoff) THEN
291 CALL xwpbe_lda_calc_1(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
292 my_ndrho, omega, sscale, sx, order)
293 ELSE IF (ww < wcutoff .AND. ss*sscale <= gcutoff) THEN
294 CALL xwpbe_lda_calc_2(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
295 my_ndrho, omega, sscale, sx, order)
296 ELSE IF (ww >= wcutoff .AND. ss*sscale > gcutoff) THEN
297 CALL xwpbe_lda_calc_3(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
298 my_ndrho, omega, sscale, sx, order)
299 ELSE
300 CALL xwpbe_lda_calc_4(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
301 my_ndrho, omega, sscale, sx, order)
302 END IF
303 END IF
304 IF (order >= 1 .AND. ss > scutoff) THEN
305 ! Pull back g_eff = g*f(s), s = g/(2*k_F*rho), through the large-s scaling.
306 ! The generated expressions differentiate at fixed f(s).
307 pullback = (-smax*ss2 + 3.0_dp*sconst)/(smax*ss2 - sconst)
308 gradient_increment = e_ndrho(ip) - gradient_before
309 e_rho(ip) = e_rho(ip) - gradient_increment*(4.0_dp*my_ndrho/(3.0_dp*my_rho))*pullback
310 e_ndrho(ip) = gradient_before + gradient_increment*(1.0_dp + pullback)
311 END IF
312 END IF
313 END DO
314
315!$OMP END DO
316
317 END SUBROUTINE xwpbe_lda_calc
318
319! **************************************************************************************************
320!> \brief Evaluates the screened hole averaged PBE exchange functional for lda
321!> \param e_0 ...
322!> \param e_rho ...
323!> \param e_ndrho ...
324!> \param rho , ndrho: density and norm of the density gradient
325!> \param ndrho ...
326!> \param sscale scaling factor to enforce Lieb-Oxford bound
327!> \param sx0 scaling factor
328!> \param order maximum degree of the derivative that should be evaluated
329!> \par History
330!> 05.2007 created [Manuel Guidon]
331!> \author Manuel Guidon
332!> \note
333!> This routine evaluates the exact functional for omega=0.
334! **************************************************************************************************
335 SUBROUTINE xwpbe_lda_calc_0(e_0, e_rho, e_ndrho, rho, ndrho, sscale, sx0, order)
336 REAL(kind=dp), INTENT(INOUT) :: e_0, e_rho, e_ndrho
337 REAL(kind=dp), INTENT(IN) :: rho, ndrho, sscale, sx0
338 INTEGER, INTENT(IN) :: order
339
340 REAL(kind=dp) :: dqndrho, dqrho, q, t1, t10, t100, t103, t105, t106, t109, t11, t110, t111, &
341 t112, t114, t116, t117, t118, t119, t12, t120, t121, t122, t123, t125, t126, t127, t13, &
342 t130, t134, t135, t136, t138, t139, t14, t142, t143, t145, t146, t147, t148, t149, t15, &
343 t150, t152, t156, t158, t159, t16, t160, t163, t164, t165, t166, t169, t170, t172, t173, &
344 t174, t175, t176, t18, t180, t183, t184, t185, t187, t188, t19, t190, t191, t192, t193, &
345 t199, t2, t20, t200, t201, t202, t203, t207, t209, t21, t215, t218, t219, t22, t220, &
346 t222, t223, t224, t225, t227, t228, t231, t233, t236, t237, t24
347 REAL(kind=dp) :: t240, t241, t242, t245, t246, t247, t249, t25, t250, t253, t254, t258, t26, &
348 t261, t262, t263, t265, t266, t269, t272, t274, t275, t278, t28, t281, t282, t284, t285, &
349 t287, t288, t29, t290, t291, t294, t297, t3, t300, t301, t303, t304, t306, t307, t31, &
350 t314, t32, t321, t323, t326, t327, t33, t330, t334, t335, t336, t337, t338, t339, t34, &
351 t340, t342, t343, t344, t345, t347, t355, t356, t357, t358, t359, t36, t361, t362, t363, &
352 t367, t368, t37, t372, t374, t376, t377, t381, t383, t384, t387, t388, t39, t390, t391, &
353 t394, t397, t398, t4, t40, t400, t401, t402, t404, t405, t406
354 REAL(kind=dp) :: t408, t409, t410, t411, t412, t413, t414, t415, t416, t417, t418, t42, &
355 t423, t425, t426, t429, t430, t432, t433, t435, t44, t440, t443, t444, t446, t447, t449, &
356 t46, t463, t465, t47, t471, t472, t475, t476, t478, t479, t480, t484, t485, t489, t491, &
357 t495, t497, t5, t500, t501, t504, t505, t507, t508, t510, t511, t513, t514, t515, t52, &
358 t520, t53, t54, t56, t58, t59, t6, t61, t63, t65, t66, t67, t68, t69, t7, t70, t71, t72, &
359 t73, t74, t76, t77, t78, t79, t8, t80, t81, t83, t84, t86, t88, t89, t9, t91, t92, t93, &
360 t94, t95, t97, t98
361
362 t1 = ndrho**2
363 t2 = a1*t1
364 t3 = r2**2
365 t4 = 0.1e1_dp/t3
366 t5 = t2*t4
367 t6 = pi**2
368 t7 = r3*t6
369 t8 = t7*rho
370 t9 = t8**(0.1e1_dp/0.3e1_dp)
371 t10 = t9**2
372 t11 = 0.1e1_dp/t10
373 t12 = rho**2
374 t13 = 0.1e1_dp/t12
375 t14 = t11*t13
376 t15 = sscale**2
377 t16 = t14*t15
378 t18 = t1**2
379 t19 = a2*t18
380 t20 = t3**2
381 t21 = 0.1e1_dp/t20
382 t22 = t19*t21
383 t24 = 0.1e1_dp/t9/t8
384 t25 = t12**2
385 t26 = 0.1e1_dp/t25
386 t28 = t15**2
387 t29 = t24*t26*t28
388 t31 = t5*t16 + t22*t29
389 t32 = f94*t31
390 t33 = a3*t18
391 t34 = t33*t21
392 t36 = t18*ndrho
393 t37 = a4*t36
394 t39 = 0.1e1_dp/t20/r2
395 t40 = t37*t39
396 t42 = 0.1e1_dp/t10/t8
397 t44 = 0.1e1_dp/t25/rho
398 t46 = t28*sscale
399 t47 = t42*t44*t46
400 t52 = 0.1e1_dp/t20/t3
401 t53 = a5*t18*t1*t52
402 t54 = r3**2
403 t56 = t6**2
404 t58 = 0.1e1_dp/t54/t56
405 t59 = t25**2
406 t61 = t28*t15
407 t63 = t58/t59*t61
408 t65 = r1 + t34*t29 + t40*t47 + t53*t63
409 t66 = 0.1e1_dp/t65
410 t67 = t66*t1
411 t68 = t32*t67
412 t69 = t4*t11
413 t70 = t13*t15
414 t71 = 0.1e1_dp/a
415 t72 = t70*t71
416 t73 = t69*t72
417 q = t68*t73
418 t74 = rho**(0.1e1_dp/0.3e1_dp)
419 t76 = t74*rho*f89
420 t77 = b*f12
421 t78 = t1*t4
422 t79 = t78*t11
423 t80 = t31*t66
424 t81 = t70*t80
425 t83 = t79*t81 + dd
426 t84 = 0.1e1_dp/t83
427 t86 = f2*t31
428 t88 = f1 + t86*t66
429 t89 = t70*t88
430 t91 = t79*t89 + r1
431 t92 = f12*t91
432 t93 = t83**2
433 t94 = 0.1e1_dp/t93
434 t95 = c*t94
435 t97 = f34*pi
436 t98 = rootpi
437 t100 = r6*c
438 t103 = r4*b
439 t105 = r8*a
440 t106 = t93*t83
441 t109 = t98*(r15*e + t100*t91*t83 + t103*t93 + t105*t106)
442 t110 = 0.1e1_dp/r16
443 t111 = sqrt(t83)
444 t112 = t111*t106
445 t114 = t110/t112
446 t116 = sqrt(a)
447 t117 = exp(q)
448 t118 = t116*t117
449 t119 = f32*ndrho
450 t120 = 0.1e1_dp/r2
451 t121 = t119*t120
452 t122 = 0.1e1_dp/t9
453 t123 = 0.1e1_dp/rho
454 t125 = t80*t71
455 t126 = sqrt(t125)
456 t127 = sscale*t126
457 t130 = erfc(t121*t122*t123*t127)
458 t134 = 0.1e1_dp/f1516
459 t135 = (t97 + t109*t114 - t97*t118*t130)*t134
460 t136 = 0.1e1_dp/t98
461 t138 = 0.1e1_dp/e
462 t139 = t136*t112*t138
463 t142 = (-t135*t139 + r1)*e
464 t143 = 0.1e1_dp/t106
465 t145 = f12*a
466 t146 = exei(q, t117)
467 t147 = t78*t14
468 t148 = t15*t31
469 t149 = t66*t84
470 t150 = t148*t149
471 t152 = log(t147*t150)
472 t156 = (t77*t84 + t92*t95 + t142*t143 + t145*(t146 + t152)) &
473 *clda
474 e_0 = e_0 + (-t76*t156)*sx0
475 IF (order >= 1) THEN
476 t158 = t4*t42
477 t159 = t2*t158
478 t160 = t70*t7
479 t163 = t12*rho
480 t164 = 0.1e1_dp/t163
481 t165 = t11*t164
482 t166 = t165*t15
483 t169 = t54*t56
484 t170 = t169*t12
485 t172 = 0.1e1_dp/t9/t170
486 t173 = t21*t172
487 t174 = t19*t173
488 t175 = t26*t28
489 t176 = t175*t7
490 t180 = t24*t44*t28
491 t183 = -0.2e1_dp/0.3e1_dp*t159*t160 - (2._dp*t5*t166) - 0.4e1_dp/ &
492 0.3e1_dp*t174*t176 - (4._dp*t22*t180)
493 t184 = f94*t183
494 t185 = t184*t67
495 t187 = t65**2
496 t188 = 0.1e1_dp/t187
497 t190 = t188*t1*t4
498 t191 = t32*t190
499 t192 = t15*t71
500 t193 = t33*t173
501 t199 = 0.1e1_dp/t10/t170
502 t200 = t39*t199
503 t201 = t37*t200
504 t202 = t44*t46
505 t203 = t202*t7
506 t207 = 0.1e1_dp/t25/t12
507 t209 = t42*t207*t46
508 t215 = t58/t59/rho*t61
509 t218 = -0.4e1_dp/0.3e1_dp*t193*t176 - (4._dp*t34*t180) - 0.5e1_dp &
510 /0.3e1_dp*t201*t203 - (5._dp*t40*t209) - (8._dp*t53*t215)
511 t219 = t192*t218
512 t220 = t14*t219
513 t222 = t67*t4
514 t223 = t32*t222
515 t224 = t42*t13
516 t225 = t224*t15
517 t227 = t71*r3*t6
518 t228 = t225*t227
519 t231 = t164*t15
520 t233 = t69*t231*t71
521 dqrho = t185*t73 - t191*t220 - 0.2e1_dp/0.3e1_dp*t223*t228 - (2._dp &
522 *t68*t233)
523 t236 = a1*ndrho
524 t237 = t236*t4
525 t240 = t1*ndrho
526 t241 = a2*t240
527 t242 = t241*t21
528 t245 = 2._dp*t237*t16 + 4._dp*t242*t29
529 t246 = f94*t245
530 t247 = t246*t67
531 t249 = a3*t240
532 t250 = t249*t21
533 t253 = a4*t18
534 t254 = t253*t39
535 t258 = a5*t36*t52
536 t261 = 4._dp*t250*t29 + 5._dp*t254*t47 + 6._dp*t258*t63
537 t262 = t192*t261
538 t263 = t14*t262
539 t265 = t66*ndrho
540 t266 = t32*t265
541 dqndrho = t247*t73 - t191*t263 + 2._dp*t266*t73
542 t269 = t74*f89
543 t272 = t78*t224
544 t274 = t66*r3*t6
545 t275 = t148*t274
546 t278 = t231*t80
547 t281 = t183*t66
548 t282 = t70*t281
549 t284 = t188*t218
550 t285 = t148*t284
551 t287 = -0.2e1_dp/0.3e1_dp*t272*t275 - (2._dp*t79*t278) + (t79 &
552 *t282) - t147*t285
553 t288 = t94*t287
554 t290 = t15*t88
555 t291 = t290*t7
556 t294 = t231*t88
557 t297 = f2*t183
558 t300 = t297*t66 - t86*t284
559 t301 = t70*t300
560 t303 = -0.2e1_dp/0.3e1_dp*t272*t291 - (2._dp*t79*t294) + (t79 &
561 *t301)
562 t304 = f12*t303
563 t306 = c*t143
564 t307 = t306*t287
565 t314 = t83*t287
566 t321 = t98*(t100*t303*t83 + t100*t91*t287 + 2._dp*t103*t314 &
567 + 3._dp*t105*t93*t287)
568 t323 = t93**2
569 t326 = t110/t111/t323
570 t327 = t326*t287
571 t330 = t97*t116
572 t334 = rootpi
573 t335 = 0.1e1_dp/t334
574 t336 = t117*t335
575 t337 = f32**2
576 t338 = t337*t1
577 t339 = t338*t69
578 t340 = t70*t125
579 t342 = 1.0_dp/t117
580 t343 = t120*t24
581 t344 = t119*t343
582 t345 = t123*sscale
583 t347 = t126*r3*t6
584 t355 = t119*t120*t122
585 t356 = 0.1e1_dp/t126
586 t357 = t281*t71
587 t358 = t31*t188
588 t359 = t71*t218
589 t361 = t357 - t358*t359
590 t362 = t356*t361
591 t363 = t345*t362
592 t367 = t342*(-t344*t345*t347/0.3e1_dp - t121*t122*t13*t127 &
593 + t355*t363/0.2e1_dp)
594 t368 = t336*t367
595 t372 = (t321*t114 - 0.7e1_dp/0.2e1_dp*t109*t327 - (t330*dqrho &
596 *t117*t130) + (2._dp*t330*t368))*t134
597 t374 = t135*t136
598 t376 = t111*t93*t138
599 t377 = t376*t287
600 t381 = (-t372*t139 - 0.7e1_dp/0.2e1_dp*t374*t377)*e
601 t383 = 0.1e1_dp/t323
602 t384 = t383*t287
603 t387 = dexeirho(q, dqrho, t146)
604 t388 = t78*t225
605 t390 = t84*r3*t6
606 t391 = t80*t390
607 t394 = t78*t165
608 t397 = t15*t183
609 t398 = t397*t149
610 t400 = t188*t84
611 t401 = t400*t218
612 t402 = t148*t401
613 t404 = t66*t94
614 t405 = t404*t287
615 t406 = t148*t405
616 t408 = -0.2e1_dp/0.3e1_dp*t388*t391 - (2._dp*t394*t150) + t147 &
617 *t398 - t147*t402 - t147*t406
618 t409 = 0.1e1_dp/t1
619 t410 = t408*t409
620 t411 = t3*t10
621 t412 = t410*t411
622 t413 = 0.1e1_dp/t15
623 t414 = t12*t413
624 t415 = 0.1e1_dp/t31
625 t416 = t415*t65
626 t417 = t416*t83
627 t418 = t414*t417
628 t423 = (-t77*t288 + t304*t95 - 2._dp*t92*t307 + t381*t143 - 3._dp &
629 *t142*t384 + t145*(t387 + t412*t418))*clda
630 e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t269*t156 - t76*t423)*sx0
631 t425 = ndrho*t4
632 t426 = t425*t11
633 t429 = t245*t66
634 t430 = t70*t429
635 t432 = t188*t261
636 t433 = t148*t432
637 t435 = 2._dp*t426*t81 + t79*t430 - t147*t433
638 t440 = f2*t245
639 t443 = t440*t66 - t86*t432
640 t444 = t70*t443
641 t446 = 2._dp*t426*t89 + t79*t444
642 t447 = f12*t446
643 t449 = t306*t435
644 t463 = t98*(t100*t446*t83 + t100*t91*t435 + 2._dp*t103*t83 &
645 *t435 + 3._dp*t105*t93*t435)
646 t465 = t326*t435
647 t471 = f32*t120
648 t472 = t471*t122
649 t475 = t429*t71
650 t476 = t71*t261
651 t478 = t475 - t358*t476
652 t479 = t356*t478
653 t480 = t345*t479
654 t484 = t342*(t472*t345*t126 + t355*t480/0.2e1_dp)
655 t485 = t336*t484
656 t489 = (t463*t114 - 0.7e1_dp/0.2e1_dp*t109*t465 - (t330*dqndrho &
657 *t117*t130) + (2._dp*t330*t485))*t134
658 t491 = t376*t435
659 t495 = (-t489*t139 - 0.7e1_dp/0.2e1_dp*t374*t491)*e
660 t497 = t383*t435
661 t500 = dexeindrho(q, dqndrho, t146)
662 t501 = t425*t14
663 t504 = t15*t245
664 t505 = t504*t149
665 t507 = t400*t261
666 t508 = t148*t507
667 t510 = t404*t435
668 t511 = t148*t510
669 t513 = 2._dp*t501*t150 + t147*t505 - t147*t508 - t147*t511
670 t514 = t513*t409
671 t515 = t514*t411
672 t520 = (-t77*t94*t435 + t447*t95 - 2._dp*t92*t449 + t495*t143 &
673 - 3._dp*t142*t497 + t145*(t500 + t515*t418))*clda
674 e_ndrho = e_ndrho + (-t76*t520)*sx0
675 END IF
676
677 END SUBROUTINE xwpbe_lda_calc_0
678
679! **************************************************************************************************
680!> \brief Evaluates the screened hole averaged PBE exchange functional for lda
681!> \param e_0 ...
682!> \param e_rho ...
683!> \param e_ndrho ...
684!> \param rho , ndrho: density and norm of the density gradient
685!> \param ndrho ...
686!> \param sscale scaling factor to enforce Lieb-Oxford bound
687!> \param sx0 scaling factor
688!> \param order maximum degree of the derivative that should be evaluated
689!> \par History
690!> 05.2007 created [Manuel Guidon]
691!> \author Manuel Guidon
692!> \note
693!> This routine evaluates the functional for omega=0 using a taylor
694!> expansion for the parameter G.
695! **************************************************************************************************
696 SUBROUTINE xwpbe_lda_calc_01(e_0, e_rho, e_ndrho, rho, ndrho, sscale, sx0, order)
697 REAL(kind=dp), INTENT(INOUT) :: e_0, e_rho, e_ndrho
698 REAL(kind=dp), INTENT(IN) :: rho, ndrho, sscale, sx0
699 INTEGER, INTENT(IN) :: order
700
701 REAL(kind=dp) :: dqndrho, dqrho, q, t1, t10, t100, t101, t103, t104, t107, t109, t11, t111, &
702 t112, t113, t114, t115, t116, t118, t12, t122, t124, t125, t126, t129, t13, t130, t131, &
703 t132, t135, t136, t139, t14, t140, t141, t142, t146, t149, t15, t150, t151, t153, t154, &
704 t156, t157, t158, t159, t16, t165, t166, t167, t168, t169, t173, t175, t18, t181, t184, &
705 t185, t186, t188, t189, t19, t190, t191, t193, t194, t197, t199, t2, t20, t202, t203, &
706 t206, t207, t208, t21, t211, t212, t213, t215, t216, t219, t22, t220, t224, t227, t228, &
707 t229, t231, t232, t235, t238, t24, t240, t241, t244, t247, t248
708 REAL(kind=dp) :: t25, t250, t251, t253, t254, t256, t257, t26, t260, t263, t266, t267, t270, &
709 t272, t273, t276, t277, t28, t280, t283, t288, t29, t293, t294, t297, t299, t3, t300, &
710 t301, t304, t305, t307, t308, t31, t311, t314, t315, t317, t318, t319, t32, t321, t322, &
711 t323, t325, t326, t327, t328, t329, t33, t330, t331, t332, t333, t334, t335, t34, t340, &
712 t342, t343, t346, t347, t349, t350, t352, t357, t36, t360, t361, t364, t366, t37, t371, &
713 t372, t375, t376, t379, t380, t383, t385, t388, t389, t39, t392, t393, t395, t396, t398, &
714 t399, t4, t40, t401, t402, t403, t408, t42, t44, t46, t47, t5
715 REAL(kind=dp) :: t52, t53, t54, t56, t58, t59, t6, t61, t63, t65, t66, t67, t68, t69, t7, &
716 t70, t71, t72, t73, t74, t76, t77, t78, t79, t8, t80, t81, t83, t84, t86, t88, t89, t9, &
717 t92, t93, t94, t95, t97, t98
718
719 IF (ndrho == 0.0_dp) THEN
720 ! The cancelling exp(Q)*E1(Q)+log(Q) terms tend to -Euler's constant.
721 t1 = -f89*clda*(b/(2.0_dp*dd) + c/(2.0_dp*dd**2) + e/dd**3 + &
722 0.5_dp*a*(-0.577215664901532860606512_dp + log(a/(f94*dd))))
723 e_0 = e_0 + sx0*t1*rho**(4.0_dp/3.0_dp)
724 IF (order >= 1) e_rho = e_rho + sx0*(4.0_dp/3.0_dp)*t1*rho**(1.0_dp/3.0_dp)
725 RETURN
726 END IF
727
728 t1 = ndrho**2
729 t2 = a1*t1
730 t3 = r2**2
731 t4 = 0.1e1_dp/t3
732 t5 = t2*t4
733 t6 = pi**2
734 t7 = r3*t6
735 t8 = t7*rho
736 t9 = t8**(0.1e1_dp/0.3e1_dp)
737 t10 = t9**2
738 t11 = 0.1e1_dp/t10
739 t12 = rho**2
740 t13 = 0.1e1_dp/t12
741 t14 = t11*t13
742 t15 = sscale**2
743 t16 = t14*t15
744 t18 = t1**2
745 t19 = a2*t18
746 t20 = t3**2
747 t21 = 0.1e1_dp/t20
748 t22 = t19*t21
749 t24 = 0.1e1_dp/t9/t8
750 t25 = t12**2
751 t26 = 0.1e1_dp/t25
752 t28 = t15**2
753 t29 = t24*t26*t28
754 t31 = t5*t16 + t22*t29
755 t32 = f94*t31
756 t33 = a3*t18
757 t34 = t33*t21
758 t36 = t18*ndrho
759 t37 = a4*t36
760 t39 = 0.1e1_dp/t20/r2
761 t40 = t37*t39
762 t42 = 0.1e1_dp/t10/t8
763 t44 = 0.1e1_dp/t25/rho
764 t46 = t28*sscale
765 t47 = t42*t44*t46
766 t52 = 0.1e1_dp/t20/t3
767 t53 = a5*t18*t1*t52
768 t54 = r3**2
769 t56 = t6**2
770 t58 = 0.1e1_dp/t54/t56
771 t59 = t25**2
772 t61 = t28*t15
773 t63 = t58/t59*t61
774 t65 = r1 + t34*t29 + t40*t47 + t53*t63
775 t66 = 0.1e1_dp/t65
776 t67 = t66*t1
777 t68 = t32*t67
778 t69 = t4*t11
779 t70 = t13*t15
780 t71 = 0.1e1_dp/a
781 t72 = t70*t71
782 t73 = t69*t72
783 q = t68*t73
784 t74 = rho**(0.1e1_dp/0.3e1_dp)
785 t76 = t74*rho*f89
786 t77 = b*f12
787 t78 = t1*t4
788 t79 = t78*t11
789 t80 = t31*t66
790 t81 = t70*t80
791 t83 = t79*t81 + dd
792 t84 = 0.1e1_dp/t83
793 t86 = f2*t31
794 t88 = f1 + t86*t66
795 t89 = t70*t88
796 t92 = f12*(t79*t89 + r1)
797 t93 = t83**2
798 t94 = 0.1e1_dp/t93
799 t95 = c*t94
800 t97 = g2*t1
801 t98 = t97*t4
802 t100 = g3*t18
803 t101 = t100*t21
804 t103 = g1 + t98*t16 + t101*t29
805 t104 = t70*t103
806 t107 = (t79*t104 + r1)*e
807 t109 = 0.1e1_dp/t93/t83
808 t111 = f12*a
809 t112 = exei(q)
810 t113 = t78*t14
811 t114 = t15*t31
812 t115 = t66*t84
813 t116 = t114*t115
814 t118 = log(t113*t116)
815 t122 = (t77*t84 + t92*t95 + t107*t109 + t111*(t112 + t118)) &
816 *clda
817 e_0 = e_0 + (-t76*t122)*sx0
818 IF (order >= 1) THEN
819 t124 = t4*t42
820 t125 = t2*t124
821 t126 = t70*t7
822 t129 = t12*rho
823 t130 = 0.1e1_dp/t129
824 t131 = t11*t130
825 t132 = t131*t15
826 t135 = t54*t56
827 t136 = t135*t12
828 t139 = t21/t9/t136
829 t140 = t19*t139
830 t141 = t26*t28
831 t142 = t141*t7
832 t146 = t24*t44*t28
833 t149 = -0.2e1_dp/0.3e1_dp*t125*t126 - (2._dp*t5*t132) - 0.4e1_dp/ &
834 0.3e1_dp*t140*t142 - (4._dp*t22*t146)
835 t150 = f94*t149
836 t151 = t150*t67
837 t153 = t65**2
838 t154 = 0.1e1_dp/t153
839 t156 = t154*t1*t4
840 t157 = t32*t156
841 t158 = t15*t71
842 t159 = t33*t139
843 t165 = 0.1e1_dp/t10/t136
844 t166 = t39*t165
845 t167 = t37*t166
846 t168 = t44*t46
847 t169 = t168*t7
848 t173 = 0.1e1_dp/t25/t12
849 t175 = t42*t173*t46
850 t181 = t58/t59/rho*t61
851 t184 = -0.4e1_dp/0.3e1_dp*t159*t142 - (4._dp*t34*t146) - 0.5e1_dp &
852 /0.3e1_dp*t167*t169 - (5._dp*t40*t175) - (8._dp*t53*t181)
853 t185 = t158*t184
854 t186 = t14*t185
855 t188 = t67*t4
856 t189 = t32*t188
857 t190 = t42*t13
858 t191 = t190*t15
859 t193 = t71*r3*t6
860 t194 = t191*t193
861 t197 = t130*t15
862 t199 = t69*t197*t71
863 dqrho = t151*t73 - t157*t186 - 0.2e1_dp/0.3e1_dp*t189*t194 - (2._dp &
864 *t68*t199)
865 t202 = a1*ndrho
866 t203 = t202*t4
867 t206 = t1*ndrho
868 t207 = a2*t206
869 t208 = t207*t21
870 t211 = 2._dp*t203*t16 + 4._dp*t208*t29
871 t212 = f94*t211
872 t213 = t212*t67
873 t215 = a3*t206
874 t216 = t215*t21
875 t219 = a4*t18
876 t220 = t219*t39
877 t224 = a5*t36*t52
878 t227 = 4._dp*t216*t29 + 5._dp*t220*t47 + 6._dp*t224*t63
879 t228 = t158*t227
880 t229 = t14*t228
881 t231 = t66*ndrho
882 t232 = t32*t231
883 dqndrho = t213*t73 - t157*t229 + 2._dp*t232*t73
884 t235 = t74*f89
885 t238 = t78*t190
886 t240 = t66*r3*t6
887 t241 = t114*t240
888 t244 = t197*t80
889 t247 = t149*t66
890 t248 = t70*t247
891 t250 = t154*t184
892 t251 = t114*t250
893 t253 = -0.2e1_dp/0.3e1_dp*t238*t241 - (2._dp*t79*t244) + (t79 &
894 *t248) - t113*t251
895 t254 = t94*t253
896 t256 = t15*t88
897 t257 = t256*t7
898 t260 = t197*t88
899 t263 = f2*t149
900 t266 = t263*t66 - t86*t250
901 t267 = t70*t266
902 t270 = f12*(-0.2e1_dp/0.3e1_dp*t238*t257 - (2._dp*t79*t260) + &
903 (t79*t267))
904 t272 = c*t109
905 t273 = t272*t253
906 t276 = t15*t103
907 t277 = t276*t7
908 t280 = t197*t103
909 t283 = t97*t124
910 t288 = t100*t139
911 t293 = -0.2e1_dp/0.3e1_dp*t283*t126 - (2._dp*t98*t132) - 0.4e1_dp &
912 /0.3e1_dp*t288*t142 - (4._dp*t101*t146)
913 t294 = t70*t293
914 t297 = (-0.2e1_dp/0.3e1_dp*t238*t277 - (2._dp*t79*t280) + (t79 &
915 *t294))*e
916 t299 = t93**2
917 t300 = 0.1e1_dp/t299
918 t301 = t300*t253
919 t304 = dexeirho(q, dqrho, t112)
920 t305 = t78*t191
921 t307 = t84*r3*t6
922 t308 = t80*t307
923 t311 = t78*t131
924 t314 = t15*t149
925 t315 = t314*t115
926 t317 = t154*t84
927 t318 = t317*t184
928 t319 = t114*t318
929 t321 = t66*t94
930 t322 = t321*t253
931 t323 = t114*t322
932 t325 = -0.2e1_dp/0.3e1_dp*t305*t308 - (2._dp*t311*t116) + t113 &
933 *t315 - t113*t319 - t113*t323
934 t326 = 0.1e1_dp/t1
935 t327 = t325*t326
936 t328 = t3*t10
937 t329 = t327*t328
938 t330 = 0.1e1_dp/t15
939 t331 = t12*t330
940 t332 = 0.1e1_dp/t31
941 t333 = t332*t65
942 t334 = t333*t83
943 t335 = t331*t334
944 t340 = (-t77*t254 + t270*t95 - 2._dp*t92*t273 + t297*t109 - 3._dp &
945 *t107*t301 + t111*(t304 + t329*t335))*clda
946 e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t235*t122 - t76*t340)*sx0
947 t342 = ndrho*t4
948 t343 = t342*t11
949 t346 = t211*t66
950 t347 = t70*t346
951 t349 = t154*t227
952 t350 = t114*t349
953 t352 = 2._dp*t343*t81 + t79*t347 - t113*t350
954 t357 = f2*t211
955 t360 = t357*t66 - t86*t349
956 t361 = t70*t360
957 t364 = f12*(2._dp*t343*t89 + t79*t361)
958 t366 = t272*t352
959 t371 = g2*ndrho
960 t372 = t371*t4
961 t375 = g3*t206
962 t376 = t375*t21
963 t379 = 2._dp*t372*t16 + 4._dp*t376*t29
964 t380 = t70*t379
965 t383 = (2._dp*t343*t104 + t79*t380)*e
966 t385 = t300*t352
967 t388 = dexeindrho(q, dqndrho, t112)
968 t389 = t342*t14
969 t392 = t15*t211
970 t393 = t392*t115
971 t395 = t317*t227
972 t396 = t114*t395
973 t398 = t321*t352
974 t399 = t114*t398
975 t401 = 2._dp*t389*t116 + t113*t393 - t113*t396 - t113*t399
976 t402 = t401*t326
977 t403 = t402*t328
978 t408 = (-t77*t94*t352 + t364*t95 - 2._dp*t92*t366 + t383*t109 &
979 - 3._dp*t107*t385 + t111*(t388 + t403*t335))*clda
980 e_ndrho = e_ndrho + (-t76*t408)*sx0
981 END IF
982
983 END SUBROUTINE xwpbe_lda_calc_01
984
985! **************************************************************************************************
986!> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
987!> \param e_0 ...
988!> \param e_rho ...
989!> \param e_ndrho ...
990!> \param rho , ndrho: density and norm of the density gradient
991!> \param ndrho ...
992!> \param omega scaling factor
993!> \param sscale scaling factor to enforce Lieb-Oxford bound
994!> \param sx scaling factor
995!> \param order maximum degree of the derivative that should be evaluated
996!> \par History
997!> 05.2007 created [Manuel Guidon]
998!> \author Manuel Guidon
999!> \note
1000!> This routine evaluates the exact functional for omega!=0.
1001! **************************************************************************************************
1002 SUBROUTINE xwpbe_lda_calc_1(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
1003 REAL(kind=dp), INTENT(INOUT) :: e_0, e_rho, e_ndrho
1004 REAL(kind=dp), INTENT(IN) :: rho, ndrho, omega, sscale, sx
1005 INTEGER, INTENT(IN) :: order
1006
1007 REAL(kind=dp) :: dqndrho, dqrho, q, t1, t10, t1001, t1009, t1011, t102, t1024, t1035, t104, &
1008 t105, t1052, t1066, t1068, t1069, t108, t109, t11, t110, t111, t113, t115, t116, t117, &
1009 t118, t119, t12, t120, t121, t123, t124, t125, t126, t127, t128, t129, t13, t131, t132, &
1010 t133, t136, t14, t140, t141, t142, t144, t145, t147, t148, t149, t15, t150, t151, t152, &
1011 t153, t154, t155, t156, t157, t158, t159, t16, t162, t163, t166, t167, t168, t169, t17, &
1012 t170, t174, t176, t177, t18, t180, t181, t185, t186, t189, t19, t190, t192, t193, t194, &
1013 t195, t197, t198, t199, t2, t200, t202, t205, t209, t21, t210
1014 REAL(kind=dp) :: t213, t214, t219, t22, t221, t222, t223, t224, t227, t228, t23, t233, t237, &
1015 t239, t24, t241, t243, t246, t247, t25, t250, t251, t252, t253, t255, t256, t257, t258, &
1016 t263, t264, t265, t267, t27, t270, t271, t273, t275, t276, t28, t280, t284, t285, t286, &
1017 t288, t289, t29, t290, t293, t294, t295, t298, t3, t303, t305, t307, t31, t310, t311, &
1018 t312, t313, t315, t316, t318, t319, t32, t321, t326, t329, t330, t332, t333, t335, t336, &
1019 t338, t339, t34, t340, t342, t343, t345, t346, t347, t348, t349, t35, t351, t352, t353, &
1020 t354, t357, t358, t36, t361, t362, t363, t364, t368, t371, t372
1021 REAL(kind=dp) :: t373, t374, t375, t376, t377, t378, t38, t383, t384, t385, t386, t39, t390, &
1022 t392, t398, t4, t401, t402, t403, t404, t406, t409, t41, t411, t412, t415, t416, t419, &
1023 t42, t420, t421, t424, t425, t426, t428, t429, t432, t433, t437, t44, t440, t441, t442, &
1024 t444, t446, t449, t452, t453, t454, t457, t46, t461, t463, t465, t468, t469, t472, t475, &
1025 t478, t479, t48, t481, t486, t49, t493, t495, t498, t499, t5, t502, t503, t504, t507, &
1026 t508, t509, t510, t511, t513, t514, t515, t517, t518, t522, t525, t529, t530, t531, t532, &
1027 t533, t534, t535, t537, t538, t539, t54, t540, t542, t55, t550
1028 REAL(kind=dp) :: t551, t552, t553, t554, t556, t557, t558, t56, t562, t563, t567, t569, &
1029 t571, t572, t575, t576, t577, t578, t58, t581, t582, t583, t587, t588, t589, t592, t596, &
1030 t597, t6, t60, t602, t603, t608, t61, t613, t617, t620, t621, t624, t626, t629, t63, &
1031 t631, t634, t638, t639, t644, t645, t65, t653, t655, t656, t657, t658, t659, t663, t666, &
1032 t669, t67, t673, t679, t68, t681, t685, t689, t69, t690, t691, t697, t698, t7, t70, t701, &
1033 t71, t711, t713, t717, t718, t72, t721, t728, t73, t735, t736, t739, t74, t740, t746, &
1034 t747, t748, t75, t752, t753, t754, t755, t759, t761, t763, t765, t769
1035 REAL(kind=dp) :: t77, t771, t772, t779, t78, t780, t781, t783, t784, t787, t791, t792, t799, &
1036 t8, t80, t800, t801, t803, t804, t808, t81, t810, t812, t815, t816, t817, t82, t820, &
1037 t823, t826, t83, t832, t834, t836, t84, t842, t845, t846, t848, t849, t85, t851, t865, &
1038 t867, t87, t870, t871, t873, t874, t876, t877, t88, t880, t884, t885, t888, t889, t891, &
1039 t892, t893, t897, t898, t9, t90, t902, t904, t907, t908, t909, t91, t910, t916, t918, &
1040 t919, t92, t93, t930, t932, t933, t937, t94, t942, t945, t95, t951, t954, t958, t96, &
1041 t962, t965, t968, t97, t971, t972, t979, t982, t988, t99
1042
1043 t1 = ndrho**2
1044 t2 = r2**2
1045 t3 = 0.1e1_dp/t2
1046 t4 = t1*t3
1047 t5 = pi**2
1048 t6 = r3*t5
1049 t7 = t6*rho
1050 t8 = t7**(0.1e1_dp/0.3e1_dp)
1051 t9 = t8**2
1052 t10 = 0.1e1_dp/t9
1053 t11 = t4*t10
1054 t12 = rho**2
1055 t13 = 0.1e1_dp/t12
1056 t14 = sscale**2
1057 t15 = t13*t14
1058 t16 = a1*t1
1059 t17 = t16*t3
1060 t18 = t10*t13
1061 t19 = t18*t14
1062 t21 = t1**2
1063 t22 = a2*t21
1064 t23 = t2**2
1065 t24 = 0.1e1_dp/t23
1066 t25 = t22*t24
1067 t27 = 0.1e1_dp/t8/t7
1068 t28 = t12**2
1069 t29 = 0.1e1_dp/t28
1070 t31 = t14**2
1071 t32 = t27*t29*t31
1072 t34 = t17*t19 + t25*t32
1073 t35 = a3*t21
1074 t36 = t35*t24
1075 t38 = t21*ndrho
1076 t39 = a4*t38
1077 t41 = 0.1e1_dp/t23/r2
1078 t42 = t39*t41
1079 t44 = 0.1e1_dp/t9/t7
1080 t46 = 0.1e1_dp/t28/rho
1081 t48 = t31*sscale
1082 t49 = t44*t46*t48
1083 t54 = 0.1e1_dp/t23/t2
1084 t55 = a5*t21*t1*t54
1085 t56 = r3**2
1086 t58 = t5**2
1087 t60 = 0.1e1_dp/t56/t58
1088 t61 = t28**2
1089 t63 = t31*t14
1090 t65 = t60/t61*t63
1091 t67 = r1 + t36*t32 + t42*t49 + t55*t65
1092 t68 = 0.1e1_dp/t67
1093 t69 = t34*t68
1094 t70 = t15*t69
1095 t71 = t11*t70
1096 t72 = omega**2
1097 t73 = beta*t72
1098 t74 = t73*t10
1099 t75 = t71 + t74
1100 t77 = 0.1e1_dp/a
1101 q = f94*t75*t77
1102 t78 = rho**(0.1e1_dp/0.3e1_dp)
1103 t80 = t78*rho*f89
1104 t81 = b*f12
1105 t82 = t71 + dd
1106 t83 = 0.1e1_dp/t82
1107 t84 = t81*t83
1108 t85 = f2*t34
1109 t87 = f1 + t85*t68
1110 t88 = t15*t87
1111 t90 = t11*t88 + r1
1112 t91 = f12*t90
1113 t92 = t82**2
1114 t93 = 0.1e1_dp/t92
1115 t94 = c*t93
1116 t95 = t91*t94
1117 t96 = f34*pi
1118 t97 = rootpi
1119 t99 = r6*c
1120 t102 = r4*b
1121 t104 = r8*a
1122 t105 = t92*t82
1123 t108 = t97*(r15*e + t99*t90*t82 + t102*t92 + t104*t105)
1124 t109 = 0.1e1_dp/r16
1125 t110 = sqrt(t82)
1126 t111 = t110*t105
1127 t113 = t109/t111
1128 t115 = sqrt(a)
1129 t116 = f94*t34
1130 t117 = t68*t1
1131 t118 = t116*t117
1132 t119 = t3*t10
1133 t120 = t15*t77
1134 t121 = t119*t120
1135 t123 = exp(t118*t121)
1136 t124 = t115*t123
1137 t125 = f32*ndrho
1138 t126 = 0.1e1_dp/r2
1139 t127 = t125*t126
1140 t128 = 0.1e1_dp/t8
1141 t129 = 0.1e1_dp/rho
1142 t131 = t69*t77
1143 t132 = sqrt(t131)
1144 t133 = sscale*t132
1145 t136 = erfc(t127*t128*t129*t133)
1146 t140 = 0.1e1_dp/f1516
1147 t141 = (t96 + t108*t113 - t96*t124*t136)*t140
1148 t142 = 0.1e1_dp/t97
1149 t144 = 0.1e1_dp/e
1150 t145 = t142*t111*t144
1151 t147 = -t141*t145 + r1
1152 t148 = t147*e
1153 t149 = 0.1e1_dp/t105
1154 t150 = t148*t149
1155 t151 = f158*e
1156 t152 = t147*t83
1157 t153 = t72*t10
1158 t154 = t71 + dd + t153
1159 t155 = t154**2
1160 t156 = t155**2
1161 t157 = t156*t154
1162 t158 = sqrt(t157)
1163 t159 = 0.1e1_dp/t158
1164 t162 = sqrt(t154)
1165 t163 = 0.1e1_dp/t162
1166 t166 = f68*c
1167 t167 = t90*t83
1168 t168 = t155*t154
1169 t169 = sqrt(t168)
1170 t170 = 0.1e1_dp/t169
1171 t174 = (-t151*t152*t159 - t81*t83*t163 - t166*t167*t170) &
1172 *omega
1173 t176 = f52*e
1174 t177 = t147*t93
1175 t180 = f12*c
1176 t181 = t90*t93
1177 t185 = t72*omega
1178 t186 = (-t176*t177*t159 - t180*t181*t170)*t185
1179 t189 = 0.1e1_dp/r3/t5
1180 t190 = t189*t129
1181 t192 = t72**2
1182 t193 = t192*omega
1183 t194 = t159*t193
1184 t195 = t194*t44
1185 t197 = f12*a
1186 t198 = exei(q)
1187 t199 = t71 + dd + t74
1188 t200 = 0.1e1_dp/t199
1189 t202 = log(t75*t200)
1190 t205 = sqrt(t199)
1191 t209 = t115*f34
1192 t210 = exer(q)
1193 t213 = (t197*t97/t205 - t209*t210)*alpha1
1194 t214 = omega*t128
1195 t219 = (t197*t200 - f98*t198)*alpha2
1196 t221 = a*f14
1197 t222 = t199**2
1198 t223 = t222*t199
1199 t224 = sqrt(t223)
1200 t227 = sqrt(t75)
1201 t228 = 0.1e1_dp/t227
1202 t233 = 0.1e1_dp/t115
1203 t237 = (t97*(t221/t224 - f98*t228) + f2716*t210*t233)*alpha3 &
1204 *t185
1205 t239 = 0.1e1_dp/t75
1206 t241 = 0.1e1_dp/t222
1207 t243 = f8132*t77
1208 t246 = (-f98*t239 + t197*t241 + t243*t198)*alpha4
1209 t247 = t192*t27
1210 t250 = t75**2
1211 t251 = t250*t75
1212 t252 = sqrt(t251)
1213 t253 = 0.1e1_dp/t252
1214 t255 = f38*a
1215 t256 = t222**2
1216 t257 = t256*t199
1217 t258 = sqrt(t257)
1218 t263 = a**2
1219 t264 = t263*a
1220 t265 = sqrt(t264)
1221 t267 = f24364/t265
1222 t270 = (t97*(t243*t228 - f916*t253 + t255/t258) - t267*t210) &
1223 *alpha5
1224 t271 = t193*t44
1225 t273 = 0.1e1_dp/t223
1226 t275 = 0.1e1_dp/t250
1227 t276 = f98*t275
1228 t280 = f729128/t263
1229 t284 = t192*t72
1230 t285 = (a*t273 - t276 + t243*r1*t239 - t280*t198)*alpha6 &
1231 *t284
1232 t286 = t60*t13
1233 t288 = f1516*a
1234 t289 = t256*t223
1235 t290 = sqrt(t289)
1236 t293 = t250**2
1237 t294 = t293*t75
1238 t295 = sqrt(t294)
1239 t298 = f8164*t77
1240 t303 = t263**2
1241 t305 = sqrt(t303*a)
1242 t307 = f2187256/t305
1243 t310 = (t97*(t288/t290 - f2732/t295 + t298*t253 - t280*t228) &
1244 + t307*t210)*alpha7
1245 t311 = t192*t185
1246 t312 = t56*t58
1247 t313 = t312*t12
1248 t315 = 0.1e1_dp/t8/t313
1249 t316 = t311*t315
1250 t318 = r3*a
1251 t319 = 0.1e1_dp/t256
1252 t321 = 0.1e1_dp/t251
1253 t326 = f6561512/t264
1254 t329 = (t318*t319 - f94*t321 + t243*t275 - t280*t239 + t326 &
1255 *t198)*alpha8
1256 t330 = t192**2
1257 t332 = 0.1e1_dp/t9/t313
1258 t333 = t330*t332
1259 t335 = t84 + t95 + t150 + t174*t128 + t186*t190 - t150*t195 + &
1260 t197*(t198 + t202) + t213*t214 + t219*t153 + t237*t190 + &
1261 t246*t247 + t270*t271 + t285*t286 + t310*t316 + t329*t333
1262 t336 = t335*clda
1263 e_0 = e_0 + (-t80*t336)*sx
1264 IF (order >= 1) THEN
1265 t338 = t44*t13
1266 t339 = t4*t338
1267 t340 = t14*t34
1268 t342 = t68*r3*t5
1269 t343 = t340*t342
1270 t345 = 0.2e1_dp/0.3e1_dp*t339*t343
1271 t346 = t12*rho
1272 t347 = 0.1e1_dp/t346
1273 t348 = t347*t14
1274 t349 = t348*t69
1275 t351 = 2._dp*t11*t349
1276 t352 = t3*t44
1277 t353 = t16*t352
1278 t354 = t15*t6
1279 t357 = t10*t347
1280 t358 = t357*t14
1281 t361 = t24*t315
1282 t362 = t22*t361
1283 t363 = t29*t31
1284 t364 = t363*t6
1285 t368 = t27*t46*t31
1286 t371 = -0.2e1_dp/0.3e1_dp*t353*t354 - (2._dp*t17*t358) - 0.4e1_dp &
1287 /0.3e1_dp*t362*t364 - (4._dp*t25*t368)
1288 t372 = t371*t68
1289 t373 = t15*t372
1290 t374 = t11*t373
1291 t375 = t4*t18
1292 t376 = t67**2
1293 t377 = 0.1e1_dp/t376
1294 t378 = t35*t361
1295 t383 = t41*t332
1296 t384 = t39*t383
1297 t385 = t46*t48
1298 t386 = t385*t6
1299 t390 = 0.1e1_dp/t28/t12
1300 t392 = t44*t390*t48
1301 t398 = t60/t61/rho*t63
1302 t401 = -0.4e1_dp/0.3e1_dp*t378*t364 - (4._dp*t36*t368) - 0.5e1_dp &
1303 /0.3e1_dp*t384*t386 - (5._dp*t42*t392) - (8._dp*t55*t398)
1304 t402 = t377*t401
1305 t403 = t340*t402
1306 t404 = t375*t403
1307 t406 = t44*r3*t5
1308 t409 = -t345 - t351 + t374 - t404 - 0.2e1_dp/0.3e1_dp*t73*t406
1309 dqrho = f94*t409*t77
1310 t411 = ndrho*t3
1311 t412 = t411*t10
1312 t415 = a1*ndrho
1313 t416 = t415*t3
1314 t419 = t1*ndrho
1315 t420 = a2*t419
1316 t421 = t420*t24
1317 t424 = 2._dp*t416*t19 + 4._dp*t421*t32
1318 t425 = t424*t68
1319 t426 = t15*t425
1320 t428 = a3*t419
1321 t429 = t428*t24
1322 t432 = a4*t21
1323 t433 = t432*t41
1324 t437 = a5*t38*t54
1325 t440 = 4._dp*t429*t32 + 5._dp*t433*t49 + 6._dp*t437*t65
1326 t441 = t377*t440
1327 t442 = t340*t441
1328 t444 = 2._dp*t412*t70 + t11*t426 - t375*t442
1329 dqndrho = f94*t444*t77
1330 t446 = t78*f89
1331 t449 = t60*t347
1332 t452 = c*t149
1333 t453 = -t345 - t351 + t374 - t404
1334 t454 = t452*t453
1335 t457 = t329*t330
1336 t461 = t56*r3*t58*t5*t346
1337 t463 = 0.1e1_dp/t9/t461
1338 t465 = t463*r3*t5
1339 t468 = t14*t87
1340 t469 = t468*t6
1341 t472 = t348*t87
1342 t475 = f2*t371
1343 t478 = t475*t68 - t85*t402
1344 t479 = t15*t478
1345 t481 = -0.2e1_dp/0.3e1_dp*t339*t469 - (2._dp*t11*t472) + (t11 &
1346 *t479)
1347 t486 = t82*t453
1348 t493 = t97*(t99*t481*t82 + t99*t90*t453 + 2._dp*t102*t486 &
1349 + 3._dp*t104*t92*t453)
1350 t495 = t92**2
1351 t498 = t109/t110/t495
1352 t499 = t498*t453
1353 t502 = t96*t115
1354 t503 = f94*t371
1355 t504 = t503*t117
1356 t507 = t377*t1*t3
1357 t508 = t116*t507
1358 t509 = t14*t77
1359 t510 = t509*t401
1360 t511 = t18*t510
1361 t513 = t117*t3
1362 t514 = t116*t513
1363 t515 = t338*t14
1364 t517 = t77*r3*t5
1365 t518 = t515*t517
1366 t522 = t119*t348*t77
1367 t525 = t504*t121 - t508*t511 - 0.2e1_dp/0.3e1_dp*t514*t518 - (2._dp &
1368 *t118*t522)
1369 t529 = rootpi
1370 t530 = 0.1e1_dp/t529
1371 t531 = t123*t530
1372 t532 = f32**2
1373 t533 = t532*t1
1374 t534 = t533*t119
1375 t535 = t15*t131
1376 t537 = exp(-t534*t535)
1377 t538 = t126*t27
1378 t539 = t125*t538
1379 t540 = t129*sscale
1380 t542 = t132*r3*t5
1381 t550 = t125*t126*t128
1382 t551 = 0.1e1_dp/t132
1383 t552 = t372*t77
1384 t553 = t34*t377
1385 t554 = t77*t401
1386 t556 = t552 - t553*t554
1387 t557 = t551*t556
1388 t558 = t540*t557
1389 t562 = t537*(-t539*t540*t542/0.3e1_dp - t127*t128*t13*t133 &
1390 + t550*t558/0.2e1_dp)
1391 t563 = t531*t562
1392 t567 = (t493*t113 - 0.7e1_dp/0.2e1_dp*t108*t499 - (t502*t525 &
1393 *t123*t136) + (2._dp*t502*t563))*t140
1394 t569 = t141*t142
1395 t571 = t110*t92*t144
1396 t572 = t571*t453
1397 t575 = -t567*t145 - 0.7e1_dp/0.2e1_dp*t569*t572
1398 t576 = t575*e
1399 t577 = t576*t149
1400 t578 = t189*t13
1401 t581 = 0.1e1_dp/t158/t157
1402 t582 = t149*t581
1403 t583 = t148*t582
1404 t587 = -t345 - t351 + t374 - t404 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
1405 t588 = t156*t587
1406 t589 = t271*t588
1407 t592 = t219*t72
1408 t596 = 0.1e1_dp/t224/t223
1409 t597 = t596*t222
1410 t602 = 0.1e1_dp/t227/t75
1411 t603 = f98*t602
1412 t608 = dexerrho(q, dqrho)
1413 t613 = (t97*(-0.3e1_dp/0.2e1_dp*t221*t597*t409 + t603*t409/ &
1414 0.2e1_dp) + f2716*t608*t233)*alpha3*t185
1415 t617 = f12*t481
1416 t620 = 0.1e1_dp/t495
1417 t621 = t620*t453
1418 t624 = t213*omega
1419 t626 = t27*r3*t5
1420 t629 = t246*t192
1421 t631 = t315*r3*t5
1422 t634 = t602*t409
1423 t638 = 0.1e1_dp/t252/t251
1424 t639 = f916*t638
1425 t644 = 0.1e1_dp/t258/t257
1426 t645 = t644*t256
1427 t653 = (t97*(-t243*t634/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t639*t250* &
1428 t409 - 0.5e1_dp/0.2e1_dp*t255*t645*t409) - t267*t608)*alpha5
1429 t655 = -(2._dp*t285*t449) - (2._dp*t91*t454) - 0.8e1_dp/0.3e1_dp &
1430 *t457*t465 + t577 - t186*t578 + 0.5e1_dp/0.2e1_dp*t583*t589 &
1431 - 0.2e1_dp/0.3e1_dp*t592*t406 + t613*t190 - t81*t93*t453 + &
1432 t617*t94 - t237*t578 - (3._dp*t148*t621) - t624*t626/0.3e1_dp &
1433 - 0.4e1_dp/0.3e1_dp*t629*t631 + t653*t271
1434 t656 = t149*t159
1435 t657 = t148*t656
1436 t658 = t193*t332
1437 t659 = t658*t6
1438 t663 = t273*t409
1439 t666 = dexeirho(q, dqrho)
1440 t669 = (t276*t409 - 2._dp*t197*t663 + t243*t666)*alpha4
1441 t673 = t97/t205/t199
1442 t679 = (-t197*t673*t409/0.2e1_dp - t209*t608)*alpha1
1443 t681 = t241*t409
1444 t685 = (-t197*t681 - f98*t666)*alpha2
1445 t689 = 0.1e1_dp/t290/t289
1446 t690 = t256*t222
1447 t691 = t689*t690
1448 t697 = f2732/t295/t294
1449 t698 = t293*t409
1450 t701 = t638*t250
1451 t711 = (t97*(-0.7e1_dp/0.2e1_dp*t288*t691*t409 + 0.5e1_dp/0.2e1_dp &
1452 *t697*t698 - 0.3e1_dp/0.2e1_dp*t298*t701*t409 + t280*t634/ &
1453 0.2e1_dp) + t307*t608)*alpha7
1454 t713 = 0.1e1_dp/t257
1455 t717 = 0.1e1_dp/t293
1456 t718 = f94*t717
1457 t721 = t321*t409
1458 t728 = (-4._dp*t318*t713*t409 + 3._dp*t718*t409 - 2._dp*t243*t721 &
1459 + t280*t275*t409 + t326*t666)*alpha8
1460 t735 = t176*t147
1461 t736 = t656*t453
1462 t739 = t93*t581
1463 t740 = t739*t588
1464 t746 = t180*t90
1465 t747 = t149*t170
1466 t748 = t747*t453
1467 t752 = 0.1e1_dp/t169/t168
1468 t753 = t93*t752
1469 t754 = t155*t587
1470 t755 = t753*t754
1471 t759 = (-t176*t575*t93*t159 + (2._dp*t735*t736) + 0.5e1_dp/ &
1472 0.2e1_dp*(t735)*(t740) - t180*t481*t93*t170 + (2._dp &
1473 *t746*t748) + 0.3e1_dp/0.2e1_dp*(t746)*(t755))*t185
1474 t761 = t310*t311
1475 t763 = 0.1e1_dp/t8/t461
1476 t765 = t763*r3*t5
1477 t769 = t75*t241
1478 t771 = t409*t200 - t769*t409
1479 t772 = t771*t239
1480 t779 = t151*t147
1481 t780 = t93*t159
1482 t781 = t780*t453
1483 t783 = t83*t581
1484 t784 = t783*t588
1485 t787 = t93*t163
1486 t791 = 0.1e1_dp/t162/t154
1487 t792 = t83*t791
1488 t799 = t166*t90
1489 t800 = t93*t170
1490 t801 = t800*t453
1491 t803 = t83*t752
1492 t804 = t803*t754
1493 t808 = (-t151*t575*t83*t159 + t779*t781 + 0.5e1_dp/0.2e1_dp*t779 &
1494 *t784 + t81*t787*t453 + t81*t792*t587/0.2e1_dp - t166 &
1495 *t481*t83*t170 + t799*t801 + 0.3e1_dp/0.2e1_dp*t799*t804)* &
1496 omega
1497 t810 = t148*t620
1498 t812 = t194*t44*t453
1499 t815 = t270*t193
1500 t816 = t332*r3
1501 t817 = t816*t5
1502 t820 = a*t319
1503 t823 = f98*t321
1504 t826 = r1*t275
1505 t832 = (-3._dp*t820*t409 + 2._dp*t823*t409 - t243*t826*t409 - t280 &
1506 *t666)*alpha6*t284
1507 t834 = 0.5e1_dp/0.3e1_dp*t657*t659 + t669*t247 + t679*t214 + t685 &
1508 *t153 - t577*t195 + t711*t316 + t728*t333 - t174*t626 &
1509 /0.3e1_dp + t759*t190 - 0.7e1_dp/0.3e1_dp*t761*t765 + t197*(t666 &
1510 + t772*t199) + t808*t128 + (3._dp*t810*t812) - 0.5e1_dp/0.3e1_dp &
1511 *t815*t817 + t832*t286
1512 t836 = (t655 + t834)*clda
1513 e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t446*t336 - t80*t836)*sx
1514 t842 = f2*t424
1515 t845 = t842*t68 - t85*t441
1516 t846 = t15*t845
1517 t848 = 2._dp*t412*t88 + t11*t846
1518 t849 = f12*t848
1519 t851 = t452*t444
1520 t865 = t97*(t99*t848*t82 + t99*t90*t444 + 2._dp*t102*t82 &
1521 *t444 + 3._dp*t104*t92*t444)
1522 t867 = t498*t444
1523 t870 = f94*t424
1524 t871 = t870*t117
1525 t873 = t509*t440
1526 t874 = t18*t873
1527 t876 = t68*ndrho
1528 t877 = t116*t876
1529 t880 = t871*t121 - t508*t874 + 2._dp*t877*t121
1530 t884 = f32*t126
1531 t885 = t884*t128
1532 t888 = t425*t77
1533 t889 = t77*t440
1534 t891 = t888 - t553*t889
1535 t892 = t551*t891
1536 t893 = t540*t892
1537 t897 = t537*(t885*t540*t132 + t550*t893/0.2e1_dp)
1538 t898 = t531*t897
1539 t902 = (t865*t113 - 0.7e1_dp/0.2e1_dp*t108*t867 - (t502*t880 &
1540 *t123*t136) + (2._dp*t502*t898))*t140
1541 t904 = t571*t444
1542 t907 = -t902*t145 - 0.7e1_dp/0.2e1_dp*t569*t904
1543 t908 = t907*e
1544 t909 = t908*t149
1545 t910 = t620*t444
1546 t916 = t780*t444
1547 t918 = t156*t444
1548 t919 = t783*t918
1549 t930 = t800*t444
1550 t932 = t155*t444
1551 t933 = t803*t932
1552 t937 = (-t151*t907*t83*t159 + t779*t916 + 0.5e1_dp/0.2e1_dp*t779 &
1553 *t919 + t81*t787*t444 + t81*t792*t444/0.2e1_dp - t166 &
1554 *t848*t83*t170 + t799*t930 + 0.3e1_dp/0.2e1_dp*t799*t933)* &
1555 omega
1556 t942 = t656*t444
1557 t945 = t739*t918
1558 t951 = t747*t444
1559 t954 = t753*t932
1560 t958 = (-t176*t907*t93*t159 + (2._dp*t735*t942) + 0.5e1_dp/ &
1561 0.2e1_dp*(t735)*(t945) - t180*t848*t93*t170 + (2._dp &
1562 *t746*t951) + 0.3e1_dp/0.2e1_dp*(t746)*(t954))*t185
1563 t962 = t194*t44*t444
1564 t965 = t271*t918
1565 t968 = dexeindrho(q, dqndrho)
1566 t971 = t444*t200 - t769*t444
1567 t972 = t971*t239
1568 t979 = dexerndrho(q, dqndrho)
1569 t982 = (-t197*t673*t444/0.2e1_dp - t209*t979)*alpha1
1570 t988 = (-t197*t241*t444 - f98*t968)*alpha2
1571 t1001 = (t97*(-0.3e1_dp/0.2e1_dp*t221*t597*t444 + t603*t444/ &
1572 0.2e1_dp) + f2716*t979*t233)*alpha3*t185
1573 t1009 = (t276*t444 - 2._dp*t197*t273*t444 + t243*t968)*alpha4
1574 t1011 = t602*t444
1575 t1024 = (t97*(-t243*t1011/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t639*t250 &
1576 *t444 - 0.5e1_dp/0.2e1_dp*t255*t645*t444) - t267*t979)*alpha5
1577 t1035 = (-3._dp*t820*t444 + 2._dp*t823*t444 - t243*t826*t444 - &
1578 t280*t968)*alpha6*t284
1579 t1052 = (t97*(-0.7e1_dp/0.2e1_dp*t288*t691*t444 + 0.5e1_dp/0.2e1_dp &
1580 *t697*t293*t444 - 0.3e1_dp/0.2e1_dp*t298*t701*t444 + t280 &
1581 *t1011/0.2e1_dp) + t307*t979)*alpha7
1582 t1066 = (-4._dp*t318*t713*t444 + 3._dp*t718*t444 - 2._dp*t243*t321 &
1583 *t444 + t280*t275*t444 + t326*t968)*alpha8
1584 t1068 = -t81*t93*t444 + t849*t94 - (2._dp*t91*t851) + t909 &
1585 - (3._dp*t148*t910) + t937*t128 + t958*t190 - t909*t195 &
1586 + (3._dp*t810*t962) + 0.5e1_dp/0.2e1_dp*t583*t965 + t197*(t968 &
1587 + t972*t199) + t982*t214 + t988*t153 + t1001*t190 + t1009 &
1588 *t247 + t1024*t271 + t1035*t286 + t1052*t316 + t1066* &
1589 t333
1590 t1069 = t1068*clda
1591 e_ndrho = e_ndrho + (-t80*t1069)*sx
1592 END IF
1593
1594 END SUBROUTINE xwpbe_lda_calc_1
1595
1596! **************************************************************************************************
1597!> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
1598!> \param e_0 ...
1599!> \param e_rho ...
1600!> \param e_ndrho ...
1601!> \param rho , ndrho: density and norm of the density gradient
1602!> \param ndrho ...
1603!> \param omega scaling factor
1604!> \param sscale scaling factor to enforce Lieb-Oxford bound
1605!> \param sx scaling factor
1606!> \param order maximum degree of the derivative that should be evaluated
1607!> \par History
1608!> 05.2007 created [Manuel Guidon]
1609!> \author Manuel Guidon
1610!> \note
1611!> This routine evaluates the functional for omega!=0 using a taylor
1612!> expansion for the parameter G.
1613! **************************************************************************************************
1614 SUBROUTINE xwpbe_lda_calc_2(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
1615 REAL(kind=dp), INTENT(INOUT) :: e_0, e_rho, e_ndrho
1616 REAL(kind=dp), INTENT(IN) :: rho, ndrho, omega, sscale, sx
1617 INTEGER, INTENT(IN) :: order
1618
1619 REAL(kind=dp) :: dqndrho, dqrho, q, t1, t10, t100, t102, t103, t105, t106, t108, t109, t11, &
1620 t110, t111, t112, t113, t114, t115, t116, t117, t118, t12, t121, t122, t125, t126, t127, &
1621 t128, t129, t13, t133, t134, t136, t137, t14, t140, t141, t145, t146, t149, t15, t151, &
1622 t153, t154, t155, t156, t158, t159, t16, t160, t161, t163, t166, t167, t17, t171, t172, &
1623 t173, t176, t177, t18, t182, t184, t185, t186, t187, t19, t190, t191, t196, t2, t200, &
1624 t202, t204, t206, t209, t21, t210, t213, t214, t215, t216, t218, t219, t22, t220, t221, &
1625 t226, t227, t228, t23, t230, t233, t234, t236, t238, t239, t24
1626 REAL(kind=dp) :: t243, t247, t248, t249, t25, t251, t252, t253, t256, t257, t258, t261, &
1627 t266, t268, t27, t270, t273, t274, t275, t276, t278, t279, t28, t281, t282, t284, t289, &
1628 t29, t292, t293, t295, t296, t298, t299, t3, t301, t302, t303, t305, t306, t308, t309, &
1629 t31, t310, t311, t312, t314, t315, t316, t317, t32, t320, t321, t324, t325, t326, t327, &
1630 t331, t334, t335, t336, t337, t338, t339, t34, t340, t341, t346, t347, t348, t349, t35, &
1631 t353, t355, t36, t361, t364, t365, t366, t367, t369, t372, t374, t375, t378, t379, t38, &
1632 t382, t383, t384, t387, t388, t389, t39, t391, t392, t395, t396, t4
1633 REAL(kind=dp) :: t400, t403, t404, t405, t407, t409, t41, t413, t416, t417, t42, t420, t423, &
1634 t428, t433, t434, t436, t44, t440, t441, t442, t443, t447, t448, t452, t453, t454, t457, &
1635 t458, t46, t461, t464, t467, t468, t470, t474, t475, t476, t48, t480, t481, t482, t483, &
1636 t487, t489, t49, t491, t496, t5, t500, t503, t505, t506, t507, t510, t512, t513, t514, &
1637 t516, t519, t522, t523, t524, t530, t531, t535, t536, t54, t541, t542, t549, t55, t551, &
1638 t552, t558, t559, t56, t561, t565, t566, t569, t574, t577, t579, t58, t583, t584, t585, &
1639 t587, t588, t591, t595, t596, t6, t60, t603, t604, t605, t607
1640 REAL(kind=dp) :: t608, t61, t612, t615, t620, t622, t626, t628, t629, t63, t633, t634, t635, &
1641 t638, t641, t644, t65, t650, t652, t656, t658, t659, t660, t665, t67, t670, t671, t679, &
1642 t68, t681, t685, t687, t689, t69, t692, t695, t697, t699, t7, t70, t702, t705, t709, t71, &
1643 t710, t714, t72, t723, t725, t727, t73, t733, t736, t737, t739, t74, t740, t742, t747, &
1644 t748, t75, t751, t752, t755, t756, t758, t759, t760, t761, t767, t769, t77, t770, t78, &
1645 t781, t783, t784, t788, t793, t796, t8, t80, t802, t805, t809, t81, t813, t816, t819, &
1646 t82, t822, t823, t83, t830, t833, t839, t84, t85, t852, t860
1647 REAL(kind=dp) :: t862, t87, t875, t88, t886, t9, t90, t903, t91, t917, t919, t92, t920, t93, &
1648 t94, t95, t96, t97, t99
1649
1650 t1 = ndrho**2
1651 t2 = r2**2
1652 t3 = 0.1e1_dp/t2
1653 t4 = t1*t3
1654 t5 = pi**2
1655 t6 = r3*t5
1656 t7 = t6*rho
1657 t8 = t7**(0.1e1_dp/0.3e1_dp)
1658 t9 = t8**2
1659 t10 = 0.1e1_dp/t9
1660 t11 = t4*t10
1661 t12 = rho**2
1662 t13 = 0.1e1_dp/t12
1663 t14 = sscale**2
1664 t15 = t13*t14
1665 t16 = a1*t1
1666 t17 = t16*t3
1667 t18 = t10*t13
1668 t19 = t18*t14
1669 t21 = t1**2
1670 t22 = a2*t21
1671 t23 = t2**2
1672 t24 = 0.1e1_dp/t23
1673 t25 = t22*t24
1674 t27 = 0.1e1_dp/t8/t7
1675 t28 = t12**2
1676 t29 = 0.1e1_dp/t28
1677 t31 = t14**2
1678 t32 = t27*t29*t31
1679 t34 = t17*t19 + t25*t32
1680 t35 = a3*t21
1681 t36 = t35*t24
1682 t38 = t21*ndrho
1683 t39 = a4*t38
1684 t41 = 0.1e1_dp/t23/r2
1685 t42 = t39*t41
1686 t44 = 0.1e1_dp/t9/t7
1687 t46 = 0.1e1_dp/t28/rho
1688 t48 = t31*sscale
1689 t49 = t44*t46*t48
1690 t54 = 0.1e1_dp/t23/t2
1691 t55 = a5*t21*t1*t54
1692 t56 = r3**2
1693 t58 = t5**2
1694 t60 = 0.1e1_dp/t56/t58
1695 t61 = t28**2
1696 t63 = t31*t14
1697 t65 = t60/t61*t63
1698 t67 = r1 + t36*t32 + t42*t49 + t55*t65
1699 t68 = 0.1e1_dp/t67
1700 t69 = t34*t68
1701 t70 = t15*t69
1702 t71 = t11*t70
1703 t72 = omega**2
1704 t73 = beta*t72
1705 t74 = t73*t10
1706 t75 = t71 + t74
1707 t77 = 0.1e1_dp/a
1708 q = f94*t75*t77
1709 t78 = rho**(0.1e1_dp/0.3e1_dp)
1710 t80 = t78*rho*f89
1711 t81 = b*f12
1712 t82 = t71 + dd
1713 t83 = 0.1e1_dp/t82
1714 t84 = t81*t83
1715 t85 = f2*t34
1716 t87 = f1 + t85*t68
1717 t88 = t15*t87
1718 t90 = t11*t88 + r1
1719 t91 = f12*t90
1720 t92 = t82**2
1721 t93 = 0.1e1_dp/t92
1722 t94 = c*t93
1723 t95 = t91*t94
1724 t96 = g2*t1
1725 t97 = t96*t3
1726 t99 = g3*t21
1727 t100 = t99*t24
1728 t102 = g1 + t97*t19 + t100*t32
1729 t103 = t15*t102
1730 t105 = t11*t103 + r1
1731 t106 = t105*e
1732 t108 = 0.1e1_dp/t92/t82
1733 t109 = t106*t108
1734 t110 = f158*e
1735 t111 = t105*t83
1736 t112 = t72*t10
1737 t113 = t71 + dd + t112
1738 t114 = t113**2
1739 t115 = t114**2
1740 t116 = t115*t113
1741 t117 = sqrt(t116)
1742 t118 = 0.1e1_dp/t117
1743 t121 = sqrt(t113)
1744 t122 = 0.1e1_dp/t121
1745 t125 = f68*c
1746 t126 = t90*t83
1747 t127 = t114*t113
1748 t128 = sqrt(t127)
1749 t129 = 0.1e1_dp/t128
1750 t133 = (-t110*t111*t118 - t81*t83*t122 - t125*t126*t129) &
1751 *omega
1752 t134 = 0.1e1_dp/t8
1753 t136 = f52*e
1754 t137 = t105*t93
1755 t140 = f12*c
1756 t141 = t90*t93
1757 t145 = t72*omega
1758 t146 = (-t136*t137*t118 - t140*t141*t129)*t145
1759 t149 = 0.1e1_dp/r3/t5
1760 t151 = t149/rho
1761 t153 = t72**2
1762 t154 = t153*omega
1763 t155 = t118*t154
1764 t156 = t155*t44
1765 t158 = f12*a
1766 t159 = exei(q)
1767 t160 = t71 + dd + t74
1768 t161 = 0.1e1_dp/t160
1769 t163 = log(t75*t161)
1770 t166 = rootpi
1771 t167 = sqrt(t160)
1772 t171 = sqrt(a)
1773 t172 = t171*f34
1774 t173 = exer(q)
1775 t176 = (t158*t166/t167 - t172*t173)*alpha1
1776 t177 = omega*t134
1777 t182 = (t158*t161 - f98*t159)*alpha2
1778 t184 = a*f14
1779 t185 = t160**2
1780 t186 = t185*t160
1781 t187 = sqrt(t186)
1782 t190 = sqrt(t75)
1783 t191 = 0.1e1_dp/t190
1784 t196 = 0.1e1_dp/t171
1785 t200 = (t166*(t184/t187 - f98*t191) + f2716*t173*t196)* &
1786 alpha3*t145
1787 t202 = 0.1e1_dp/t75
1788 t204 = 0.1e1_dp/t185
1789 t206 = f8132*t77
1790 t209 = (-f98*t202 + t158*t204 + t206*t159)*alpha4
1791 t210 = t153*t27
1792 t213 = t75**2
1793 t214 = t213*t75
1794 t215 = sqrt(t214)
1795 t216 = 0.1e1_dp/t215
1796 t218 = f38*a
1797 t219 = t185**2
1798 t220 = t219*t160
1799 t221 = sqrt(t220)
1800 t226 = a**2
1801 t227 = t226*a
1802 t228 = sqrt(t227)
1803 t230 = f24364/t228
1804 t233 = (t166*(t206*t191 - f916*t216 + t218/t221) - t230*t173) &
1805 *alpha5
1806 t234 = t154*t44
1807 t236 = 0.1e1_dp/t186
1808 t238 = 0.1e1_dp/t213
1809 t239 = f98*t238
1810 t243 = f729128/t226
1811 t247 = t153*t72
1812 t248 = (a*t236 - t239 + t206*r1*t202 - t243*t159)*alpha6 &
1813 *t247
1814 t249 = t60*t13
1815 t251 = f1516*a
1816 t252 = t219*t186
1817 t253 = sqrt(t252)
1818 t256 = t213**2
1819 t257 = t256*t75
1820 t258 = sqrt(t257)
1821 t261 = f8164*t77
1822 t266 = t226**2
1823 t268 = sqrt(t266*a)
1824 t270 = f2187256/t268
1825 t273 = (t166*(t251/t253 - f2732/t258 + t261*t216 - t243*t191) &
1826 + t270*t173)*alpha7
1827 t274 = t153*t145
1828 t275 = t56*t58
1829 t276 = t275*t12
1830 t278 = 0.1e1_dp/t8/t276
1831 t279 = t274*t278
1832 t281 = r3*a
1833 t282 = 0.1e1_dp/t219
1834 t284 = 0.1e1_dp/t214
1835 t289 = f6561512/t227
1836 t292 = (t281*t282 - f94*t284 + t206*t238 - t243*t202 + t289 &
1837 *t159)*alpha8
1838 t293 = t153**2
1839 t295 = 0.1e1_dp/t9/t276
1840 t296 = t293*t295
1841 t298 = t84 + t95 + t109 + t133*t134 + t146*t151 - t109*t156 + &
1842 t158*(t159 + t163) + t176*t177 + t182*t112 + t200*t151 + &
1843 t209*t210 + t233*t234 + t248*t249 + t273*t279 + t292*t296
1844 t299 = t298*clda
1845 e_0 = e_0 + (-t80*t299)*sx
1846 IF (order >= 1) THEN
1847 t301 = t44*t13
1848 t302 = t4*t301
1849 t303 = t14*t34
1850 t305 = t68*r3*t5
1851 t306 = t303*t305
1852 t308 = 0.2e1_dp/0.3e1_dp*t302*t306
1853 t309 = t12*rho
1854 t310 = 0.1e1_dp/t309
1855 t311 = t310*t14
1856 t312 = t311*t69
1857 t314 = 2._dp*t11*t312
1858 t315 = t3*t44
1859 t316 = t16*t315
1860 t317 = t15*t6
1861 t320 = t10*t310
1862 t321 = t320*t14
1863 t324 = t24*t278
1864 t325 = t22*t324
1865 t326 = t29*t31
1866 t327 = t326*t6
1867 t331 = t27*t46*t31
1868 t334 = -0.2e1_dp/0.3e1_dp*t316*t317 - (2._dp*t17*t321) - 0.4e1_dp &
1869 /0.3e1_dp*t325*t327 - (4._dp*t25*t331)
1870 t335 = t334*t68
1871 t336 = t15*t335
1872 t337 = t11*t336
1873 t338 = t4*t18
1874 t339 = t67**2
1875 t340 = 0.1e1_dp/t339
1876 t341 = t35*t324
1877 t346 = t41*t295
1878 t347 = t39*t346
1879 t348 = t46*t48
1880 t349 = t348*t6
1881 t353 = 0.1e1_dp/t28/t12
1882 t355 = t44*t353*t48
1883 t361 = t60/t61/rho*t63
1884 t364 = -0.4e1_dp/0.3e1_dp*t341*t327 - (4._dp*t36*t331) - 0.5e1_dp &
1885 /0.3e1_dp*t347*t349 - (5._dp*t42*t355) - (8._dp*t55*t361)
1886 t365 = t340*t364
1887 t366 = t303*t365
1888 t367 = t338*t366
1889 t369 = t44*r3*t5
1890 t372 = -t308 - t314 + t337 - t367 - 0.2e1_dp/0.3e1_dp*t73*t369
1891 dqrho = f94*t372*t77
1892 t374 = ndrho*t3
1893 t375 = t374*t10
1894 t378 = a1*ndrho
1895 t379 = t378*t3
1896 t382 = t1*ndrho
1897 t383 = a2*t382
1898 t384 = t383*t24
1899 t387 = 2._dp*t379*t19 + 4._dp*t384*t32
1900 t388 = t387*t68
1901 t389 = t15*t388
1902 t391 = a3*t382
1903 t392 = t391*t24
1904 t395 = a4*t21
1905 t396 = t395*t41
1906 t400 = a5*t38*t54
1907 t403 = 4._dp*t392*t32 + 5._dp*t396*t49 + 6._dp*t400*t65
1908 t404 = t340*t403
1909 t405 = t303*t404
1910 t407 = 2._dp*t375*t70 + t11*t389 - t338*t405
1911 dqndrho = f94*t407*t77
1912 t409 = t78*f89
1913 t413 = t27*r3*t5
1914 t416 = t14*t102
1915 t417 = t416*t6
1916 t420 = t311*t102
1917 t423 = t96*t315
1918 t428 = t99*t324
1919 t433 = -0.2e1_dp/0.3e1_dp*t423*t317 - (2._dp*t97*t321) - 0.4e1_dp &
1920 /0.3e1_dp*t428*t327 - (4._dp*t100*t331)
1921 t434 = t15*t433
1922 t436 = -0.2e1_dp/0.3e1_dp*t302*t417 - (2._dp*t11*t420) + (t11 &
1923 *t434)
1924 t440 = t136*t105
1925 t441 = t108*t118
1926 t442 = -t308 - t314 + t337 - t367
1927 t443 = t441*t442
1928 t447 = 0.1e1_dp/t117/t116
1929 t448 = t93*t447
1930 t452 = -t308 - t314 + t337 - t367 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
1931 t453 = t115*t452
1932 t454 = t448*t453
1933 t457 = t14*t87
1934 t458 = t457*t6
1935 t461 = t311*t87
1936 t464 = f2*t334
1937 t467 = t464*t68 - t85*t365
1938 t468 = t15*t467
1939 t470 = -0.2e1_dp/0.3e1_dp*t302*t458 - (2._dp*t11*t461) + (t11 &
1940 *t468)
1941 t474 = t140*t90
1942 t475 = t108*t129
1943 t476 = t475*t442
1944 t480 = 0.1e1_dp/t128/t127
1945 t481 = t93*t480
1946 t482 = t114*t452
1947 t483 = t481*t482
1948 t487 = (-t136*t436*t93*t118 + (2._dp*t440*t443) + 0.5e1_dp/ &
1949 0.2e1_dp*(t440)*(t454) - t140*t470*t93*t129 + (2._dp &
1950 *t474*t476) + 0.3e1_dp/0.2e1_dp*(t474)*(t483))*t145
1951 t489 = t209*t153
1952 t491 = t278*r3*t5
1953 t496 = t166/t167/t160
1954 t500 = dexerrho(q, dqrho)
1955 t503 = (-t158*t496*t372/0.2e1_dp - t172*t500)*alpha1
1956 t505 = t106*t441
1957 t506 = t154*t295
1958 t507 = t506*t6
1959 t510 = f12*t470
1960 t512 = t92**2
1961 t513 = 0.1e1_dp/t512
1962 t514 = t106*t513
1963 t516 = t155*t44*t442
1964 t519 = t149*t13
1965 t522 = 0.1e1_dp/t253/t252
1966 t523 = t219*t185
1967 t524 = t522*t523
1968 t530 = f2732/t258/t257
1969 t531 = t256*t372
1970 t535 = 0.1e1_dp/t215/t214
1971 t536 = t535*t213
1972 t541 = 0.1e1_dp/t190/t75
1973 t542 = t541*t372
1974 t549 = (t166*(-0.7e1_dp/0.2e1_dp*t251*t524*t372 + 0.5e1_dp/0.2e1_dp &
1975 *t530*t531 - 0.3e1_dp/0.2e1_dp*t261*t536*t372 + t243*t542 &
1976 /0.2e1_dp) + t270*t500)*alpha7
1977 t551 = c*t108
1978 t552 = t551*t442
1979 t558 = t436*e
1980 t559 = t558*t108
1981 t561 = 0.1e1_dp/t220
1982 t565 = 0.1e1_dp/t256
1983 t566 = f94*t565
1984 t569 = t284*t372
1985 t574 = dexeirho(q, dqrho)
1986 t577 = (-4._dp*t281*t561*t372 + 3._dp*t566*t372 - 2._dp*t206*t569 &
1987 + t243*t238*t372 + t289*t574)*alpha8
1988 t579 = -t133*t413/0.3e1_dp + t487*t151 - 0.4e1_dp/0.3e1_dp*t489* &
1989 t491 + t503*t177 + 0.5e1_dp/0.3e1_dp*t505*t507 + t510*t94 + (3._dp &
1990 *t514*t516) - t146*t519 + t549*t279 - (2._dp*t91*t552) &
1991 - t81*t93*t442 - t200*t519 - t559*t156 + t577*t296 &
1992 + t559
1993 t583 = t110*t105
1994 t584 = t93*t118
1995 t585 = t584*t442
1996 t587 = t83*t447
1997 t588 = t587*t453
1998 t591 = t93*t122
1999 t595 = 0.1e1_dp/t121/t113
2000 t596 = t83*t595
2001 t603 = t125*t90
2002 t604 = t93*t129
2003 t605 = t604*t442
2004 t607 = t83*t480
2005 t608 = t607*t482
2006 t612 = (-t110*t436*t83*t118 + t583*t585 + 0.5e1_dp/0.2e1_dp*t583 &
2007 *t588 + t81*t591*t442 + t81*t596*t452/0.2e1_dp - t125 &
2008 *t470*t83*t129 + t603*t605 + 0.3e1_dp/0.2e1_dp*t603*t608)* &
2009 omega
2010 t615 = t236*t372
2011 t620 = (t239*t372 - 2._dp*t158*t615 + t206*t574)*alpha4
2012 t622 = t513*t442
2013 t626 = t75*t204
2014 t628 = t372*t161 - t626*t372
2015 t629 = t628*t202
2016 t633 = t233*t154
2017 t634 = t295*r3
2018 t635 = t634*t5
2019 t638 = a*t282
2020 t641 = f98*t284
2021 t644 = r1*t238
2022 t650 = (-3._dp*t638*t372 + 2._dp*t641*t372 - t206*t644*t372 - t243 &
2023 *t574)*alpha6*t247
2024 t652 = t204*t372
2025 t656 = (-t158*t652 - f98*t574)*alpha2
2026 t658 = t108*t447
2027 t659 = t106*t658
2028 t660 = t234*t453
2029 t665 = f916*t535
2030 t670 = 0.1e1_dp/t221/t220
2031 t671 = t670*t219
2032 t679 = (t166*(-t206*t542/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t665*t213 &
2033 *t372 - 0.5e1_dp/0.2e1_dp*t218*t671*t372) - t230*t500)*alpha5
2034 t681 = t292*t293
2035 t685 = t56*r3*t58*t5*t309
2036 t687 = 0.1e1_dp/t9/t685
2037 t689 = t687*r3*t5
2038 t692 = t60*t310
2039 t695 = t273*t274
2040 t697 = 0.1e1_dp/t8/t685
2041 t699 = t697*r3*t5
2042 t702 = t176*omega
2043 t705 = t182*t72
2044 t709 = 0.1e1_dp/t187/t186
2045 t710 = t709*t185
2046 t714 = f98*t541
2047 t723 = (t166*(-0.3e1_dp/0.2e1_dp*t184*t710*t372 + t714*t372/ &
2048 0.2e1_dp) + f2716*t500*t196)*alpha3*t145
2049 t725 = t612*t134 + t620*t210 - (3._dp*t106*t622) + t158*(t574 &
2050 + t629*t160) - 0.5e1_dp/0.3e1_dp*t633*t635 + t650*t249 + &
2051 t656*t112 + 0.5e1_dp/0.2e1_dp*t659*t660 + t679*t234 - 0.8e1_dp/ &
2052 0.3e1_dp*t681*t689 - (2._dp*t248*t692) - 0.7e1_dp/0.3e1_dp*t695 &
2053 *t699 - t702*t413/0.3e1_dp - 0.2e1_dp/0.3e1_dp*t705*t369 + t723 &
2054 *t151
2055 t727 = (t579 + t725)*clda
2056 e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t409*t299 - t80*t727)*sx
2057 t733 = f2*t387
2058 t736 = t733*t68 - t85*t404
2059 t737 = t15*t736
2060 t739 = 2._dp*t375*t88 + t11*t737
2061 t740 = f12*t739
2062 t742 = t551*t407
2063 t747 = g2*ndrho
2064 t748 = t747*t3
2065 t751 = g3*t382
2066 t752 = t751*t24
2067 t755 = 2._dp*t748*t19 + 4._dp*t752*t32
2068 t756 = t15*t755
2069 t758 = 2._dp*t375*t103 + t11*t756
2070 t759 = t758*e
2071 t760 = t759*t108
2072 t761 = t513*t407
2073 t767 = t584*t407
2074 t769 = t115*t407
2075 t770 = t587*t769
2076 t781 = t604*t407
2077 t783 = t114*t407
2078 t784 = t607*t783
2079 t788 = (-t110*t758*t83*t118 + t583*t767 + 0.5e1_dp/0.2e1_dp*t583 &
2080 *t770 + t81*t591*t407 + t81*t596*t407/0.2e1_dp - t125 &
2081 *t739*t83*t129 + t603*t781 + 0.3e1_dp/0.2e1_dp*t603*t784)* &
2082 omega
2083 t793 = t441*t407
2084 t796 = t448*t769
2085 t802 = t475*t407
2086 t805 = t481*t783
2087 t809 = (-t136*t758*t93*t118 + (2._dp*t440*t793) + 0.5e1_dp/ &
2088 0.2e1_dp*(t440)*(t796) - t140*t739*t93*t129 + (2._dp &
2089 *t474*t802) + 0.3e1_dp/0.2e1_dp*(t474)*(t805))*t145
2090 t813 = t155*t44*t407
2091 t816 = t234*t769
2092 t819 = dexeindrho(q, dqndrho)
2093 t822 = t407*t161 - t626*t407
2094 t823 = t822*t202
2095 t830 = dexerndrho(q, dqndrho)
2096 t833 = (-t158*t496*t407/0.2e1_dp - t172*t830)*alpha1
2097 t839 = (-t158*t204*t407 - f98*t819)*alpha2
2098 t852 = (t166*(-0.3e1_dp/0.2e1_dp*t184*t710*t407 + t714*t407/ &
2099 0.2e1_dp) + f2716*t830*t196)*alpha3*t145
2100 t860 = (t239*t407 - 2._dp*t158*t236*t407 + t206*t819)*alpha4
2101 t862 = t541*t407
2102 t875 = (t166*(-t206*t862/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t665*t213 &
2103 *t407 - 0.5e1_dp/0.2e1_dp*t218*t671*t407) - t230*t830)*alpha5
2104 t886 = (-3._dp*t638*t407 + 2._dp*t641*t407 - t206*t644*t407 - t243 &
2105 *t819)*alpha6*t247
2106 t903 = (t166*(-0.7e1_dp/0.2e1_dp*t251*t524*t407 + 0.5e1_dp/0.2e1_dp &
2107 *t530*t256*t407 - 0.3e1_dp/0.2e1_dp*t261*t536*t407 + t243 &
2108 *t862/0.2e1_dp) + t270*t830)*alpha7
2109 t917 = (-4._dp*t281*t561*t407 + 3._dp*t566*t407 - 2._dp*t206*t284 &
2110 *t407 + t243*t238*t407 + t289*t819)*alpha8
2111 t919 = -t81*t93*t407 + t740*t94 - (2._dp*t91*t742) + t760 &
2112 - (3._dp*t106*t761) + t788*t134 + t809*t151 - t760*t156 &
2113 + (3._dp*t514*t813) + 0.5e1_dp/0.2e1_dp*t659*t816 + t158*(t819 &
2114 + t823*t160) + t833*t177 + t839*t112 + t852*t151 + t860 &
2115 *t210 + t875*t234 + t886*t249 + t903*t279 + t917*t296
2116 t920 = t919*clda
2117 e_ndrho = e_ndrho + (-t80*t920)*sx
2118 END IF
2119
2120 END SUBROUTINE xwpbe_lda_calc_2
2121
2122! **************************************************************************************************
2123!> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
2124!> \param e_0 ...
2125!> \param e_rho ...
2126!> \param e_ndrho ...
2127!> \param rho , ndrho: density and norm of the density gradient
2128!> \param ndrho ...
2129!> \param omega screening parameter
2130!> \param sscale scaling factor to enforce Lieb-Oxford bound
2131!> \param sx scaling factor
2132!> \param order maximum degree of the derivative that should be evaluated
2133!> \par History
2134!> 05.2007 created [Manuel Guidon]
2135!> \author Manuel Guidon
2136!> \note
2137!> This routine evaluates the functional for omega!=0 using a simple
2138!> gaussian expansion for large ww.
2139! **************************************************************************************************
2140 SUBROUTINE xwpbe_lda_calc_3(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
2141 REAL(kind=dp), INTENT(INOUT) :: e_0, e_rho, e_ndrho
2142 REAL(kind=dp), INTENT(IN) :: rho, ndrho, omega, sscale, sx
2143 INTEGER, INTENT(IN) :: order
2144
2145 REAL(kind=dp) :: dqndrho, dqrho, q, t1, t10, t102, t104, t105, t108, t109, t11, t110, t111, &
2146 t113, t115, t116, t117, t118, t119, t12, t120, t121, t123, t124, t125, t126, t127, t128, &
2147 t129, t13, t131, t132, t133, t136, t14, t140, t141, t142, t144, t145, t147, t148, t149, &
2148 t15, t150, t151, t152, t154, t155, t156, t157, t158, t159, t16, t162, t163, t166, t167, &
2149 t168, t169, t17, t170, t174, t176, t177, t18, t180, t181, t185, t186, t189, t19, t190, &
2150 t192, t193, t194, t195, t197, t198, t199, t2, t200, t202, t206, t208, t209, t21, t210, &
2151 t212, t213, t215, t216, t217, t218, t219, t22, t221, t222, t223
2152 REAL(kind=dp) :: t224, t227, t228, t23, t231, t232, t234, t235, t236, t237, t238, t24, t242, &
2153 t245, t246, t247, t248, t249, t25, t250, t251, t252, t258, t259, t260, t261, t262, t266, &
2154 t268, t27, t274, t277, t278, t279, t28, t280, t285, t287, t288, t29, t291, t292, t295, &
2155 t296, t297, t3, t300, t301, t302, t304, t305, t308, t309, t31, t313, t316, t317, t318, &
2156 t32, t320, t322, t325, t328, t329, t332, t335, t338, t339, t34, t341, t342, t344, t345, &
2157 t35, t352, t359, t36, t361, t364, t365, t368, t369, t370, t373, t374, t375, t376, t377, &
2158 t379, t38, t380, t381, t383, t384, t388, t39, t391, t395, t396
2159 REAL(kind=dp) :: t397, t398, t399, t4, t400, t401, t403, t404, t405, t406, t408, t41, t416, &
2160 t417, t418, t419, t42, t420, t422, t423, t424, t428, t429, t433, t435, t437, t438, t44, &
2161 t441, t442, t443, t444, t445, t451, t452, t453, t456, t457, t46, t461, t462, t463, t466, &
2162 t470, t471, t478, t479, t48, t480, t483, t484, t485, t486, t49, t490, t493, t499, t5, &
2163 t500, t501, t504, t505, t511, t512, t513, t516, t517, t521, t523, t526, t528, t531, t532, &
2164 t533, t534, t537, t538, t539, t54, t542, t544, t545, t546, t548, t549, t55, t550, t554, &
2165 t555, t56, t561, t564, t565, t567, t568, t570, t58, t584, t586
2166 REAL(kind=dp) :: t589, t590, t592, t593, t595, t596, t599, t6, t60, t603, t604, t607, t608, &
2167 t61, t610, t611, t612, t616, t617, t621, t623, t626, t627, t628, t629, t63, t635, t637, &
2168 t638, t649, t65, t651, t652, t656, t661, t664, t67, t670, t673, t677, t68, t681, t684, &
2169 t687, t69, t690, t691, t695, t696, t7, t70, t71, t72, t73, t74, t75, t77, t78, t8, t80, &
2170 t81, t82, t83, t84, t85, t87, t88, t9, t90, t91, t92, t93, t94, t95, t96, t97, t99
2171
2172 t1 = ndrho**2
2173 t2 = r2**2
2174 t3 = 0.1e1_dp/t2
2175 t4 = t1*t3
2176 t5 = pi**2
2177 t6 = r3*t5
2178 t7 = t6*rho
2179 t8 = t7**(0.1e1_dp/0.3e1_dp)
2180 t9 = t8**2
2181 t10 = 0.1e1_dp/t9
2182 t11 = t4*t10
2183 t12 = rho**2
2184 t13 = 0.1e1_dp/t12
2185 t14 = sscale**2
2186 t15 = t13*t14
2187 t16 = a1*t1
2188 t17 = t16*t3
2189 t18 = t10*t13
2190 t19 = t18*t14
2191 t21 = t1**2
2192 t22 = a2*t21
2193 t23 = t2**2
2194 t24 = 0.1e1_dp/t23
2195 t25 = t22*t24
2196 t27 = 0.1e1_dp/t8/t7
2197 t28 = t12**2
2198 t29 = 0.1e1_dp/t28
2199 t31 = t14**2
2200 t32 = t27*t29*t31
2201 t34 = t17*t19 + t25*t32
2202 t35 = a3*t21
2203 t36 = t35*t24
2204 t38 = t21*ndrho
2205 t39 = a4*t38
2206 t41 = 0.1e1_dp/t23/r2
2207 t42 = t39*t41
2208 t44 = 0.1e1_dp/t9/t7
2209 t46 = 0.1e1_dp/t28/rho
2210 t48 = t31*sscale
2211 t49 = t44*t46*t48
2212 t54 = 0.1e1_dp/t23/t2
2213 t55 = a5*t21*t1*t54
2214 t56 = r3**2
2215 t58 = t5**2
2216 t60 = 0.1e1_dp/t56/t58
2217 t61 = t28**2
2218 t63 = t31*t14
2219 t65 = t60/t61*t63
2220 t67 = r1 + t36*t32 + t42*t49 + t55*t65
2221 t68 = 0.1e1_dp/t67
2222 t69 = t34*t68
2223 t70 = t15*t69
2224 t71 = t11*t70
2225 t72 = omega**2
2226 t73 = beta2*t72
2227 t74 = t73*t10
2228 t75 = t71 + t74
2229 t77 = 0.1e1_dp/a
2230 q = f94*t75*t77
2231 t78 = rho**(0.1e1_dp/0.3e1_dp)
2232 t80 = t78*rho*f89
2233 t81 = b*f12
2234 t82 = t71 + dd
2235 t83 = 0.1e1_dp/t82
2236 t84 = t81*t83
2237 t85 = f2*t34
2238 t87 = f1 + t85*t68
2239 t88 = t15*t87
2240 t90 = t11*t88 + r1
2241 t91 = f12*t90
2242 t92 = t82**2
2243 t93 = 0.1e1_dp/t92
2244 t94 = c*t93
2245 t95 = t91*t94
2246 t96 = f34*pi
2247 t97 = rootpi
2248 t99 = r6*c
2249 t102 = r4*b
2250 t104 = r8*a
2251 t105 = t92*t82
2252 t108 = t97*(r15*e + t99*t90*t82 + t102*t92 + t104*t105)
2253 t109 = 0.1e1_dp/r16
2254 t110 = sqrt(t82)
2255 t111 = t110*t105
2256 t113 = t109/t111
2257 t115 = sqrt(a)
2258 t116 = f94*t34
2259 t117 = t68*t1
2260 t118 = t116*t117
2261 t119 = t3*t10
2262 t120 = t15*t77
2263 t121 = t119*t120
2264 t123 = exp(t118*t121)
2265 t124 = t115*t123
2266 t125 = f32*ndrho
2267 t126 = 0.1e1_dp/r2
2268 t127 = t125*t126
2269 t128 = 0.1e1_dp/t8
2270 t129 = 0.1e1_dp/rho
2271 t131 = t69*t77
2272 t132 = sqrt(t131)
2273 t133 = sscale*t132
2274 t136 = erfc(t127*t128*t129*t133)
2275 t140 = 0.1e1_dp/f1516
2276 t141 = (t96 + t108*t113 - t96*t124*t136)*t140
2277 t142 = 0.1e1_dp/t97
2278 t144 = 0.1e1_dp/e
2279 t145 = t142*t111*t144
2280 t147 = -t141*t145 + r1
2281 t148 = t147*e
2282 t149 = 0.1e1_dp/t105
2283 t150 = t148*t149
2284 t151 = f158*e
2285 t152 = t147*t83
2286 t154 = t71 + dd + t72*t10
2287 t155 = t154**2
2288 t156 = t155**2
2289 t157 = t156*t154
2290 t158 = sqrt(t157)
2291 t159 = 0.1e1_dp/t158
2292 t162 = sqrt(t154)
2293 t163 = 0.1e1_dp/t162
2294 t166 = f68*c
2295 t167 = t90*t83
2296 t168 = t155*t154
2297 t169 = sqrt(t168)
2298 t170 = 0.1e1_dp/t169
2299 t174 = (-t151*t152*t159 - t81*t83*t163 - t166*t167*t170) &
2300 *omega
2301 t176 = f52*e
2302 t177 = t147*t93
2303 t180 = f12*c
2304 t181 = t90*t93
2305 t185 = t72*omega
2306 t186 = (-t176*t177*t159 - t180*t181*t170)*t185
2307 t189 = 0.1e1_dp/r3/t5
2308 t190 = t189*t129
2309 t192 = t72**2
2310 t193 = t192*omega
2311 t194 = t159*t193
2312 t195 = t194*t44
2313 t197 = f12*a
2314 t198 = exei(q)
2315 t199 = t71 + dd + t74
2316 t200 = 0.1e1_dp/t199
2317 t202 = log(t75*t200)
2318 t206 = (t84 + t95 + t150 + t174*t128 + t186*t190 - t150*t195 &
2319 + t197*(t198 + t202))*clda
2320 e_0 = e_0 + (-t80*t206)*sx
2321 IF (order >= 1) THEN
2322 t208 = t44*t13
2323 t209 = t4*t208
2324 t210 = t14*t34
2325 t212 = t68*r3*t5
2326 t213 = t210*t212
2327 t215 = 0.2e1_dp/0.3e1_dp*t209*t213
2328 t216 = t12*rho
2329 t217 = 0.1e1_dp/t216
2330 t218 = t217*t14
2331 t219 = t218*t69
2332 t221 = 2._dp*t11*t219
2333 t222 = t3*t44
2334 t223 = t16*t222
2335 t224 = t15*t6
2336 t227 = t10*t217
2337 t228 = t227*t14
2338 t231 = t56*t58
2339 t232 = t231*t12
2340 t234 = 0.1e1_dp/t8/t232
2341 t235 = t24*t234
2342 t236 = t22*t235
2343 t237 = t29*t31
2344 t238 = t237*t6
2345 t242 = t27*t46*t31
2346 t245 = -0.2e1_dp/0.3e1_dp*t223*t224 - (2._dp*t17*t228) - 0.4e1_dp &
2347 /0.3e1_dp*t236*t238 - (4._dp*t25*t242)
2348 t246 = t245*t68
2349 t247 = t15*t246
2350 t248 = t11*t247
2351 t249 = t4*t18
2352 t250 = t67**2
2353 t251 = 0.1e1_dp/t250
2354 t252 = t35*t235
2355 t258 = 0.1e1_dp/t9/t232
2356 t259 = t41*t258
2357 t260 = t39*t259
2358 t261 = t46*t48
2359 t262 = t261*t6
2360 t266 = 0.1e1_dp/t28/t12
2361 t268 = t44*t266*t48
2362 t274 = t60/t61/rho*t63
2363 t277 = -0.4e1_dp/0.3e1_dp*t252*t238 - (4._dp*t36*t242) - 0.5e1_dp &
2364 /0.3e1_dp*t260*t262 - (5._dp*t42*t268) - (8._dp*t55*t274)
2365 t278 = t251*t277
2366 t279 = t210*t278
2367 t280 = t249*t279
2368 t285 = -t215 - t221 + t248 - t280 - 0.2e1_dp/0.3e1_dp*t73*t44*r3 &
2369 *t5
2370 dqrho = f94*t285*t77
2371 t287 = ndrho*t3
2372 t288 = t287*t10
2373 t291 = a1*ndrho
2374 t292 = t291*t3
2375 t295 = t1*ndrho
2376 t296 = a2*t295
2377 t297 = t296*t24
2378 t300 = 2._dp*t292*t19 + 4._dp*t297*t32
2379 t301 = t300*t68
2380 t302 = t15*t301
2381 t304 = a3*t295
2382 t305 = t304*t24
2383 t308 = a4*t21
2384 t309 = t308*t41
2385 t313 = a5*t38*t54
2386 t316 = 4._dp*t305*t32 + 5._dp*t309*t49 + 6._dp*t313*t65
2387 t317 = t251*t316
2388 t318 = t210*t317
2389 t320 = 2._dp*t288*t70 + t11*t302 - t249*t318
2390 dqndrho = f94*t320*t77
2391 t322 = t78*f89
2392 t325 = -t215 - t221 + t248 - t280
2393 t328 = t14*t87
2394 t329 = t328*t6
2395 t332 = t218*t87
2396 t335 = f2*t245
2397 t338 = t335*t68 - t85*t278
2398 t339 = t15*t338
2399 t341 = -0.2e1_dp/0.3e1_dp*t209*t329 - (2._dp*t11*t332) + (t11 &
2400 *t339)
2401 t342 = f12*t341
2402 t344 = c*t149
2403 t345 = t344*t325
2404 t352 = t82*t325
2405 t359 = t97*(t99*t341*t82 + t99*t90*t325 + 2._dp*t102*t352 &
2406 + 3._dp*t104*t92*t325)
2407 t361 = t92**2
2408 t364 = t109/t110/t361
2409 t365 = t364*t325
2410 t368 = t96*t115
2411 t369 = f94*t245
2412 t370 = t369*t117
2413 t373 = t251*t1*t3
2414 t374 = t116*t373
2415 t375 = t14*t77
2416 t376 = t375*t277
2417 t377 = t18*t376
2418 t379 = t117*t3
2419 t380 = t116*t379
2420 t381 = t208*t14
2421 t383 = t77*r3*t5
2422 t384 = t381*t383
2423 t388 = t119*t218*t77
2424 t391 = t370*t121 - t374*t377 - 0.2e1_dp/0.3e1_dp*t380*t384 - (2._dp &
2425 *t118*t388)
2426 t395 = rootpi
2427 t396 = 0.1e1_dp/t395
2428 t397 = t123*t396
2429 t398 = f32**2
2430 t399 = t398*t1
2431 t400 = t399*t119
2432 t401 = t15*t131
2433 t403 = exp(-t400*t401)
2434 t404 = t126*t27
2435 t405 = t125*t404
2436 t406 = t129*sscale
2437 t408 = t132*r3*t5
2438 t416 = t125*t126*t128
2439 t417 = 0.1e1_dp/t132
2440 t418 = t246*t77
2441 t419 = t34*t251
2442 t420 = t77*t277
2443 t422 = t418 - t419*t420
2444 t423 = t417*t422
2445 t424 = t406*t423
2446 t428 = t403*(-t405*t406*t408/0.3e1_dp - t127*t128*t13*t133 &
2447 + t416*t424/0.2e1_dp)
2448 t429 = t397*t428
2449 t433 = (t359*t113 - 0.7e1_dp/0.2e1_dp*t108*t365 - (t368*t391 &
2450 *t123*t136) + (2._dp*t368*t429))*t140
2451 t435 = t141*t142
2452 t437 = t110*t92*t144
2453 t438 = t437*t325
2454 t441 = -t433*t145 - 0.7e1_dp/0.2e1_dp*t435*t438
2455 t442 = t441*e
2456 t443 = t442*t149
2457 t444 = 0.1e1_dp/t361
2458 t445 = t444*t325
2459 t451 = t151*t147
2460 t452 = t93*t159
2461 t453 = t452*t325
2462 t456 = 0.1e1_dp/t158/t157
2463 t457 = t83*t456
2464 t461 = -t215 - t221 + t248 - t280 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
2465 t462 = t156*t461
2466 t463 = t457*t462
2467 t466 = t93*t163
2468 t470 = 0.1e1_dp/t162/t154
2469 t471 = t83*t470
2470 t478 = t166*t90
2471 t479 = t93*t170
2472 t480 = t479*t325
2473 t483 = 0.1e1_dp/t169/t168
2474 t484 = t83*t483
2475 t485 = t155*t461
2476 t486 = t484*t485
2477 t490 = (-t151*t441*t83*t159 + t451*t453 + 0.5e1_dp/0.2e1_dp*t451 &
2478 *t463 + t81*t466*t325 + t81*t471*t461/0.2e1_dp - t166 &
2479 *t341*t83*t170 + t478*t480 + 0.3e1_dp/0.2e1_dp*t478*t486)* &
2480 omega
2481 t493 = t27*r3*t5
2482 t499 = t176*t147
2483 t500 = t149*t159
2484 t501 = t500*t325
2485 t504 = t93*t456
2486 t505 = t504*t462
2487 t511 = t180*t90
2488 t512 = t149*t170
2489 t513 = t512*t325
2490 t516 = t93*t483
2491 t517 = t516*t485
2492 t521 = (-t176*t441*t93*t159 + (2._dp*t499*t501) + 0.5e1_dp/ &
2493 0.2e1_dp*(t499)*(t505) - t180*t341*t93*t170 + (2._dp &
2494 *t511*t513) + 0.3e1_dp/0.2e1_dp*(t511)*(t517))*t185
2495 t523 = t189*t13
2496 t526 = t148*t444
2497 t528 = t194*t44*t325
2498 t531 = t149*t456
2499 t532 = t148*t531
2500 t533 = t193*t44
2501 t534 = t533*t462
2502 t537 = t148*t500
2503 t538 = t193*t258
2504 t539 = t538*t6
2505 t542 = dexeirho(q, dqrho)
2506 t544 = t199**2
2507 t545 = 0.1e1_dp/t544
2508 t546 = t75*t545
2509 t548 = t285*t200 - t546*t285
2510 t549 = 0.1e1_dp/t75
2511 t550 = t548*t549
2512 t554 = -t81*t93*t325 + t342*t94 - (2._dp*t91*t345) + t443 &
2513 - (3._dp*t148*t445) + t490*t128 - t174*t493/0.3e1_dp + t521 &
2514 *t190 - t186*t523 - t443*t195 + (3._dp*t526*t528) + 0.5e1_dp &
2515 /0.2e1_dp*t532*t534 + 0.5e1_dp/0.3e1_dp*t537*t539 + t197*(t542 &
2516 + t550*t199)
2517 t555 = t554*clda
2518 e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t322*t206 - t80*t555)*sx
2519 t561 = f2*t300
2520 t564 = t561*t68 - t85*t317
2521 t565 = t15*t564
2522 t567 = 2._dp*t288*t88 + t11*t565
2523 t568 = f12*t567
2524 t570 = t344*t320
2525 t584 = t97*(t99*t567*t82 + t99*t90*t320 + 2._dp*t102*t82 &
2526 *t320 + 3._dp*t104*t92*t320)
2527 t586 = t364*t320
2528 t589 = f94*t300
2529 t590 = t589*t117
2530 t592 = t375*t316
2531 t593 = t18*t592
2532 t595 = t68*ndrho
2533 t596 = t116*t595
2534 t599 = t590*t121 - t374*t593 + 2._dp*t596*t121
2535 t603 = f32*t126
2536 t604 = t603*t128
2537 t607 = t301*t77
2538 t608 = t77*t316
2539 t610 = t607 - t419*t608
2540 t611 = t417*t610
2541 t612 = t406*t611
2542 t616 = t403*(t604*t406*t132 + t416*t612/0.2e1_dp)
2543 t617 = t397*t616
2544 t621 = (t584*t113 - 0.7e1_dp/0.2e1_dp*t108*t586 - (t368*t599 &
2545 *t123*t136) + (2._dp*t368*t617))*t140
2546 t623 = t437*t320
2547 t626 = -t621*t145 - 0.7e1_dp/0.2e1_dp*t435*t623
2548 t627 = t626*e
2549 t628 = t627*t149
2550 t629 = t444*t320
2551 t635 = t452*t320
2552 t637 = t156*t320
2553 t638 = t457*t637
2554 t649 = t479*t320
2555 t651 = t155*t320
2556 t652 = t484*t651
2557 t656 = (-t151*t626*t83*t159 + t451*t635 + 0.5e1_dp/0.2e1_dp*t451 &
2558 *t638 + t81*t466*t320 + t81*t471*t320/0.2e1_dp - t166 &
2559 *t567*t83*t170 + t478*t649 + 0.3e1_dp/0.2e1_dp*t478*t652)* &
2560 omega
2561 t661 = t500*t320
2562 t664 = t504*t637
2563 t670 = t512*t320
2564 t673 = t516*t651
2565 t677 = (-t176*t626*t93*t159 + (2._dp*t499*t661) + 0.5e1_dp/ &
2566 0.2e1_dp*(t499)*(t664) - t180*t567*t93*t170 + (2._dp &
2567 *t511*t670) + 0.3e1_dp/0.2e1_dp*(t511)*(t673))*t185
2568 t681 = t194*t44*t320
2569 t684 = t533*t637
2570 t687 = dexeindrho(q, dqndrho)
2571 t690 = t320*t200 - t546*t320
2572 t691 = t690*t549
2573 t695 = -t81*t93*t320 + t568*t94 - (2._dp*t91*t570) + t628 &
2574 - (3._dp*t148*t629) + t656*t128 + t677*t190 - t628*t195 &
2575 + (3._dp*t526*t681) + 0.5e1_dp/0.2e1_dp*t532*t684 + t197*(t687 &
2576 + t691*t199)
2577 t696 = t695*clda
2578 e_ndrho = e_ndrho + (-t80*t696)*sx
2579 END IF
2580
2581 END SUBROUTINE xwpbe_lda_calc_3
2582
2583! **************************************************************************************************
2584!> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
2585!> \param e_0 ...
2586!> \param e_rho ...
2587!> \param e_ndrho ...
2588!> \param rho , ndrho: density and norm of the density gradient
2589!> \param ndrho ...
2590!> \param omega screening parameter
2591!> \param sscale scaling factor to enforce Lieb-Oxford bound
2592!> \param sx scaling factor
2593!> \param order maximum degree of the derivative that should be evaluated
2594!> \par History
2595!> 05.2007 created [Manuel Guidon]
2596!> \author Manuel Guidon
2597!> \note
2598!> This routine evaluates the functional for omega!=0 using a simple
2599!> gaussian expansion for large ww and a taylor expansion for the
2600!> parameter G.
2601! **************************************************************************************************
2602 SUBROUTINE xwpbe_lda_calc_4(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
2603 REAL(kind=dp), INTENT(INOUT) :: e_0, e_rho, e_ndrho
2604 REAL(kind=dp), INTENT(IN) :: rho, ndrho, omega, sscale, sx
2605 INTEGER, INTENT(IN) :: order
2606
2607 REAL(kind=dp) :: dqndrho, dqrho, q, t1, t10, t100, t102, t103, t105, t106, t108, t109, t11, &
2608 t110, t111, t113, t114, t115, t116, t117, t118, t12, t121, t122, t125, t126, t127, t128, &
2609 t129, t13, t133, t134, t136, t137, t14, t140, t141, t145, t146, t149, t15, t151, t153, &
2610 t154, t155, t156, t158, t159, t16, t160, t161, t163, t167, t169, t17, t170, t171, t173, &
2611 t174, t176, t177, t178, t179, t18, t180, t182, t183, t184, t185, t188, t189, t19, t192, &
2612 t193, t195, t196, t197, t198, t199, t2, t203, t206, t207, t208, t209, t21, t210, t211, &
2613 t212, t213, t219, t22, t220, t221, t222, t223, t227, t229, t23
2614 REAL(kind=dp) :: t235, t238, t239, t24, t240, t241, t246, t248, t249, t25, t252, t253, t256, &
2615 t257, t258, t261, t262, t263, t265, t266, t269, t27, t270, t274, t277, t278, t279, t28, &
2616 t281, t283, t286, t289, t29, t290, t293, t296, t299, t3, t300, t302, t303, t305, t306, &
2617 t309, t31, t310, t313, t316, t32, t321, t326, t327, t329, t330, t331, t332, t333, t334, &
2618 t34, t340, t341, t342, t345, t346, t35, t350, t351, t352, t355, t359, t36, t360, t367, &
2619 t368, t369, t372, t373, t374, t375, t379, t38, t382, t388, t389, t39, t390, t393, t394, &
2620 t4, t400, t401, t402, t405, t406, t41, t410, t412, t415, t417
2621 REAL(kind=dp) :: t42, t420, t421, t422, t423, t426, t427, t428, t431, t433, t434, t435, &
2622 t437, t438, t439, t44, t443, t444, t450, t453, t454, t456, t457, t459, t46, t464, t465, &
2623 t468, t469, t472, t473, t475, t476, t477, t478, t48, t484, t486, t487, t49, t498, t5, &
2624 t500, t501, t505, t510, t513, t519, t522, t526, t530, t533, t536, t539, t54, t540, t544, &
2625 t545, t55, t56, t58, t6, t60, t61, t63, t65, t67, t68, t69, t7, t70, t71, t72, t73, t74, &
2626 t75, t77, t78, t8, t80, t81, t82, t83, t84, t85, t87, t88, t9, t90, t91, t92, t93, t94, &
2627 t95, t96, t97, t99
2628
2629 t1 = ndrho**2
2630 t2 = r2**2
2631 t3 = 0.1e1_dp/t2
2632 t4 = t1*t3
2633 t5 = pi**2
2634 t6 = r3*t5
2635 t7 = t6*rho
2636 t8 = t7**(0.1e1_dp/0.3e1_dp)
2637 t9 = t8**2
2638 t10 = 0.1e1_dp/t9
2639 t11 = t4*t10
2640 t12 = rho**2
2641 t13 = 0.1e1_dp/t12
2642 t14 = sscale**2
2643 t15 = t13*t14
2644 t16 = a1*t1
2645 t17 = t16*t3
2646 t18 = t10*t13
2647 t19 = t18*t14
2648 t21 = t1**2
2649 t22 = a2*t21
2650 t23 = t2**2
2651 t24 = 0.1e1_dp/t23
2652 t25 = t22*t24
2653 t27 = 0.1e1_dp/t8/t7
2654 t28 = t12**2
2655 t29 = 0.1e1_dp/t28
2656 t31 = t14**2
2657 t32 = t27*t29*t31
2658 t34 = t17*t19 + t25*t32
2659 t35 = a3*t21
2660 t36 = t35*t24
2661 t38 = t21*ndrho
2662 t39 = a4*t38
2663 t41 = 0.1e1_dp/t23/r2
2664 t42 = t39*t41
2665 t44 = 0.1e1_dp/t9/t7
2666 t46 = 0.1e1_dp/t28/rho
2667 t48 = t31*sscale
2668 t49 = t44*t46*t48
2669 t54 = 0.1e1_dp/t23/t2
2670 t55 = a5*t21*t1*t54
2671 t56 = r3**2
2672 t58 = t5**2
2673 t60 = 0.1e1_dp/t56/t58
2674 t61 = t28**2
2675 t63 = t31*t14
2676 t65 = t60/t61*t63
2677 t67 = r1 + t36*t32 + t42*t49 + t55*t65
2678 t68 = 0.1e1_dp/t67
2679 t69 = t34*t68
2680 t70 = t15*t69
2681 t71 = t11*t70
2682 t72 = omega**2
2683 t73 = beta2*t72
2684 t74 = t73*t10
2685 t75 = t71 + t74
2686 t77 = 0.1e1_dp/a
2687 q = f94*t75*t77
2688 t78 = rho**(0.1e1_dp/0.3e1_dp)
2689 t80 = t78*rho*f89
2690 t81 = b*f12
2691 t82 = t71 + dd
2692 t83 = 0.1e1_dp/t82
2693 t84 = t81*t83
2694 t85 = f2*t34
2695 t87 = f1 + t85*t68
2696 t88 = t15*t87
2697 t90 = t11*t88 + r1
2698 t91 = f12*t90
2699 t92 = t82**2
2700 t93 = 0.1e1_dp/t92
2701 t94 = c*t93
2702 t95 = t91*t94
2703 t96 = g2*t1
2704 t97 = t96*t3
2705 t99 = g3*t21
2706 t100 = t99*t24
2707 t102 = g1 + t97*t19 + t100*t32
2708 t103 = t15*t102
2709 t105 = t11*t103 + r1
2710 t106 = t105*e
2711 t108 = 0.1e1_dp/t92/t82
2712 t109 = t106*t108
2713 t110 = f158*e
2714 t111 = t105*t83
2715 t113 = t71 + dd + t72*t10
2716 t114 = t113**2
2717 t115 = t114**2
2718 t116 = t115*t113
2719 t117 = sqrt(t116)
2720 t118 = 0.1e1_dp/t117
2721 t121 = sqrt(t113)
2722 t122 = 0.1e1_dp/t121
2723 t125 = f68*c
2724 t126 = t90*t83
2725 t127 = t114*t113
2726 t128 = sqrt(t127)
2727 t129 = 0.1e1_dp/t128
2728 t133 = (-t110*t111*t118 - t81*t83*t122 - t125*t126*t129) &
2729 *omega
2730 t134 = 0.1e1_dp/t8
2731 t136 = f52*e
2732 t137 = t105*t93
2733 t140 = f12*c
2734 t141 = t90*t93
2735 t145 = t72*omega
2736 t146 = (-t136*t137*t118 - t140*t141*t129)*t145
2737 t149 = 0.1e1_dp/r3/t5
2738 t151 = t149/rho
2739 t153 = t72**2
2740 t154 = t153*omega
2741 t155 = t118*t154
2742 t156 = t155*t44
2743 t158 = f12*a
2744 t159 = exei(q)
2745 t160 = t71 + dd + t74
2746 t161 = 0.1e1_dp/t160
2747 t163 = log(t75*t161)
2748 t167 = (t84 + t95 + t109 + t133*t134 + t146*t151 - t109*t156 &
2749 + t158*(t159 + t163))*clda
2750 e_0 = e_0 + (-t80*t167)*sx
2751 IF (order >= 1) THEN
2752 t169 = t44*t13
2753 t170 = t4*t169
2754 t171 = t14*t34
2755 t173 = t68*r3*t5
2756 t174 = t171*t173
2757 t176 = 0.2e1_dp/0.3e1_dp*t170*t174
2758 t177 = t12*rho
2759 t178 = 0.1e1_dp/t177
2760 t179 = t178*t14
2761 t180 = t179*t69
2762 t182 = 2._dp*t11*t180
2763 t183 = t3*t44
2764 t184 = t16*t183
2765 t185 = t15*t6
2766 t188 = t10*t178
2767 t189 = t188*t14
2768 t192 = t56*t58
2769 t193 = t192*t12
2770 t195 = 0.1e1_dp/t8/t193
2771 t196 = t24*t195
2772 t197 = t22*t196
2773 t198 = t29*t31
2774 t199 = t198*t6
2775 t203 = t27*t46*t31
2776 t206 = -0.2e1_dp/0.3e1_dp*t184*t185 - (2._dp*t17*t189) - 0.4e1_dp &
2777 /0.3e1_dp*t197*t199 - (4._dp*t25*t203)
2778 t207 = t206*t68
2779 t208 = t15*t207
2780 t209 = t11*t208
2781 t210 = t4*t18
2782 t211 = t67**2
2783 t212 = 0.1e1_dp/t211
2784 t213 = t35*t196
2785 t219 = 0.1e1_dp/t9/t193
2786 t220 = t41*t219
2787 t221 = t39*t220
2788 t222 = t46*t48
2789 t223 = t222*t6
2790 t227 = 0.1e1_dp/t28/t12
2791 t229 = t44*t227*t48
2792 t235 = t60/t61/rho*t63
2793 t238 = -0.4e1_dp/0.3e1_dp*t213*t199 - (4._dp*t36*t203) - 0.5e1_dp &
2794 /0.3e1_dp*t221*t223 - (5._dp*t42*t229) - (8._dp*t55*t235)
2795 t239 = t212*t238
2796 t240 = t171*t239
2797 t241 = t210*t240
2798 t246 = -t176 - t182 + t209 - t241 - 0.2e1_dp/0.3e1_dp*t73*t44*r3 &
2799 *t5
2800 dqrho = f94*t246*t77
2801 t248 = ndrho*t3
2802 t249 = t248*t10
2803 t252 = a1*ndrho
2804 t253 = t252*t3
2805 t256 = t1*ndrho
2806 t257 = a2*t256
2807 t258 = t257*t24
2808 t261 = 2._dp*t253*t19 + 4._dp*t258*t32
2809 t262 = t261*t68
2810 t263 = t15*t262
2811 t265 = a3*t256
2812 t266 = t265*t24
2813 t269 = a4*t21
2814 t270 = t269*t41
2815 t274 = a5*t38*t54
2816 t277 = 4._dp*t266*t32 + 5._dp*t270*t49 + 6._dp*t274*t65
2817 t278 = t212*t277
2818 t279 = t171*t278
2819 t281 = 2._dp*t249*t70 + t11*t263 - t210*t279
2820 dqndrho = f94*t281*t77
2821 t283 = t78*f89
2822 t286 = -t176 - t182 + t209 - t241
2823 t289 = t14*t87
2824 t290 = t289*t6
2825 t293 = t179*t87
2826 t296 = f2*t206
2827 t299 = t296*t68 - t85*t239
2828 t300 = t15*t299
2829 t302 = -0.2e1_dp/0.3e1_dp*t170*t290 - (2._dp*t11*t293) + (t11 &
2830 *t300)
2831 t303 = f12*t302
2832 t305 = c*t108
2833 t306 = t305*t286
2834 t309 = t14*t102
2835 t310 = t309*t6
2836 t313 = t179*t102
2837 t316 = t96*t183
2838 t321 = t99*t196
2839 t326 = -0.2e1_dp/0.3e1_dp*t316*t185 - (2._dp*t97*t189) - 0.4e1_dp &
2840 /0.3e1_dp*t321*t199 - (4._dp*t100*t203)
2841 t327 = t15*t326
2842 t329 = -0.2e1_dp/0.3e1_dp*t170*t310 - (2._dp*t11*t313) + (t11 &
2843 *t327)
2844 t330 = t329*e
2845 t331 = t330*t108
2846 t332 = t92**2
2847 t333 = 0.1e1_dp/t332
2848 t334 = t333*t286
2849 t340 = t110*t105
2850 t341 = t93*t118
2851 t342 = t341*t286
2852 t345 = 0.1e1_dp/t117/t116
2853 t346 = t83*t345
2854 t350 = -t176 - t182 + t209 - t241 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
2855 t351 = t115*t350
2856 t352 = t346*t351
2857 t355 = t93*t122
2858 t359 = 0.1e1_dp/t121/t113
2859 t360 = t83*t359
2860 t367 = t125*t90
2861 t368 = t93*t129
2862 t369 = t368*t286
2863 t372 = 0.1e1_dp/t128/t127
2864 t373 = t83*t372
2865 t374 = t114*t350
2866 t375 = t373*t374
2867 t379 = (-t110*t329*t83*t118 + t340*t342 + 0.5e1_dp/0.2e1_dp*t340 &
2868 *t352 + t81*t355*t286 + t81*t360*t350/0.2e1_dp - t125 &
2869 *t302*t83*t129 + t367*t369 + 0.3e1_dp/0.2e1_dp*t367*t375)* &
2870 omega
2871 t382 = t27*r3*t5
2872 t388 = t136*t105
2873 t389 = t108*t118
2874 t390 = t389*t286
2875 t393 = t93*t345
2876 t394 = t393*t351
2877 t400 = t140*t90
2878 t401 = t108*t129
2879 t402 = t401*t286
2880 t405 = t93*t372
2881 t406 = t405*t374
2882 t410 = (-t136*t329*t93*t118 + (2._dp*t388*t390) + 0.5e1_dp/ &
2883 0.2e1_dp*(t388)*(t394) - t140*t302*t93*t129 + (2._dp &
2884 *t400*t402) + 0.3e1_dp/0.2e1_dp*(t400)*(t406))*t145
2885 t412 = t149*t13
2886 t415 = t106*t333
2887 t417 = t155*t44*t286
2888 t420 = t108*t345
2889 t421 = t106*t420
2890 t422 = t154*t44
2891 t423 = t422*t351
2892 t426 = t106*t389
2893 t427 = t154*t219
2894 t428 = t427*t6
2895 t431 = dexeirho(q, dqrho)
2896 t433 = t160**2
2897 t434 = 0.1e1_dp/t433
2898 t435 = t75*t434
2899 t437 = t246*t161 - t435*t246
2900 t438 = 0.1e1_dp/t75
2901 t439 = t437*t438
2902 t443 = -t81*t93*t286 + t303*t94 - (2._dp*t91*t306) + t331 &
2903 - (3._dp*t106*t334) + t379*t134 - t133*t382/0.3e1_dp + t410 &
2904 *t151 - t146*t412 - t331*t156 + (3._dp*t415*t417) + 0.5e1_dp &
2905 /0.2e1_dp*t421*t423 + 0.5e1_dp/0.3e1_dp*t426*t428 + t158*(t431 &
2906 + t439*t160)
2907 t444 = t443*clda
2908 e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t283*t167 - t80*t444)*sx
2909 t450 = f2*t261
2910 t453 = t450*t68 - t85*t278
2911 t454 = t15*t453
2912 t456 = 2._dp*t249*t88 + t11*t454
2913 t457 = f12*t456
2914 t459 = t305*t281
2915 t464 = g2*ndrho
2916 t465 = t464*t3
2917 t468 = g3*t256
2918 t469 = t468*t24
2919 t472 = 2._dp*t465*t19 + 4._dp*t469*t32
2920 t473 = t15*t472
2921 t475 = 2._dp*t249*t103 + t11*t473
2922 t476 = t475*e
2923 t477 = t476*t108
2924 t478 = t333*t281
2925 t484 = t341*t281
2926 t486 = t115*t281
2927 t487 = t346*t486
2928 t498 = t368*t281
2929 t500 = t114*t281
2930 t501 = t373*t500
2931 t505 = (-t110*t475*t83*t118 + t340*t484 + 0.5e1_dp/0.2e1_dp*t340 &
2932 *t487 + t81*t355*t281 + t81*t360*t281/0.2e1_dp - t125 &
2933 *t456*t83*t129 + t367*t498 + 0.3e1_dp/0.2e1_dp*t367*t501)* &
2934 omega
2935 t510 = t389*t281
2936 t513 = t393*t486
2937 t519 = t401*t281
2938 t522 = t405*t500
2939 t526 = (-t136*t475*t93*t118 + (2._dp*t388*t510) + 0.5e1_dp/ &
2940 0.2e1_dp*(t388)*(t513) - t140*t456*t93*t129 + (2._dp &
2941 *t400*t519) + 0.3e1_dp/0.2e1_dp*(t400)*(t522))*t145
2942 t530 = t155*t44*t281
2943 t533 = t422*t486
2944 t536 = dexeindrho(q, dqndrho)
2945 t539 = t281*t161 - t435*t281
2946 t540 = t539*t438
2947 t544 = -t81*t93*t281 + t457*t94 - (2._dp*t91*t459) + t477 &
2948 - (3._dp*t106*t478) + t505*t134 + t526*t151 - t477*t156 &
2949 + (3._dp*t415*t530) + 0.5e1_dp/0.2e1_dp*t421*t533 + t158*(t536 &
2950 + t540*t160)
2951 t545 = t544*clda
2952 e_ndrho = e_ndrho + (-t80*t545)*sx
2953 END IF
2954
2955 END SUBROUTINE xwpbe_lda_calc_4
2956
2957! **************************************************************************************************
2958!> \brief return various information on the functional
2959!> \param reference string with the reference of the actual functional
2960!> \param shortform string with the shortform of the functional name
2961!> \param needs the components needed by this functional are set to
2962!> true (does not set the unneeded components to false)
2963!> \param max_deriv ...
2964!> \par History
2965!> 05.2007 created [Manuel Guidon]
2966!> \author Manuel Guidon
2967! **************************************************************************************************
2968 SUBROUTINE xwpbe_lsd_info(reference, shortform, needs, max_deriv)
2969 CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
2970 TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL :: needs
2971 INTEGER, INTENT(out), OPTIONAL :: max_deriv
2972
2973 IF (PRESENT(reference)) THEN
2974 reference = "Jochen Heyd and Gustavo E. Scuseria, J. Chem. Phys., 120, 7274 {LSD version}"
2975 END IF
2976 IF (PRESENT(shortform)) THEN
2977 shortform = "shortrange part of PBE exchange {LSD}"
2978 END IF
2979 IF (PRESENT(needs)) THEN
2980 needs%rho_spin = .true.
2981 needs%norm_drho_spin = .true.
2982 END IF
2983 IF (PRESENT(max_deriv)) max_deriv = 1
2984 END SUBROUTINE xwpbe_lsd_info
2985
2986! **************************************************************************************************
2987!> \brief evaluates the screened hole averaged PBE exchange functional for lsd
2988!> \param rho_set the density where you want to evaluate the functional
2989!> \param deriv_set place where to store the functional derivatives (they are
2990!> added to the derivatives)
2991!> \param order maximum degree of the derivative that should be evaluated
2992!> \param xwpbe_params input parameters (scaling,omega)
2993!> \par History
2994!> 05.2007 created [Manuel Guidon]
2995!> \author Manuel Guidon
2996!> \note
2997!> The current version provides code for derivatives up to second order.
2998!> Using the maple sheet in cp2k/doc it is straightforward to produce routines
2999!> for higher derivatives.
3000! **************************************************************************************************
3001 SUBROUTINE xwpbe_lsd_eval(rho_set, deriv_set, order, xwpbe_params)
3002
3003 TYPE(xc_rho_set_type), INTENT(IN) :: rho_set
3004 TYPE(xc_derivative_set_type), INTENT(IN) :: deriv_set
3005 INTEGER, INTENT(IN) :: order
3006 TYPE(section_vals_type), POINTER :: xwpbe_params
3007
3008 CHARACTER(len=*), PARAMETER :: routinen = 'xwpbe_lsd_eval'
3009
3010 INTEGER :: handle, npoints
3011 INTEGER, DIMENSION(2, 3) :: bo
3012 REAL(kind=dp) :: epsilon_norm_drho, epsilon_rho, omega, &
3013 sx, sx0
3014 REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), &
3015 POINTER :: dummy, e_0, e_ndrhoa, e_ndrhob, e_rhoa, &
3016 e_rhob, norm_drhoa, norm_drhob, rhoa, &
3017 rhob
3018 TYPE(xc_derivative_type), POINTER :: deriv
3019
3020 CALL timeset(routinen, handle)
3021
3022 CALL cite_reference(heyd2004)
3023
3024 CALL section_vals_val_get(xwpbe_params, "SCALE_X", r_val=sx)
3025 CALL section_vals_val_get(xwpbe_params, "SCALE_X0", r_val=sx0)
3026 CALL section_vals_val_get(xwpbe_params, "OMEGA", r_val=omega)
3027
3028 CALL xc_rho_set_get(rho_set, rhoa=rhoa, rhob=rhob, norm_drhoa=norm_drhoa, &
3029 norm_drhob=norm_drhob, local_bounds=bo, rho_cutoff=epsilon_rho, &
3030 drho_cutoff=epsilon_norm_drho)
3031 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
3032
3033 dummy => rhoa
3034
3035 e_0 => dummy
3036 e_rhoa => dummy
3037 e_rhob => dummy
3038 e_ndrhoa => dummy
3039 e_ndrhob => dummy
3040
3041 deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
3042 allocate_deriv=.true.)
3043 CALL xc_derivative_get(deriv, deriv_data=e_0)
3044 IF (order >= 1 .OR. order == -1) THEN
3045 deriv => xc_dset_get_derivative(deriv_set, [deriv_rhoa], &
3046 allocate_deriv=.true.)
3047 CALL xc_derivative_get(deriv, deriv_data=e_rhoa)
3048 deriv => xc_dset_get_derivative(deriv_set, [deriv_rhob], &
3049 allocate_deriv=.true.)
3050 CALL xc_derivative_get(deriv, deriv_data=e_rhob)
3051 deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhoa], &
3052 allocate_deriv=.true.)
3053 CALL xc_derivative_get(deriv, deriv_data=e_ndrhoa)
3054 deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhob], &
3055 allocate_deriv=.true.)
3056 CALL xc_derivative_get(deriv, deriv_data=e_ndrhob)
3057 END IF
3058 IF (order > 1) THEN
3059 cpabort("derivatives bigger than 1 not implemented")
3060 END IF
3061
3062!$OMP PARALLEL DEFAULT(NONE) &
3063!$OMP SHARED(npoints, order, rhoa, norm_drhoa, e_0, e_rhoa, e_ndrhoa) &
3064!$OMP SHARED(epsilon_rho, sx, sx0, omega) &
3065!$OMP SHARED(rhob, norm_drhob, e_rhob, e_ndrhob)
3066
3067 !Call lsd_calc for alpha - and beta - spins
3068
3069 CALL xwpbe_lsd_calc(npoints, order, rho=rhoa, norm_drho=norm_drhoa, &
3070 e_0=e_0, e_rho=e_rhoa, e_ndrho=e_ndrhoa, &
3071 epsilon_rho=epsilon_rho, &
3072 sx=sx, sx0=sx0, omega=omega)
3073 CALL xwpbe_lsd_calc(npoints, order, rho=rhob, norm_drho=norm_drhob, &
3074 e_0=e_0, e_rho=e_rhob, e_ndrho=e_ndrhob, &
3075 epsilon_rho=epsilon_rho, &
3076 sx=sx, sx0=sx0, omega=omega)
3077
3078!$OMP END PARALLEL
3079
3080 CALL timestop(handle)
3081
3082 END SUBROUTINE xwpbe_lsd_eval
3083
3084! **************************************************************************************************
3085!> \brief evaluates the screened hole averaged PBE exchange functional for lsd.
3086!> \param npoints ...
3087!> \param order degree of the derivative that should be evaluated,
3088!> if positive all the derivatives up to the given degree are evaluated,
3089!> if negative only the given degree is calculated
3090!> \param rho , ndrho: density and norm of the density gradient
3091!> \param norm_drho ...
3092!> \param e_0 ...
3093!> \param e_rho ...
3094!> \param e_ndrho ...
3095!> \param epsilon_rho ...
3096!> \param sx , sx0: scaling factor for omega!=0 and omega=0
3097!> \param sx0 ...
3098!> \param omega screening parameter
3099!> \par History
3100!> 05.2007 created [Manuel Guidon]
3101!> \author Manuel Guidon
3102!> \note
3103!> - The lsd part is calculated using the spin-scaling relations for the
3104!> exchange energy:
3105!>
3106!> Ex[na,nb] = 0.5 * Ex[2*na] + 0.5 * Ex[2*nb].
3107!>
3108!> - In order to avoid numerical instabilities, this routine calls different
3109!> subroutines. There are 4 routines for the case omega!=0 and 2 routines
3110!> for omega=0.
3111! **************************************************************************************************
3112 SUBROUTINE xwpbe_lsd_calc(npoints, order, rho, norm_drho, e_0, e_rho, e_ndrho, &
3113 epsilon_rho, sx, sx0, omega)
3114
3115 INTEGER, INTENT(in) :: npoints, order
3116 REAL(kind=dp), DIMENSION(1:npoints), INTENT(inout) :: rho, norm_drho, e_0, e_rho, e_ndrho
3117 REAL(kind=dp), INTENT(in) :: epsilon_rho, sx, sx0, omega
3118
3119 INTEGER :: ip
3120 REAL(dp) :: e_0_temp, gradient_before, &
3121 gradient_increment, my_ndrho, my_rho, &
3122 pullback
3123 REAL(kind=dp) :: ss, ss2, sscale, t1, t2, t3, t4, t5, t6, &
3124 t7, t8, ww
3125
3126!$OMP DO
3127
3128 DO ip = 1, npoints
3129 !According to spin-scaling relation, we need twice the density and its gradient
3130 my_rho = 2.0_dp*max(rho(ip), 0.0_dp)
3131 IF (my_rho > epsilon_rho) THEN
3132 gradient_before = e_ndrho(ip)
3133 my_ndrho = 2.0_dp*max(norm_drho(ip), 0.0_dp)
3134
3135 !Do some precalculation in order to catch the correct branch afterwards
3136 sscale = 1.0_dp
3137 t1 = pi**2
3138 t2 = t1*my_rho
3139 t3 = t2**(0.1e1_dp/0.3e1_dp)
3140 t4 = 0.1e1_dp/t3
3141 t5 = omega*t4
3142 ww = 0.6933612743506347048433524e0_dp*t5
3143 t6 = my_ndrho*t4
3144 t7 = 0.1e1_dp/my_rho
3145 t8 = t7*sscale
3146 ss = 0.3466806371753173524216762e0_dp*t6*t8
3147 IF (ss > scutoff) THEN
3148 ss2 = ss*ss
3149 sscale = ((smax)*ss2 - (sconst))/(ss2*ss)
3150 END IF
3151 e_0_temp = 0.0_dp
3152 IF (sx0 /= 0.0_dp) THEN
3153 !original PBE hole
3154 IF (ss*sscale > gcutoff) THEN
3155 CALL xwpbe_lda_calc_0(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3156 my_ndrho, sscale, sx0, order)
3157 ELSE
3158 CALL xwpbe_lda_calc_01(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3159 my_ndrho, sscale, sx0, order)
3160 END IF
3161 !According to spin-scaling relation, we need only half of the energy
3162 e_0(ip) = e_0(ip) + 0.5_dp*e_0_temp
3163 END IF
3164 e_0_temp = 0.0_dp
3165 IF (sx /= 0.0_dp) THEN
3166 IF (omega == 0.0_dp) THEN
3167 IF (ss*sscale > gcutoff) THEN
3168 CALL xwpbe_lda_calc_0(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3169 my_ndrho, sscale, sx, order)
3170 ELSE
3171 CALL xwpbe_lda_calc_01(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3172 my_ndrho, sscale, sx, order)
3173 END IF
3174 ELSE IF (ww < wcutoff .AND. ss*sscale > gcutoff) THEN
3175 CALL xwpbe_lda_calc_1(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3176 my_ndrho, omega, sscale, sx, order)
3177 ELSE IF (ww < wcutoff .AND. ss*sscale <= gcutoff) THEN
3178 CALL xwpbe_lda_calc_2(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3179 my_ndrho, omega, sscale, sx, order)
3180 ELSE IF (ww >= wcutoff .AND. ss*sscale > gcutoff) THEN
3181 CALL xwpbe_lda_calc_3(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3182 my_ndrho, omega, sscale, sx, order)
3183 ELSE
3184 CALL xwpbe_lda_calc_4(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
3185 my_ndrho, omega, sscale, sx, order)
3186 END IF
3187 !According to spin-scaling relation, we need only half of the energy
3188 END IF
3189 e_0(ip) = e_0(ip) + 0.5_dp*e_0_temp
3190 IF (order >= 1 .AND. ss > scutoff) THEN
3191 ! Pull back g_eff = g*f(s), s = g/(2*k_F*rho), through the large-s scaling.
3192 ! The generated expressions differentiate at fixed f(s).
3193 pullback = (-smax*ss2 + 3.0_dp*sconst)/(smax*ss2 - sconst)
3194 gradient_increment = e_ndrho(ip) - gradient_before
3195 e_rho(ip) = e_rho(ip) - gradient_increment*(4.0_dp*my_ndrho/(3.0_dp*my_rho))*pullback
3196 e_ndrho(ip) = gradient_before + gradient_increment*(1.0_dp + pullback)
3197 END IF
3198 END IF
3199 END DO
3200
3201!$OMP END DO
3202
3203 END SUBROUTINE xwpbe_lsd_calc
3204
3205! **************************************************************************************************
3206!> \brief These functions evaluate products exp(x)*Ei(x) and pi*exp(x)*erfc(sqrt(x)),
3207!> as well as their derivatives with respect to various combinations of
3208!> rho and norm_drho.
3209!> \param Q , dQrho, dQndrho, d2Qrhondrho :
3210!> Argument Q and derivatives with respect to various combinations of
3211!> rho and norm_drho
3212!> \param exp_q optional precomputed EXP(Q)
3213!> \return ...
3214!> \par History
3215!> 05.2007 created [Manuel Guidon]
3216!> \author Manuel Guidon
3217!> \note
3218!> - In order to avoid numerical instabilities, these routines use Taylor-
3219!> expansions for the above core-products for large arguments.
3220!> - When adapting this module for higher order derivatives, appropriate
3221!> functions have to be provided!
3222! **************************************************************************************************
3223 FUNCTION exei(Q, exp_q)
3224 REAL(dp), INTENT(IN) :: q
3225 REAL(dp), INTENT(IN), OPTIONAL :: exp_q
3226 REAL(dp) :: exei
3227
3228 exei = 0.0_dp
3229 IF (q < expcutoff) THEN
3230 !Use exact product
3231 IF (PRESENT(exp_q)) THEN
3232 exei = exp_q*expint(1, q, 1.0_dp/exp_q)
3233 ELSE
3234 exei = exp(q)*expint(1, q)
3235 END IF
3236 ELSE
3237 !Use approximation
3238 exei = (1._dp/q)*(q*q + exei1*q + exei2)/(q*q + exei3*q + exei4)
3239 END IF
3240 END FUNCTION exei
3241
3242! **************************************************************************************************
3243!> \brief ...
3244!> \param Q ...
3245!> \return ...
3246! **************************************************************************************************
3247 FUNCTION exer(Q)
3248 REAL(dp), INTENT(IN) :: q
3249 REAL(dp) :: exer
3250
3251 REAL(dp) :: q3, q5
3252
3253 exer = 0.0_dp
3254 IF (q < expcutoff) THEN
3255 !Use exact expression
3256 exer = pi*exp(q)*erfc(sqrt(q))
3257 ELSE
3258 !Use approximation
3259 q3 = q*q*q
3260 q5 = q3*q*q
3261 exer = pi*(1.0_dp/sqrt(q*pi) - 1.0_dp/(2.0_dp*sqrt(pi*q3)) + 3.0_dp/(4.0_dp*(sqrt(pi*q5))))
3262 END IF
3263 END FUNCTION exer
3264
3265! **************************************************************************************************
3266!> \brief ...
3267!> \param Q ...
3268!> \param dQrho ...
3269!> \param exei_q optional precomputed exei(Q)
3270!> \return ...
3271! **************************************************************************************************
3272 FUNCTION dexeirho(Q, dQrho, exei_q)
3273 REAL(dp), INTENT(IN) :: q, dqrho
3274 REAL(dp), INTENT(IN), OPTIONAL :: exei_q
3275 REAL(dp) :: dexeirho
3276
3277 IF (PRESENT(exei_q)) THEN
3278 dexeirho = dqrho*(exei_q - 1.0_dp/q)
3279 ELSE
3280 dexeirho = dqrho*(exei(q) - 1.0_dp/q)
3281 END IF
3282 END FUNCTION dexeirho
3283
3284! **************************************************************************************************
3285!> \brief ...
3286!> \param Q ...
3287!> \param dQndrho ...
3288!> \param exei_q optional precomputed exei(Q)
3289!> \return ...
3290! **************************************************************************************************
3291 FUNCTION dexeindrho(Q, dQndrho, exei_q)
3292 REAL(dp), INTENT(IN) :: q, dqndrho
3293 REAL(dp), INTENT(IN), OPTIONAL :: exei_q
3294 REAL(dp) :: dexeindrho
3295
3296 IF (PRESENT(exei_q)) THEN
3297 dexeindrho = dqndrho*(exei_q - 1.0_dp/q)
3298 ELSE
3299 dexeindrho = dqndrho*(exei(q) - 1.0_dp/q)
3300 END IF
3301 END FUNCTION dexeindrho
3302
3303! **************************************************************************************************
3304!> \brief ...
3305!> \param Q ...
3306!> \param dQrho ...
3307!> \return ...
3308! **************************************************************************************************
3309 FUNCTION dexerrho(Q, dQrho)
3310 REAL(dp), INTENT(IN) :: q, dqrho
3311 REAL(dp) :: dexerrho
3312
3313 dexerrho = dqrho*exer(q) - dqrho*rootpi/sqrt(q)
3314 END FUNCTION dexerrho
3315
3316! **************************************************************************************************
3317!> \brief ...
3318!> \param Q ...
3319!> \param dQndrho ...
3320!> \return ...
3321! **************************************************************************************************
3322 FUNCTION dexerndrho(Q, dQndrho)
3323 REAL(dp), INTENT(IN) :: q, dqndrho
3324 REAL(dp) :: dexerndrho
3325
3326 dexerndrho = dqndrho*exer(q) - dqndrho*rootpi/sqrt(q)
3327 END FUNCTION dexerndrho
3328
3329! **************************************************************************************************
3330!> \brief ...
3331!> \param Q ...
3332!> \param dQrho ...
3333!> \param d2Qrhorho ...
3334!> \return ...
3335! **************************************************************************************************
3336 FUNCTION d2exeirhorho(Q, dQrho, d2Qrhorho)
3337 REAL(dp), INTENT(IN) :: q, dqrho, d2qrhorho
3338 REAL(dp) :: d2exeirhorho
3339
3340 d2exeirhorho = exei(q)*(d2qrhorho + dqrho*dqrho) + &
3341 1.0_dp/(q*q)*(-q*dqrho*dqrho - q*d2qrhorho + dqrho*dqrho)
3342 END FUNCTION d2exeirhorho
3343
3344! **************************************************************************************************
3345!> \brief ...
3346!> \param Q ...
3347!> \param dQrho ...
3348!> \param d2Qrhorho ...
3349!> \return ...
3350! **************************************************************************************************
3351 FUNCTION d2exerrhorho(Q, dQrho, d2Qrhorho)
3352 REAL(dp), INTENT(IN) :: q, dqrho, d2qrhorho
3353 REAL(dp) :: d2exerrhorho
3354
3355 REAL(dp) :: pi12, q12
3356
3357 q12 = sqrt(q)
3358 pi12 = rootpi
3359
3360 d2exerrhorho = exer(q)*(d2qrhorho + dqrho*dqrho) - dqrho*dqrho/(pi12*q12) + &
3361 0.5_dp*dqrho*dqrho/(pi12*q*q12) - d2qrhorho/(pi12*q12)
3362 END FUNCTION d2exerrhorho
3363
3364! **************************************************************************************************
3365!> \brief ...
3366!> \param Q ...
3367!> \param dQrho ...
3368!> \param dQndrho ...
3369!> \param d2Qrhondrho ...
3370!> \return ...
3371! **************************************************************************************************
3372 FUNCTION d2exeirhondrho(Q, dQrho, dQndrho, d2Qrhondrho)
3373 REAL(dp), INTENT(IN) :: q, dqrho, dqndrho, d2qrhondrho
3374 REAL(dp) :: d2exeirhondrho
3375
3376 d2exeirhondrho = exei(q)*(d2qrhondrho + dqrho*dqndrho) - &
3377 1.0_dp/q*(dqrho*dqndrho + d2qrhondrho) + 1.0_dp/(q*q)*dqrho*dqndrho
3378 END FUNCTION d2exeirhondrho
3379
3380! **************************************************************************************************
3381!> \brief ...
3382!> \param Q ...
3383!> \param dQrho ...
3384!> \param dQndrho ...
3385!> \param d2Qrhondrho ...
3386!> \return ...
3387! **************************************************************************************************
3388 FUNCTION d2exerrhondrho(Q, dQrho, dQndrho, d2Qrhondrho)
3389 REAL(dp), INTENT(IN) :: q, dqrho, dqndrho, d2qrhondrho
3390 REAL(dp) :: d2exerrhondrho
3391
3392 REAL(dp) :: pi12, q12
3393
3394 q12 = sqrt(q)
3395 pi12 = rootpi
3396
3397 d2exerrhondrho = exer(q)*(d2qrhondrho + dqrho*dqndrho) - 1.0_dp/(pi12*q12)*dqrho*dqndrho &
3398 + 0.5_dp/(pi12*q12*q)*dqrho*dqndrho - 1.0_dp/(pi12*q12)*d2qrhondrho
3399 END FUNCTION d2exerrhondrho
3400
3401! **************************************************************************************************
3402!> \brief ...
3403!> \param Q ...
3404!> \param dQndrho ...
3405!> \param d2Qndrhondrho ...
3406!> \return ...
3407! **************************************************************************************************
3408 FUNCTION d2exeindrhondrho(Q, dQndrho, d2Qndrhondrho)
3409 REAL(dp), INTENT(IN) :: q, dqndrho, d2qndrhondrho
3410 REAL(dp) :: d2exeindrhondrho
3411
3412 d2exeindrhondrho = exei(q)*(d2qndrhondrho + dqndrho*dqndrho) + &
3413 1.0_dp/(q*q)*(-q*dqndrho*dqndrho - q*d2qndrhondrho + dqndrho*dqndrho)
3414 END FUNCTION d2exeindrhondrho
3415
3416! **************************************************************************************************
3417!> \brief ...
3418!> \param Q ...
3419!> \param dQndrho ...
3420!> \param d2Qndrhondrho ...
3421!> \return ...
3422! **************************************************************************************************
3423 FUNCTION d2exerndrhondrho(Q, dQndrho, d2Qndrhondrho)
3424 REAL(dp), INTENT(IN) :: q, dqndrho, d2qndrhondrho
3425 REAL(dp) :: d2exerndrhondrho
3426
3427 REAL(dp) :: pi12, q12
3428
3429 q12 = sqrt(q)
3430 pi12 = rootpi
3431
3432 d2exerndrhondrho = exer(q)*(d2qndrhondrho + dqndrho*dqndrho) - dqndrho*dqndrho/(pi12*q12) &
3433 + 0.5_dp*dqndrho*dqndrho/(pi12*q*q12) - d2qndrhondrho/(pi12*q12)
3434 END FUNCTION d2exerndrhondrho
3435
3436! **************************************************************************************************
3437!> \brief computes the exponential integral
3438!> En(x) = Int(exp(-x*t)/t^n,t=1..infinity) x>0, n=0,1,..
3439!> Note: Ei(-x) = -E1(x)
3440!> \param n ...
3441!> \param x ...
3442!> \param exp_mx optional precomputed EXP(-x)
3443!> \return ...
3444!> \par History
3445!> 05.2007 Created
3446!> \author Manuel Guidon (adapted from Numerical recipies)
3447! **************************************************************************************************
3448 ELEMENTAL FUNCTION expint(n, x, exp_mx)
3449 INTEGER, INTENT(IN) :: n
3450 REAL(dp), INTENT(IN) :: x
3451 REAL(dp), INTENT(IN), OPTIONAL :: exp_mx
3452 REAL(dp) :: expint
3453
3454 INTEGER, PARAMETER :: maxit = 100
3455 REAL(dp), PARAMETER :: cf_rescale_inv = 1.0e-100_dp, cf_rescale_max = 1.0e100_dp, &
3456 eps = 6.e-14_dp, euler = 0.5772156649015328606065120_dp
3457
3458 INTEGER :: i, ii, nm1
3459 REAL(dp) :: a, a0, a1, a2, b, b0, b1, b2, del, fact, &
3460 my_exp_mx, psi
3461
3462 nm1 = n - 1
3463
3464 IF (n < 0 .OR. x < 0.0_dp .OR. (x == 0.0_dp .AND. (n == 0 .OR. n == 1))) THEN
3465 expint = huge(1.0_dp)
3466 ELSE IF (n == 0) THEN !Special case.
3467 IF (PRESENT(exp_mx)) THEN
3468 expint = exp_mx/x
3469 ELSE
3470 expint = exp(-x)/x
3471 END IF
3472 ELSE IF (x == 0.0_dp) THEN !Another special case.
3473 expint = 1.0_dp/nm1
3474 ELSE IF (x > 750.0_dp) THEN !E_n(x) <= exp(-x)/x underflows to zero in IEEE-754 dp.
3475 expint = 0.0_dp
3476 ELSE IF (x > 1.0_dp) THEN !3-term continued-fraction recurrence.
3477 IF (PRESENT(exp_mx)) THEN
3478 my_exp_mx = exp_mx
3479 ELSE
3480 my_exp_mx = exp(-x)
3481 END IF
3482 b = x + n
3483 a0 = 0.0_dp
3484 b0 = 1.0_dp
3485 a1 = 1.0_dp
3486 b1 = b
3487 DO i = 1, maxit
3488 a = -i*(nm1 + i)
3489 b = b + 2.0_dp
3490 a2 = b*a1 + a*a0
3491 b2 = b*b1 + a*b0
3492 ! Rescale 3-term continued-fraction coefficients to prevent overflow
3493 IF (abs(b2) > cf_rescale_max) THEN
3494 a2 = a2*cf_rescale_inv
3495 b2 = b2*cf_rescale_inv
3496 a1 = a1*cf_rescale_inv
3497 b1 = b1*cf_rescale_inv
3498 END IF
3499 IF (abs(a2*b1 - a1*b2) < eps*abs(a2*b1) .OR. i == maxit) THEN
3500 expint = (a2/b2)*my_exp_mx
3501 RETURN
3502 END IF
3503 a0 = a1
3504 b0 = b1
3505 a1 = a2
3506 b1 = b2
3507 END DO
3508 ELSE !Evaluate series.
3509 IF (nm1 /= 0) THEN !Set first term.
3510 expint = 1.0_dp/nm1
3511 ELSE
3512 expint = -log(x) - euler
3513 END IF
3514 fact = 1.0_dp
3515 DO i = 1, maxit
3516 fact = -fact*x/i
3517 IF (i /= nm1) THEN
3518 del = -fact/(i - nm1)
3519 ELSE
3520 psi = -euler !Compute I(n).
3521 DO ii = 1, nm1
3522 psi = psi + 1.0_dp/ii
3523 END DO
3524 del = fact*(-log(x) + psi)
3525 END IF
3526 expint = expint + del
3527 IF (abs(del) < abs(expint)*eps) RETURN
3528 END DO
3529 END IF
3530 END FUNCTION expint
3531
3532END MODULE xc_xwpbe
3533
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public heyd2004
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), parameter, public euler
real(kind=dp), parameter, public rootpi
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
contains the structure
contains the structure
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 short range exchange part for wPBE functional and averaged PBE exchange-hole functional (o...
Definition xc_xwpbe.F:15
subroutine, public xwpbe_lda_eval(rho_set, deriv_set, order, xwpbe_params)
evaluates the screened hole averaged PBE exchange functional for lda
Definition xc_xwpbe.F:146
subroutine, public xwpbe_lsd_eval(rho_set, deriv_set, order, xwpbe_params)
evaluates the screened hole averaged PBE exchange functional for lsd
Definition xc_xwpbe.F:3002
subroutine, public xwpbe_lda_info(reference, shortform, needs, max_deriv)
return various information on the functional
Definition xc_xwpbe.F:112
subroutine, public xwpbe_lsd_info(reference, shortform, needs, max_deriv)
return various information on the functional
Definition xc_xwpbe.F:2969
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