(git:e7e05ae)
xc_b97.F
Go to the documentation of this file.
1 !--------------------------------------------------------------------------------------------------!
2 ! CP2K: A general program to perform molecular dynamics simulations !
3 ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 ! !
5 ! SPDX-License-Identifier: GPL-2.0-or-later !
6 !--------------------------------------------------------------------------------------------------!
7 
8 ! **************************************************************************************************
9 !> \brief calculates the b97 correlation functional
10 !> \note
11 !> This was generated with the help of a maple worksheet that you can
12 !> find under doc/b97.mw .
13 !> I did not add 3. derivatives in the polazied (lsd) case because it
14 !> would have added lots of code. If you need them the worksheet
15 !> is already prepared for them, and by uncommenting a couple of lines
16 !> you should be able to generate them.
17 !> Other parametrizations (B97-1 by FA Hamprecht, AJ Cohen, DJ Tozer, NC Handy)
18 !> could be easily added, the maple file should be straightforward to extend
19 !> to HCTH (and thus implement it also for unrestricted calculations).
20 !> \par History
21 !> 01.2009 created [fawzi]
22 !> \author fawzi
23 ! **************************************************************************************************
24 MODULE xc_b97
25  USE bibliography, ONLY: becke1997,&
26  grimme2006,&
27  cite_reference
28  USE input_section_types, ONLY: section_vals_type,&
30  USE kinds, ONLY: dp
31  USE mathconstants, ONLY: pi
35  deriv_rho,&
36  deriv_rhoa,&
38  USE xc_derivative_set_types, ONLY: xc_derivative_set_type,&
41  xc_derivative_type
42  USE xc_input_constants, ONLY: xc_b97_3c,&
46  USE xc_rho_cflags_types, ONLY: xc_rho_cflags_type
47  USE xc_rho_set_types, ONLY: xc_rho_set_get,&
48  xc_rho_set_type
49 #include "../base/base_uses.f90"
50 
51  IMPLICIT NONE
52  PRIVATE
53 
54  LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
55  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xc_b97'
56 
58 
59  REAL(dp), DIMENSION(10) :: params_b97_orig = (/0.8094_dp, 0.5073_dp, 0.7481_dp, &
60  0.9454_dp, 0.7471_dp, -4.5961_dp, 0.1737_dp, 2.3487_dp, -2.4868_dp, 1.0_dp - 0.1943_dp/)
61  REAL(dp), DIMENSION(10) :: params_b97_grimme = (/1.08662_dp, -0.52127_dp, 3.25429_dp, &
62  0.69041_dp, 6.30270_dp, -14.9712_dp, 0.22340_dp, -1.56208_dp, 1.94293_dp, 1.0_dp/)
63  REAL(dp), DIMENSION(10) :: params_b97_mardirossian = (/0.833_dp, 0.603_dp, 1.194_dp, &
64  1.219_dp, -1.850_dp, 0.00_dp, 0.556_dp, -0.257_dp, 0.00_dp, 1.0_dp/)
65  REAL(dp), DIMENSION(10) :: params_b97_3c = (/1.076616_dp, -0.469912_dp, 3.322442_dp, &
66  0.635047_dp, 5.532103_dp, -15.301575_dp, 0.543788_dp, -1.444420_dp, 1.637436_dp, 1.0_dp/)
67 
68 CONTAINS
69 
70 ! **************************************************************************************************
71 !> \brief ...
72 !> \param param ...
73 !> \param lda ...
74 !> \param sx ...
75 !> \param sc ...
76 !> \param reference ...
77 !> \param shortform ...
78 ! **************************************************************************************************
79  SUBROUTINE b97_ref(param, lda, sx, sc, reference, shortform)
80  INTEGER :: param
81  LOGICAL :: lda
82  REAL(dp), INTENT(in) :: sx, sc
83  CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
84 
85  CHARACTER(20) :: pol
86 
87  IF (lda) THEN
88  pol = "(unpolarized)"
89  ELSE
90  pol = "(polarized)"
91  END IF
92  SELECT CASE (param)
93  CASE (xc_b97_orig)
94  CALL cite_reference(becke1997)
95  IF (sx == 1._dp .AND. sc == 1._dp) THEN
96  IF (PRESENT(reference)) THEN
97  reference = "A.D.Becke, "// &
98  "J. Chem. Phys, vol. 107, pp. 8554, (1997), needs exact x, "// &
99  pol
100  END IF
101  IF (PRESENT(shortform)) THEN
102  shortform = "B97, Becke 1997 xc functional, needs exact x "//pol
103  END IF
104  ELSE
105  IF (PRESENT(reference)) THEN
106  WRITE (reference, "(a,a,'sx=',f5.3,'sc=',f5.3,a,a)") &
107  "A.D.Becke, ", &
108  "J. Chem. Phys, vol. 107, pp. 8554, (1997)", &
109  sx, sc, ", needs exact x ", pol
110  END IF
111  IF (PRESENT(shortform)) THEN
112  WRITE (shortform, "(a,a,'sx=',f5.3,'sc=',f5.3)") &
113  "B97, Becke 1997 xc functional (unpolarized)", pol, sx, sc
114  END IF
115  END IF
116  CASE (xc_b97_grimme)
117  CALL cite_reference(becke1997)
118  CALL cite_reference(grimme2006)
119  IF (sx == 1._dp .AND. sc == 1._dp) THEN
120  IF (PRESENT(reference)) THEN
121  reference = "B97-D, Grimme xc functional,"// &
122  " J Comput Chem 27: 1787-1799 (2006),"// &
123  " needs C6 dispersion "//pol
124  END IF
125  IF (PRESENT(shortform)) THEN
126  shortform = "B97-D, Grimme xc functional "//pol
127  END IF
128  ELSE
129  IF (PRESENT(reference)) THEN
130  WRITE (reference, "(a,a,3x,' sx=',f6.3,' sc=',f6.3,1x,a)") &
131  "B97-D, Grimme xc functional,", &
132  " J Comput Chem 27: 1787-1799 (2006) ", &
133  sx, sc, pol
134  END IF
135  IF (PRESENT(shortform)) THEN
136  WRITE (shortform, "(a,a,3x,' sx=',f6.3,' sc=',f6.3,' (LDA)')") &
137  "B97-D, Grimme xc functional ", pol, sx, sc
138  END IF
139  END IF
140  CASE (xc_b97_mardirossian)
141  CALL cite_reference(becke1997)
142 ! CALL cite_reference(Mardirossian2014)
143  IF (sx == 1._dp .AND. sc == 1._dp) THEN
144  IF (PRESENT(reference)) THEN
145  reference = "wB97X-V, xc functional,"// &
146  " Mardirossian and Head-Gordon, PCCP DOI: 10.1039/c3cp54374a,"// &
147  " needs HFX exchange and VV10 dispersion (NOT TESTED)"//pol
148  END IF
149  IF (PRESENT(shortform)) THEN
150  shortform = "wB97X-V, HFX+B97+VV10 functional (NOT TESTED)"//pol
151  END IF
152  ELSE
153  cpabort("Unsupported scaling factors")
154  END IF
155  CASE (xc_b97_3c)
156  CALL cite_reference(becke1997)
157 ! CALL cite_reference(Mardirossian2014)
158  IF (sx == 1._dp .AND. sc == 1._dp) THEN
159  IF (PRESENT(reference)) THEN
160  reference = "B97-3c composite method,"// &
161  " S. Grimme, A. Hansen, no reference available, yet,"// &
162  " use TZVP basis set, D3(BJ) dispersion correction"// &
163  " with CALCULATE_C9_TERM and SRB correction"//pol
164  END IF
165  IF (PRESENT(shortform)) THEN
166  shortform = "B97-3c composite method"//pol
167  END IF
168  ELSE
169  cpabort("Unsupported scaling factors")
170  END IF
171  CASE default
172  cpabort("Unsupported parametrization")
173  END SELECT
174  END SUBROUTINE b97_ref
175 
176 ! **************************************************************************************************
177 !> \brief return various information on the functional
178 !> \param b97_params section selecting the various parameters for the functional
179 !> \param reference string with the reference of the actual functional
180 !> \param shortform string with the shortform of the functional name
181 !> \param needs the components needed by this functional are set to
182 !> true (does not set the unneeded components to false)
183 !> \param max_deriv ...
184 !> \author fawzi
185 ! **************************************************************************************************
186  SUBROUTINE b97_lda_info(b97_params, reference, shortform, needs, max_deriv)
187  TYPE(section_vals_type), POINTER :: b97_params
188  CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
189  TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL :: needs
190  INTEGER, INTENT(out), OPTIONAL :: max_deriv
191 
192  INTEGER :: param
193  REAL(kind=dp) :: sc, sx
194 
195  CALL section_vals_val_get(b97_params, "parametrization", i_val=param)
196  CALL section_vals_val_get(b97_params, "scale_x", r_val=sx)
197  CALL section_vals_val_get(b97_params, "scale_c", r_val=sc)
198 
199  CALL b97_ref(param, .true., sx, sc, reference, shortform)
200  IF (PRESENT(needs)) THEN
201  needs%rho = .true.
202  needs%norm_drho = .true.
203  END IF
204  IF (PRESENT(max_deriv)) max_deriv = 2
205 
206  END SUBROUTINE b97_lda_info
207 
208 ! **************************************************************************************************
209 !> \brief return various information on the functional
210 !> \param b97_params section selecting the various parameters for the functional
211 !> \param reference string with the reference of the actual functional
212 !> \param shortform string with the shortform of the functional name
213 !> \param needs the components needed by this functional are set to
214 !> true (does not set the unneeded components to false)
215 !> \param max_deriv ...
216 !> \author fawzi
217 ! **************************************************************************************************
218  SUBROUTINE b97_lsd_info(b97_params, reference, shortform, needs, max_deriv)
219  TYPE(section_vals_type), POINTER :: b97_params
220  CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
221  TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL :: needs
222  INTEGER, INTENT(out), OPTIONAL :: max_deriv
223 
224  INTEGER :: param
225  REAL(kind=dp) :: sc, sx
226 
227  CALL section_vals_val_get(b97_params, "parametrization", i_val=param)
228  CALL section_vals_val_get(b97_params, "scale_x", r_val=sx)
229  CALL section_vals_val_get(b97_params, "scale_c", r_val=sc)
230 
231  CALL b97_ref(param, .false., sx, sc, reference, shortform)
232  IF (PRESENT(needs)) THEN
233  needs%rho_spin = .true.
234  needs%norm_drho_spin = .true.
235  END IF
236  IF (PRESENT(max_deriv)) max_deriv = 2
237 
238  END SUBROUTINE b97_lsd_info
239 
240 ! **************************************************************************************************
241 !> \brief evaluates the b97 correlation functional for lda
242 !> \param rho_set the density where you want to evaluate the functional
243 !> \param deriv_set place where to store the functional derivatives (they are
244 !> added to the derivatives)
245 !> \param grad_deriv degree of the derivative that should be evaluated,
246 !> if positive all the derivatives up to the given degree are evaluated,
247 !> if negative only the given degree is calculated
248 !> \param b97_params ...
249 !> \author fawzi
250 ! **************************************************************************************************
251  SUBROUTINE b97_lda_eval(rho_set, deriv_set, grad_deriv, b97_params)
252  TYPE(xc_rho_set_type), INTENT(IN) :: rho_set
253  TYPE(xc_derivative_set_type), INTENT(IN) :: deriv_set
254  INTEGER, INTENT(in) :: grad_deriv
255  TYPE(section_vals_type), POINTER :: b97_params
256 
257  CHARACTER(len=*), PARAMETER :: routinen = 'b97_lda_eval'
258 
259  INTEGER :: handle, npoints, param
260  INTEGER, DIMENSION(2, 3) :: bo
261  REAL(kind=dp) :: epsilon_norm_drho, epsilon_rho, scale_c, &
262  scale_x
263  REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), POINTER :: dummy, e_0, e_ndrho, &
264  e_ndrho_ndrho, e_ndrho_ndrho_ndrho, e_ndrho_ndrho_rho, e_ndrho_rho, e_ndrho_rho_rho, &
265  e_rho, e_rho_rho, e_rho_rho_rho, norm_drho, rho
266  TYPE(xc_derivative_type), POINTER :: deriv
267 
268  CALL timeset(routinen, handle)
269 
270  CALL xc_rho_set_get(rho_set, rho=rho, &
271  norm_drho=norm_drho, local_bounds=bo, rho_cutoff=epsilon_rho, &
272  drho_cutoff=epsilon_norm_drho)
273  npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
274 
275  dummy => rho
276 
277  e_0 => dummy
278  e_rho => dummy
279  e_ndrho => dummy
280  e_rho_rho => dummy
281  e_ndrho_rho => dummy
282  e_ndrho_ndrho => dummy
283  e_rho_rho_rho => dummy
284  e_ndrho_rho_rho => dummy
285  e_ndrho_ndrho_rho => dummy
286  e_ndrho_ndrho_ndrho => dummy
287 
288  IF (grad_deriv >= 0) THEN
289  deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
290  allocate_deriv=.true.)
291  CALL xc_derivative_get(deriv, deriv_data=e_0)
292  END IF
293  IF (grad_deriv >= 1 .OR. grad_deriv == -1) THEN
294  deriv => xc_dset_get_derivative(deriv_set, [deriv_rho], &
295  allocate_deriv=.true.)
296  CALL xc_derivative_get(deriv, deriv_data=e_rho)
297  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drho], &
298  allocate_deriv=.true.)
299  CALL xc_derivative_get(deriv, deriv_data=e_ndrho)
300  END IF
301  IF (grad_deriv >= 2 .OR. grad_deriv == -2) THEN
302  deriv => xc_dset_get_derivative(deriv_set, [deriv_rho, deriv_rho], &
303  allocate_deriv=.true.)
304  CALL xc_derivative_get(deriv, deriv_data=e_rho_rho)
305  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drho, deriv_rho], &
306  allocate_deriv=.true.)
307  CALL xc_derivative_get(deriv, deriv_data=e_ndrho_rho)
308  deriv => xc_dset_get_derivative(deriv_set, &
309  [deriv_norm_drho, deriv_norm_drho], allocate_deriv=.true.)
310  CALL xc_derivative_get(deriv, deriv_data=e_ndrho_ndrho)
311  END IF
312  IF (grad_deriv >= 3 .OR. grad_deriv == -3) THEN
313  deriv => xc_dset_get_derivative(deriv_set, [deriv_rho, deriv_rho, deriv_rho], &
314  allocate_deriv=.true.)
315  CALL xc_derivative_get(deriv, deriv_data=e_rho_rho_rho)
316  deriv => xc_dset_get_derivative(deriv_set, &
317  [deriv_norm_drho, deriv_rho, deriv_rho], allocate_deriv=.true.)
318  CALL xc_derivative_get(deriv, deriv_data=e_ndrho_rho_rho)
319  deriv => xc_dset_get_derivative(deriv_set, &
320  [deriv_norm_drho, deriv_norm_drho, deriv_rho], allocate_deriv=.true.)
321  CALL xc_derivative_get(deriv, deriv_data=e_ndrho_ndrho_rho)
322  deriv => xc_dset_get_derivative(deriv_set, &
323  [deriv_norm_drho, deriv_norm_drho, deriv_norm_drho], allocate_deriv=.true.)
324  CALL xc_derivative_get(deriv, deriv_data=e_ndrho_ndrho_ndrho)
325  END IF
326  IF (grad_deriv > 3 .OR. grad_deriv < -3) THEN
327  cpabort("derivatives bigger than 3 not implemented")
328  END IF
329 
330  CALL section_vals_val_get(b97_params, "parametrization", i_val=param)
331  CALL section_vals_val_get(b97_params, "scale_c", r_val=scale_c)
332  CALL section_vals_val_get(b97_params, "scale_x", r_val=scale_x)
333 
334 !$OMP PARALLEL DEFAULT(NONE) &
335 !$OMP SHARED(rho, norm_drho, e_0, e_rho, e_ndrho, e_rho_rho) &
336 !$OMP SHARED(e_ndrho_rho, e_ndrho_ndrho) &
337 !$OMP SHARED(grad_deriv, npoints, epsilon_rho) &
338 !$OMP SHARED(epsilon_norm_drho, param, scale_c, scale_x)
339 
340  CALL b97_lda_calc(rho_tot=rho, norm_drho=norm_drho, &
341  e_0=e_0, e_r=e_rho, e_ndr=e_ndrho, e_r_r=e_rho_rho, &
342  e_r_ndr=e_ndrho_rho, e_ndr_ndr=e_ndrho_ndrho, &
343  ! e_rho_rho_rho=e_rho_rho_rho, e_ndrho_rho_rho=e_ndrho_rho_rho,&
344  ! e_ndrho_ndrho_rho=e_ndrho_ndrho_rho,e_ndrho_ndrho_ndrho=e_ndrho_ndrho_ndrho,&
345  grad_deriv=grad_deriv, &
346  npoints=npoints, epsilon_rho=epsilon_rho, &
347  param=param, scale_c_in=scale_c, scale_x_in=scale_x)
348 
349 !$OMP END PARALLEL
350 
351  NULLIFY (dummy)
352  CALL timestop(handle)
353  END SUBROUTINE b97_lda_eval
354 
355 ! **************************************************************************************************
356 !> \brief evaluates the b 97 xc functional for lsd
357 !> \param rho_set ...
358 !> \param deriv_set ...
359 !> \param grad_deriv ...
360 !> \param b97_params ...
361 !> \author fawzi
362 ! **************************************************************************************************
363  SUBROUTINE b97_lsd_eval(rho_set, deriv_set, grad_deriv, b97_params)
364  TYPE(xc_rho_set_type), INTENT(IN) :: rho_set
365  TYPE(xc_derivative_set_type), INTENT(IN) :: deriv_set
366  INTEGER, INTENT(in) :: grad_deriv
367  TYPE(section_vals_type), POINTER :: b97_params
368 
369  CHARACTER(len=*), PARAMETER :: routinen = 'b97_lsd_eval'
370 
371  INTEGER :: handle, npoints, param
372  INTEGER, DIMENSION(2, 3) :: bo
373  REAL(kind=dp) :: epsilon_rho, scale_c, scale_x
374  REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), POINTER :: dummy, e_0, e_ndra, e_ndra_ndra, &
375  e_ndra_ndrb, e_ndra_ra, e_ndra_rb, e_ndrb, e_ndrb_ndrb, e_ndrb_ra, e_ndrb_rb, e_ra, &
376  e_ra_ra, e_ra_rb, e_rb, e_rb_rb, norm_drhoa, norm_drhob, rhoa, rhob
377  TYPE(xc_derivative_type), POINTER :: deriv
378 
379  CALL timeset(routinen, handle)
380  NULLIFY (deriv)
381 
382  CALL xc_rho_set_get(rho_set, &
383  rhoa=rhoa, rhob=rhob, norm_drhoa=norm_drhoa, &
384  norm_drhob=norm_drhob, &
385  rho_cutoff=epsilon_rho, &
386  local_bounds=bo)
387  npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
388 
389  dummy => rhoa
390  e_0 => dummy
391  e_ra => dummy
392  e_rb => dummy
393  e_ndra => dummy
394  e_ndrb => dummy
395 
396  e_ndra_ra => dummy
397  e_ndra_rb => dummy
398  e_ndrb_rb => dummy
399  e_ndrb_ra => dummy
400 
401  e_ndra_ndra => dummy
402  e_ndrb_ndrb => dummy
403  e_ndra_ndrb => dummy
404 
405  e_ra_ra => dummy
406  e_ra_rb => dummy
407  e_rb_rb => dummy
408 
409  IF (grad_deriv >= 0) THEN
410  deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
411  allocate_deriv=.true.)
412  CALL xc_derivative_get(deriv, deriv_data=e_0)
413  END IF
414  IF (grad_deriv >= 1 .OR. grad_deriv == -1) THEN
415  deriv => xc_dset_get_derivative(deriv_set, [deriv_rhoa], &
416  allocate_deriv=.true.)
417  CALL xc_derivative_get(deriv, deriv_data=e_ra)
418  deriv => xc_dset_get_derivative(deriv_set, [deriv_rhob], &
419  allocate_deriv=.true.)
420  CALL xc_derivative_get(deriv, deriv_data=e_rb)
421  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhoa], &
422  allocate_deriv=.true.)
423  CALL xc_derivative_get(deriv, deriv_data=e_ndra)
424  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhob], &
425  allocate_deriv=.true.)
426  CALL xc_derivative_get(deriv, deriv_data=e_ndrb)
427  END IF
428  IF (grad_deriv >= 2 .OR. grad_deriv == -2) THEN
429  deriv => xc_dset_get_derivative(deriv_set, [deriv_rhoa, deriv_rhoa], &
430  allocate_deriv=.true.)
431  CALL xc_derivative_get(deriv, deriv_data=e_ra_ra)
432  deriv => xc_dset_get_derivative(deriv_set, [deriv_rhoa, deriv_rhob], &
433  allocate_deriv=.true.)
434  CALL xc_derivative_get(deriv, deriv_data=e_ra_rb)
435  deriv => xc_dset_get_derivative(deriv_set, [deriv_rhob, deriv_rhob], &
436  allocate_deriv=.true.)
437  CALL xc_derivative_get(deriv, deriv_data=e_rb_rb)
438  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhoa, deriv_rhoa], &
439  allocate_deriv=.true.)
440  CALL xc_derivative_get(deriv, deriv_data=e_ndra_ra)
441  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhoa, deriv_rhob], &
442  allocate_deriv=.true.)
443  CALL xc_derivative_get(deriv, deriv_data=e_ndra_rb)
444  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhob, deriv_rhob], &
445  allocate_deriv=.true.)
446  CALL xc_derivative_get(deriv, deriv_data=e_ndrb_rb)
447  deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhob, deriv_rhoa], &
448  allocate_deriv=.true.)
449  CALL xc_derivative_get(deriv, deriv_data=e_ndrb_ra)
450  deriv => xc_dset_get_derivative(deriv_set, &
451  [deriv_norm_drhoa, deriv_norm_drhoa], allocate_deriv=.true.)
452  CALL xc_derivative_get(deriv, deriv_data=e_ndra_ndra)
453  deriv => xc_dset_get_derivative(deriv_set, &
454  [deriv_norm_drhoa, deriv_norm_drhob], allocate_deriv=.true.)
455  CALL xc_derivative_get(deriv, deriv_data=e_ndra_ndrb)
456  deriv => xc_dset_get_derivative(deriv_set, &
457  [deriv_norm_drhob, deriv_norm_drhob], allocate_deriv=.true.)
458  CALL xc_derivative_get(deriv, deriv_data=e_ndrb_ndrb)
459  END IF
460  IF (grad_deriv >= 3 .OR. grad_deriv == -3) THEN
461  ! to do
462  END IF
463 
464  CALL section_vals_val_get(b97_params, "parametrization", i_val=param)
465  CALL section_vals_val_get(b97_params, "scale_x", r_val=scale_x)
466  CALL section_vals_val_get(b97_params, "scale_c", r_val=scale_c)
467 
468 !$OMP PARALLEL DEFAULT (NONE) &
469 !$OMP SHARED(rhoa, rhob, norm_drhoa, norm_drhob, e_0, e_ra) &
470 !$OMP SHARED(e_rb, e_ndra, e_ndrb, e_ra_ra, e_ra_rb, e_rb_rb) &
471 !$OMP SHARED(e_ndra_ra, e_ndrb_ra, e_ndrb_rb, e_ndra_rb) &
472 !$OMP SHARED(e_ndra_ndra, e_ndrb_ndrb, e_ndra_ndrb) &
473 !$OMP SHARED(grad_deriv, npoints, param, scale_c, scale_x) &
474 !$OMP SHARED(epsilon_rho)
475 
476  CALL b97_lsd_calc( &
477  rhoa=rhoa, rhob=rhob, norm_drhoa=norm_drhoa, &
478  norm_drhob=norm_drhob, e_0=e_0, &
479  e_ra=e_ra, e_rb=e_rb, &
480  e_ndra=e_ndra, e_ndrb=e_ndrb, &
481  e_ra_ra=e_ra_ra, e_ra_rb=e_ra_rb, e_rb_rb=e_rb_rb, &
482  e_ra_ndra=e_ndra_ra, e_ra_ndrb=e_ndrb_ra, &
483  e_rb_ndrb=e_ndrb_rb, e_rb_ndra=e_ndra_rb, &
484  e_ndra_ndra=e_ndra_ndra, e_ndrb_ndrb=e_ndrb_ndrb, &
485  e_ndra_ndrb=e_ndra_ndrb, &
486  grad_deriv=grad_deriv, npoints=npoints, &
487  epsilon_rho=epsilon_rho, &
488  param=param, scale_c_in=scale_c, scale_x_in=scale_x)
489 
490 !$OMP END PARALLEL
491 
492  NULLIFY (dummy)
493  CALL timestop(handle)
494  END SUBROUTINE b97_lsd_eval
495 
496 ! **************************************************************************************************
497 !> \brief ...
498 !> \param param ...
499 !> \return ...
500 ! **************************************************************************************************
501  FUNCTION b97_coeffs(param) RESULT(res)
502  INTEGER, INTENT(in) :: param
503  REAL(dp), DIMENSION(10) :: res
504 
505  SELECT CASE (param)
506  CASE (xc_b97_orig)
507  res = params_b97_orig
508  CASE (xc_b97_grimme)
509  res = params_b97_grimme
510  CASE (xc_b97_mardirossian)
511  res = params_b97_mardirossian
512  CASE (xc_b97_3c)
513  res = params_b97_3c
514  CASE default
515  cpabort("Unsupported parametrization")
516  res = 0.0_dp
517  END SELECT
518  END FUNCTION b97_coeffs
519 
520 ! **************************************************************************************************
521 !> \brief low level calculation of the b97 exchange-correlation functional for lsd
522 !> \param rhoa alpha spin density
523 !> \param rhob beta spin desnity
524 !> \param norm_drhoa || grad rhoa ||
525 !> \param norm_drhob || grad rhoa ||
526 !> \param e_0 adds to it the local value of the functional
527 !> \param e_ra derivative of the functional with respect to ra
528 !> \param e_rb derivative of the functional with respect to rb
529 !> \param e_ndra derivative of the functional with respect to ndra
530 !> \param e_ndrb derivative of the functional with respect to ndrb
531 !> \param e_ra_ndra derivative of the functional with respect to ra_ndra
532 !> \param e_ra_ndrb derivative of the functional with respect to ra_ndrb
533 !> \param e_rb_ndra derivative of the functional with respect to rb_ndra
534 !> \param e_rb_ndrb derivative of the functional with respect to rb_ndrb
535 !> \param e_ndra_ndra derivative of the functional with respect to ndra_ndra
536 !> \param e_ndrb_ndrb derivative of the functional with respect to ndrb_ndrb
537 !> \param e_ndra_ndrb derivative of the functional with respect to ndra_ndrb
538 !> \param e_ra_ra derivative of the functional with respect to ra_ra
539 !> \param e_ra_rb derivative of the functional with respect to ra_rb
540 !> \param e_rb_rb derivative of the functional with respect to rb_rb
541 !> \param grad_deriv ...
542 !> \param npoints ...
543 !> \param epsilon_rho ...
544 !> \param param ...
545 !> \param scale_c_in derivative of the functional with respect to c_in
546 !> \param scale_x_in derivative of the functional with respect to x_in
547 !> \author fawzi
548 ! **************************************************************************************************
549  SUBROUTINE b97_lsd_calc(rhoa, rhob, norm_drhoa, norm_drhob, &
550  e_0, e_ra, e_rb, e_ndra, e_ndrb, &
551  e_ra_ndra, e_ra_ndrb, e_rb_ndra, e_rb_ndrb, &
552  e_ndra_ndra, e_ndrb_ndrb, e_ndra_ndrb, &
553  e_ra_ra, e_ra_rb, e_rb_rb, &
554  grad_deriv, npoints, epsilon_rho, &
555  param, scale_c_in, scale_x_in)
556  REAL(kind=dp), DIMENSION(*), INTENT(in) :: rhoa, rhob, norm_drhoa, norm_drhob
557  REAL(kind=dp), DIMENSION(*), INTENT(inout) :: e_0, e_ra, e_rb, e_ndra, e_ndrb, e_ra_ndra, &
558  e_ra_ndrb, e_rb_ndra, e_rb_ndrb, e_ndra_ndra, e_ndrb_ndrb, e_ndra_ndrb, e_ra_ra, e_ra_rb, &
559  e_rb_rb
560  INTEGER, INTENT(in) :: grad_deriv, npoints
561  REAL(kind=dp), INTENT(in) :: epsilon_rho
562  INTEGER, INTENT(in) :: param
563  REAL(kind=dp), INTENT(in) :: scale_c_in, scale_x_in
564 
565  INTEGER :: ii
566  REAL(kind=dp) :: a_1, a_2, a_3, alpha_1_1, alpha_1_2, alpha_1_3, alpha_c, alpha_c1rhoa, &
567  alpha_c1rhob, alpha_crhoa, alpha_crhob, beta_1_1, beta_1_2, beta_1_3, beta_2_1, beta_2_2, &
568  beta_2_3, beta_3_1, beta_3_2, beta_3_3, beta_4_1, beta_4_2, beta_4_3, c_cab_0, c_cab_1, &
569  c_cab_2, c_css_0, c_css_1, c_css_2, c_x_0, c_x_1, c_x_2, chi, chirhoa, chirhoarhoa, &
570  chirhoarhob, chirhob, chirhobrhob, e_c_u_0, e_c_u_01rhoa, e_c_u_01rhob, e_c_u_0rhoa, &
571  e_c_u_0rhoarhoa, e_c_u_0rhoarhob, e_c_u_0rhob, e_c_u_0rhobrhob, e_c_u_1rhoa, e_c_u_1rhob, &
572  e_lsda_c_a, e_lsda_c_a1rhoa, e_lsda_c_ab, e_lsda_c_abrhoa
573  REAL(kind=dp) :: e_lsda_c_abrhob, e_lsda_c_arhoa, e_lsda_c_arhoarhoa, e_lsda_c_b, &
574  e_lsda_c_b1rhob, e_lsda_c_brhob, e_lsda_c_brhobrhob, e_lsda_x_a, e_lsda_x_arhoa, &
575  e_lsda_x_b, e_lsda_x_brhob, epsilon_c_unif, epsilon_c_unif1rhoa, epsilon_c_unif1rhob, &
576  epsilon_c_unif_a, epsilon_c_unif_a1rhoa, epsilon_c_unif_arhoa, epsilon_c_unif_b, &
577  epsilon_c_unif_b1rhob, epsilon_c_unif_brhob, epsilon_c_unifrhoa, epsilon_c_unifrhob, exc, &
578  exc_norm_drhoa, exc_norm_drhoa_norm_drhoa, exc_norm_drhoa_norm_drhob, exc_norm_drhob, &
579  exc_norm_drhob_norm_drhob, exc_rhoa, exc_rhoa_norm_drhoa, exc_rhoa_norm_drhob
580  REAL(kind=dp) :: exc_rhoa_rhoa, exc_rhoa_rhob, exc_rhob, exc_rhob_norm_drhoa, &
581  exc_rhob_norm_drhob, exc_rhob_rhob, f, f1rhoa, f1rhob, frhoa, frhoarhoa, frhoarhob, &
582  frhob, frhobrhob, gamma_c_ab, gamma_c_ss, gamma_x, gc_a, gc_ab, gc_abnorm_drhoa, &
583  gc_abnorm_drhob, gc_abrhoa, gc_abrhob, gc_anorm_drhoa, gc_arhoa, gc_b, gc_bnorm_drhob, &
584  gc_brhob, gx_a, gx_anorm_drhoa, gx_arhoa, gx_b, gx_bnorm_drhob, gx_brhob, my_norm_drhoa, &
585  my_norm_drhob, my_rhoa, my_rhob, p_1, p_2, p_3, rho, rs, rs_a, rs_arhoa, rs_arhoarhoa, &
586  rs_b, rs_brhob, rs_brhobrhob, rsrhoa, rsrhoarhoa, rsrhoarhob, rsrhob, rsrhobrhob, s_a
587  REAL(kind=dp) :: s_a_2, s_a_21norm_drhoa, s_a_21rhoa, s_a_2norm_drhoa, &
588  s_a_2norm_drhoanorm_drhoa, s_a_2rhoa, s_a_2rhoanorm_drhoa, s_a_2rhoarhoa, s_anorm_drhoa, &
589  s_arhoa, s_arhoanorm_drhoa, s_arhoarhoa, s_avg_2, s_avg_21norm_drhoa, s_avg_21norm_drhob, &
590  s_avg_21rhoa, s_avg_21rhob, s_avg_2norm_drhoa, s_avg_2norm_drhoanorm_drhoa, &
591  s_avg_2norm_drhob, s_avg_2norm_drhobnorm_drhob, s_avg_2rhoa, s_avg_2rhoanorm_drhoa, &
592  s_avg_2rhoarhoa, s_avg_2rhob, s_avg_2rhobnorm_drhob, s_avg_2rhobrhob, s_b, s_b_2, &
593  s_b_21norm_drhob, s_b_21rhob, s_b_2norm_drhob, s_b_2norm_drhobnorm_drhob, s_b_2rhob, &
594  s_b_2rhobnorm_drhob
595  REAL(kind=dp) :: s_b_2rhobrhob, s_bnorm_drhob, s_brhob, s_brhobnorm_drhob, s_brhobrhob, &
596  scale_c, scale_x, t1, t101, t1012, t1014, t102, t1047, t1049, t105, t106, t107, t108, &
597  t110, t1107, t112, t113, t1136, t1152, t1157, t116, t1161, t1165, t117, t1172, t1173, &
598  t1175, t12, t120, t1201, t1205, t122, t1236, t125, t127, t1270, t128, t129, t1299, t13, &
599  t1321, t1324, t133, t134, t1341, t1348, t1351, t1360, t1368, t138, t1388, t139, t1394, &
600  t14, t1406, t1407, t1419, t142, t1422, t1436, t1437, t144, t1440, t1451, t1452, t1455, &
601  t1457, t1458, t147, t149, t15, t150, t151, t155, t156, t1571, t1589, t1590
602  REAL(kind=dp) :: t1593, t16, t160, t1605, t161, t162, t163, t164, t165, t166, t167, t168, &
603  t170, t1719, t173, t1738, t1753, t176, t18, t186, t188, t191, t192, t194, t196, t197, &
604  t198, t199, t2, t20, t207, t208, t209, t21, t210, t212, t216, t220, t221, t222, t223, &
605  t224, t228, t232, t235, t236, t237, t239, t243, t244, t245, t246, t25, t250, t256, t257, &
606  t258, t26, t260, t264, t265, t266, t267, t27, t271, t277, t278, t279, t28, t285, t287, &
607  t289, t29, t290, t291, t293, t294, t295, t297, t299, t3, t301, t302, t304, t31, t312, &
608  t313, t314, t315, t316, t320, t324, t327, t328, t33, t336, t337, t338
609  REAL(kind=dp) :: t339, t34, t344, t345, t346, t347, t35, t36, t365, t367, t37, t370, t371, &
610  t374, t375, t376, t377, t396, t4, t40, t410, t42, t424, t43, t431, t433, t435, t437, &
611  t438, t439, t441, t443, t445, t446, t448, t456, t457, t458, t459, t46, t460, t464, t468, &
612  t471, t472, t48, t480, t484, t485, t486, t49, t50, t51, t512, t516, t539, t543, t55, &
613  t555, t56, t560, t564, t568, t575, t576, t577, t579, t6, t60, t600, t601, t605, t606, &
614  t608, t619, t62, t621, t626, t627, t631, t632, t633, t639, t644, t646, t647, t659, t66, &
615  t661, t662, t663, t67, t671, t673, t678, t679, t68, t683, t689, t69
616  REAL(kind=dp) :: t694, t7, t707, t709, t710, t711, t719, t721, t726, t727, t73, t731, t737, &
617  t74, t742, t755, t757, t758, t759, t764, t765, t766, t771, t772, t78, t790, t793, t796, &
618  t8, t80, t811, t818, t821, t830, t838, t84, t85, t858, t86, t864, t87, t876, t877, t889, &
619  t892, t906, t907, t91, t911, t913, t914, t92, t925, t926, t929, t930, t932, t933, t94, &
620  t97, t974, t976, t98, t981, t99, t993, u_c_a, u_c_a1rhoa, u_c_ab, u_c_ab1rhoa, &
621  u_c_ab1rhob, u_c_abnorm_drhoa, u_c_abnorm_drhoanorm_drhoa, u_c_abnorm_drhoanorm_drhob, &
622  u_c_abnorm_drhob, u_c_abnorm_drhobnorm_drhob, u_c_abrhoa
623  REAL(kind=dp) :: u_c_abrhoanorm_drhoa, u_c_abrhoanorm_drhob, u_c_abrhoarhoa, u_c_abrhoarhob, &
624  u_c_abrhob, u_c_abrhobnorm_drhoa, u_c_abrhobnorm_drhob, u_c_abrhobrhob, u_c_anorm_drhoa, &
625  u_c_anorm_drhoanorm_drhoa, u_c_arhoa, u_c_arhoanorm_drhoa, u_c_arhoarhoa, u_c_b, &
626  u_c_b1rhob, u_c_bnorm_drhob, u_c_bnorm_drhobnorm_drhob, u_c_brhob, u_c_brhobnorm_drhob, &
627  u_c_brhobrhob, u_x_a, u_x_a1rhoa, u_x_anorm_drhoa, u_x_anorm_drhoanorm_drhoa, u_x_arhoa, &
628  u_x_arhoanorm_drhoa, u_x_arhoarhoa, u_x_b, u_x_b1rhob, u_x_bnorm_drhob, &
629  u_x_bnorm_drhobnorm_drhob, u_x_brhob, u_x_brhobnorm_drhob, u_x_brhobrhob
630  REAL(kind=dp), DIMENSION(10) :: coeffs
631 
632  p_1 = 0.10e1_dp
633  a_1 = 0.31091e-1_dp
634  alpha_1_1 = 0.21370e0_dp
635  beta_1_1 = 0.75957e1_dp
636  beta_2_1 = 0.35876e1_dp
637  beta_3_1 = 0.16382e1_dp
638  beta_4_1 = 0.49294e0_dp
639  p_2 = 0.10e1_dp
640  a_2 = 0.15545e-1_dp
641  alpha_1_2 = 0.20548e0_dp
642  beta_1_2 = 0.141189e2_dp
643  beta_2_2 = 0.61977e1_dp
644  beta_3_2 = 0.33662e1_dp
645  beta_4_2 = 0.62517e0_dp
646  p_3 = 0.10e1_dp
647  a_3 = 0.16887e-1_dp
648  alpha_1_3 = 0.11125e0_dp
649  beta_1_3 = 0.10357e2_dp
650  beta_2_3 = 0.36231e1_dp
651  beta_3_3 = 0.88026e0_dp
652  beta_4_3 = 0.49671e0_dp
653 
654  coeffs = b97_coeffs(param)
655  c_x_0 = coeffs(1)
656  c_x_1 = coeffs(2)
657  c_x_2 = coeffs(3)
658  c_cab_0 = coeffs(4)
659  c_cab_1 = coeffs(5)
660  c_cab_2 = coeffs(6)
661  c_css_0 = coeffs(7)
662  c_css_1 = coeffs(8)
663  c_css_2 = coeffs(9)
664 
665  scale_c = scale_c_in
666  scale_x = scale_x_in
667  IF (scale_x == -1.0_dp) scale_x = coeffs(10)
668 
669  gamma_x = 0.004_dp
670  gamma_c_ss = 0.2_dp
671  gamma_c_ab = 0.006_dp
672 
673  SELECT CASE (grad_deriv)
674  CASE default
675  t1 = 3**(0.1e1_dp/0.3e1_dp)
676  t2 = 4**(0.1e1_dp/0.3e1_dp)
677  t3 = t2**2
678  t4 = t1*t3
679  t6 = (0.1e1_dp/pi)**(0.1e1_dp/0.3e1_dp)
680 !$OMP DO
681  DO ii = 1, npoints
682  my_rhoa = max(rhoa(ii), 0.0_dp)
683  my_rhob = max(rhob(ii), 0.0_dp)
684  rho = my_rhoa + my_rhob
685  IF (rho > epsilon_rho) THEN
686  my_rhoa = max(my_rhoa, 0.5_dp*epsilon_rho)
687  my_rhob = max(my_rhob, 0.5_dp*epsilon_rho)
688  rho = my_rhoa + my_rhob
689  my_norm_drhoa = norm_drhoa(ii)
690  my_norm_drhob = norm_drhob(ii)
691  t7 = my_rhoa**(0.1e1_dp/0.3e1_dp)
692  t8 = t7*my_rhoa
693  e_lsda_x_a = -0.3e1_dp/0.8e1_dp*t4*t6*t8
694  t12 = 0.1e1_dp/t8
695  s_a = my_norm_drhoa*t12
696  t13 = s_a**2
697  t14 = gamma_x*t13
698  t15 = 0.1e1_dp + t14
699  t16 = 0.1e1_dp/t15
700  u_x_a = t14*t16
701  t18 = c_x_1 + u_x_a*c_x_2
702  gx_a = c_x_0 + u_x_a*t18
703  t20 = my_rhob**(0.1e1_dp/0.3e1_dp)
704  t21 = t20*my_rhob
705  e_lsda_x_b = -0.3e1_dp/0.8e1_dp*t4*t6*t21
706  t25 = 0.1e1_dp/t21
707  s_b = my_norm_drhob*t25
708  t26 = s_b**2
709  t27 = gamma_x*t26
710  t28 = 0.1e1_dp + t27
711  t29 = 0.1e1_dp/t28
712  u_x_b = t27*t29
713  t31 = c_x_1 + u_x_b*c_x_2
714  gx_b = c_x_0 + u_x_b*t31
715  t33 = my_rhoa - my_rhob
716  t34 = 0.1e1_dp/rho
717  chi = t33*t34
718  t35 = 0.1e1_dp/pi
719  t36 = t35*t34
720  t37 = t36**(0.1e1_dp/0.3e1_dp)
721  rs = t4*t37/0.4e1_dp
722  t40 = 0.1e1_dp + alpha_1_1*rs
723  t42 = 0.1e1_dp/a_1
724  t43 = sqrt(rs)
725  t46 = t43*rs
726  t48 = p_1 + 0.1e1_dp
727  t49 = rs**t48
728  t50 = beta_4_1*t49
729  t51 = beta_1_1*t43 + beta_2_1*rs + beta_3_1*t46 + t50
730  t55 = 0.1e1_dp + t42/t51/0.2e1_dp
731  t56 = log(t55)
732  e_c_u_0 = -0.2e1_dp*a_1*t40*t56
733  t60 = 0.1e1_dp + alpha_1_2*rs
734  t62 = 0.1e1_dp/a_2
735  t66 = p_2 + 0.1e1_dp
736  t67 = rs**t66
737  t68 = beta_4_2*t67
738  t69 = beta_1_2*t43 + beta_2_2*rs + beta_3_2*t46 + t68
739  t73 = 0.1e1_dp + t62/t69/0.2e1_dp
740  t74 = log(t73)
741  t78 = 0.1e1_dp + alpha_1_3*rs
742  t80 = 0.1e1_dp/a_3
743  t84 = p_3 + 0.1e1_dp
744  t85 = rs**t84
745  t86 = beta_4_3*t85
746  t87 = beta_1_3*t43 + beta_2_3*rs + beta_3_3*t46 + t86
747  t91 = 0.1e1_dp + t80/t87/0.2e1_dp
748  t92 = log(t91)
749  alpha_c = 0.2e1_dp*a_3*t78*t92
750  t94 = 2**(0.1e1_dp/0.3e1_dp)
751  t97 = 1/(2*t94 - 2)
752  t98 = 0.1e1_dp + chi
753  t99 = t98**(0.1e1_dp/0.3e1_dp)
754  t101 = 0.1e1_dp - chi
755  t102 = t101**(0.1e1_dp/0.3e1_dp)
756  f = (t99*t98 + t102*t101 - 0.2e1_dp)*t97
757  t105 = alpha_c*f
758  t106 = 0.9e1_dp/0.8e1_dp/t97
759  t107 = chi**2
760  t108 = t107**2
761  t110 = t106*(0.1e1_dp - t108)
762  t112 = -0.2e1_dp*a_2*t60*t74 - e_c_u_0
763  t113 = t112*f
764  epsilon_c_unif = e_c_u_0 + t105*t110 + t113*t108
765  t116 = t35/my_rhoa
766  t117 = t116**(0.1e1_dp/0.3e1_dp)
767  rs_a = t4*t117/0.4e1_dp
768  t120 = 0.1e1_dp + alpha_1_2*rs_a
769  t122 = sqrt(rs_a)
770  t125 = t122*rs_a
771  t127 = rs_a**t66
772  t128 = beta_4_2*t127
773  t129 = beta_1_2*t122 + beta_2_2*rs_a + beta_3_2*t125 + t128
774  t133 = 0.1e1_dp + t62/t129/0.2e1_dp
775  t134 = log(t133)
776  epsilon_c_unif_a = -0.2e1_dp*a_2*t120*t134
777  t138 = t35/my_rhob
778  t139 = t138**(0.1e1_dp/0.3e1_dp)
779  rs_b = t4*t139/0.4e1_dp
780  t142 = 0.1e1_dp + alpha_1_2*rs_b
781  t144 = sqrt(rs_b)
782  t147 = t144*rs_b
783  t149 = rs_b**t66
784  t150 = beta_4_2*t149
785  t151 = beta_1_2*t144 + beta_2_2*rs_b + beta_3_2*t147 + t150
786  t155 = 0.1e1_dp + t62/t151/0.2e1_dp
787  t156 = log(t155)
788  epsilon_c_unif_b = -0.2e1_dp*a_2*t142*t156
789  s_a_2 = t13
790  s_b_2 = t26
791  s_avg_2 = s_a_2/0.2e1_dp + s_b_2/0.2e1_dp
792  e_lsda_c_a = epsilon_c_unif_a*my_rhoa
793  e_lsda_c_b = epsilon_c_unif_b*my_rhob
794  t160 = gamma_c_ab*s_avg_2
795  t161 = 0.1e1_dp + t160
796  t162 = 0.1e1_dp/t161
797  u_c_ab = t160*t162
798  t163 = gamma_c_ss*s_a_2
799  t164 = 0.1e1_dp + t163
800  t165 = 0.1e1_dp/t164
801  u_c_a = t163*t165
802  t166 = gamma_c_ss*s_b_2
803  t167 = 0.1e1_dp + t166
804  t168 = 0.1e1_dp/t167
805  u_c_b = t166*t168
806  e_lsda_c_ab = epsilon_c_unif*rho - e_lsda_c_a - e_lsda_c_b
807  t170 = c_cab_1 + u_c_ab*c_cab_2
808  gc_ab = c_cab_0 + u_c_ab*t170
809  t173 = c_css_1 + u_c_a*c_css_2
810  gc_a = c_css_0 + u_c_a*t173
811  t176 = c_css_1 + u_c_b*c_css_2
812  gc_b = c_css_0 + u_c_b*t176
813 
814  IF (grad_deriv >= 0) THEN
815  exc = scale_x*(e_lsda_x_a*gx_a + e_lsda_x_b*gx_b) + scale_c &
816  *(e_lsda_c_ab*gc_ab + e_lsda_c_a*gc_a + e_lsda_c_b*gc_b)
817  e_0(ii) = e_0(ii) + exc
818  END IF
819 
820  IF (grad_deriv /= 0) THEN
821 
822  e_lsda_x_arhoa = -t4*t6*t7/0.2e1_dp
823  t186 = my_rhoa**2
824  t188 = 0.1e1_dp/t7/t186
825  s_arhoa = -0.4e1_dp/0.3e1_dp*my_norm_drhoa*t188
826  t191 = gamma_x*s_a
827  t192 = t16*s_arhoa
828  t194 = gamma_x**2
829  t196 = t194*s_a_2*s_a
830  t197 = t15**2
831  t198 = 0.1e1_dp/t197
832  t199 = t198*s_arhoa
833  u_x_arhoa = 0.2e1_dp*t191*t192 - 0.2e1_dp*t196*t199
834  gx_arhoa = u_x_arhoa*t18 + u_x_a*u_x_arhoa*c_x_2
835  t207 = rho**2
836  t208 = 0.1e1_dp/t207
837  t209 = t33*t208
838  chirhoa = t34 - t209
839  t210 = t37**2
840  t212 = 0.1e1_dp/t210*t35
841  rsrhoa = -t4*t212*t208/0.12e2_dp
842  t216 = a_1*alpha_1_1
843  t220 = t51**2
844  t221 = 0.1e1_dp/t220
845  t222 = t40*t221
846  t223 = 0.1e1_dp/t43
847  t224 = beta_1_1*t223
848  t228 = beta_3_1*t43
849  t232 = 0.1e1_dp/rs
850  t235 = t224*rsrhoa/0.2e1_dp + beta_2_1*rsrhoa + 0.3e1_dp/ &
851  0.2e1_dp*t228*rsrhoa + t50*t48*rsrhoa*t232
852  t236 = 0.1e1_dp/t55
853  t237 = t235*t236
854  e_c_u_0rhoa = -0.2e1_dp*t216*rsrhoa*t56 + t222*t237
855  t239 = a_2*alpha_1_2
856  t243 = t69**2
857  t244 = 0.1e1_dp/t243
858  t245 = t60*t244
859  t246 = beta_1_2*t223
860  t250 = beta_3_2*t43
861  t256 = t246*rsrhoa/0.2e1_dp + beta_2_2*rsrhoa + 0.3e1_dp/ &
862  0.2e1_dp*t250*rsrhoa + t68*t66*rsrhoa*t232
863  t257 = 0.1e1_dp/t73
864  t258 = t256*t257
865  e_c_u_1rhoa = -0.2e1_dp*t239*rsrhoa*t74 + t245*t258
866  t260 = a_3*alpha_1_3
867  t264 = t87**2
868  t265 = 0.1e1_dp/t264
869  t266 = t78*t265
870  t267 = beta_1_3*t223
871  t271 = beta_3_3*t43
872  t277 = t267*rsrhoa/0.2e1_dp + beta_2_3*rsrhoa + 0.3e1_dp/ &
873  0.2e1_dp*t271*rsrhoa + t86*t84*rsrhoa*t232
874  t278 = 0.1e1_dp/t91
875  t279 = t277*t278
876  alpha_crhoa = 0.2e1_dp*t260*rsrhoa*t92 - t266*t279
877  frhoa = (0.4e1_dp/0.3e1_dp*t99*chirhoa - 0.4e1_dp/0.3e1_dp &
878  *t102*chirhoa)*t97
879  t285 = alpha_crhoa*f
880  t287 = alpha_c*frhoa
881  t289 = t107*chi
882  t290 = t106*t289
883  t291 = t290*chirhoa
884  t293 = 0.4e1_dp*t105*t291
885  t294 = e_c_u_1rhoa - e_c_u_0rhoa
886  t295 = t294*f
887  t297 = t112*frhoa
888  t299 = t289*chirhoa
889  t301 = 0.4e1_dp*t113*t299
890  epsilon_c_unifrhoa = e_c_u_0rhoa + t285*t110 + t287*t110 - &
891  t293 + t295*t108 + t297*t108 + t301
892  t302 = t117**2
893  t304 = 0.1e1_dp/t302*t35
894  rs_arhoa = -t4*t304/t186/0.12e2_dp
895  t312 = t129**2
896  t313 = 0.1e1_dp/t312
897  t314 = t120*t313
898  t315 = 0.1e1_dp/t122
899  t316 = beta_1_2*t315
900  t320 = beta_3_2*t122
901  t324 = 0.1e1_dp/rs_a
902  t327 = t316*rs_arhoa/0.2e1_dp + beta_2_2*rs_arhoa + 0.3e1_dp &
903  /0.2e1_dp*t320*rs_arhoa + t128*t66*rs_arhoa*t324
904  t328 = 0.1e1_dp/t133
905  epsilon_c_unif_arhoa = -0.2e1_dp*t239*rs_arhoa*t134 + t314* &
906  t327*t328
907  s_a_2rhoa = 0.2e1_dp*s_a*s_arhoa
908  s_avg_2rhoa = s_a_2rhoa/0.2e1_dp
909  e_lsda_c_arhoa = epsilon_c_unif_arhoa*my_rhoa + epsilon_c_unif_a
910  t336 = gamma_c_ab**2
911  t337 = t336*s_avg_2
912  t338 = t161**2
913  t339 = 0.1e1_dp/t338
914  u_c_abrhoa = gamma_c_ab*s_avg_2rhoa*t162 - t337*t339*s_avg_2rhoa
915  t344 = gamma_c_ss**2
916  t345 = t344*s_a_2
917  t346 = t164**2
918  t347 = 0.1e1_dp/t346
919  u_c_arhoa = gamma_c_ss*s_a_2rhoa*t165 - t345*t347*s_a_2rhoa
920  e_lsda_c_abrhoa = epsilon_c_unifrhoa*rho + epsilon_c_unif - &
921  e_lsda_c_arhoa
922  gc_abrhoa = u_c_abrhoa*t170 + u_c_ab*u_c_abrhoa*c_cab_2
923  gc_arhoa = u_c_arhoa*t173 + u_c_a*u_c_arhoa*c_css_2
924 
925  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
926  exc_rhoa = scale_x*(e_lsda_x_arhoa*gx_a + e_lsda_x_a* &
927  gx_arhoa) + scale_c*(e_lsda_c_abrhoa*gc_ab + e_lsda_c_ab* &
928  gc_abrhoa + e_lsda_c_arhoa*gc_a + e_lsda_c_a*gc_arhoa)
929  e_ra(ii) = e_ra(ii) + exc_rhoa
930  END IF
931 
932  e_lsda_x_brhob = -t4*t6*t20/0.2e1_dp
933  t365 = my_rhob**2
934  t367 = 0.1e1_dp/t20/t365
935  s_brhob = -0.4e1_dp/0.3e1_dp*my_norm_drhob*t367
936  t370 = gamma_x*s_b
937  t371 = t29*s_brhob
938  t374 = t194*s_b_2*s_b
939  t375 = t28**2
940  t376 = 0.1e1_dp/t375
941  t377 = t376*s_brhob
942  u_x_brhob = 0.2e1_dp*t370*t371 - 0.2e1_dp*t374*t377
943  gx_brhob = u_x_brhob*t31 + u_x_b*u_x_brhob*c_x_2
944  chirhob = -t34 - t209
945  rsrhob = rsrhoa
946  t396 = t224*rsrhob/0.2e1_dp + beta_2_1*rsrhob + 0.3e1_dp/ &
947  0.2e1_dp*t228*rsrhob + t50*t48*rsrhob*t232
948  e_c_u_0rhob = -0.2e1_dp*t216*rsrhob*t56 + t222*t396*t236
949  t410 = t246*rsrhob/0.2e1_dp + beta_2_2*rsrhob + 0.3e1_dp/ &
950  0.2e1_dp*t250*rsrhob + t68*t66*rsrhob*t232
951  e_c_u_1rhob = -0.2e1_dp*t239*rsrhob*t74 + t245*t410*t257
952  t424 = t267*rsrhob/0.2e1_dp + beta_2_3*rsrhob + 0.3e1_dp/ &
953  0.2e1_dp*t271*rsrhob + t86*t84*rsrhob*t232
954  alpha_crhob = 0.2e1_dp*t260*rsrhob*t92 - t266*t424*t278
955  frhob = (0.4e1_dp/0.3e1_dp*t99*chirhob - 0.4e1_dp/0.3e1_dp &
956  *t102*chirhob)*t97
957  t431 = alpha_crhob*f
958  t433 = alpha_c*frhob
959  t435 = t290*chirhob
960  t437 = 0.4e1_dp*t105*t435
961  t438 = e_c_u_1rhob - e_c_u_0rhob
962  t439 = t438*f
963  t441 = t112*frhob
964  t443 = t289*chirhob
965  t445 = 0.4e1_dp*t113*t443
966  epsilon_c_unifrhob = e_c_u_0rhob + t431*t110 + t433*t110 - &
967  t437 + t439*t108 + t441*t108 + t445
968  t446 = t139**2
969  t448 = 0.1e1_dp/t446*t35
970  rs_brhob = -t4*t448/t365/0.12e2_dp
971  t456 = t151**2
972  t457 = 0.1e1_dp/t456
973  t458 = t142*t457
974  t459 = 0.1e1_dp/t144
975  t460 = beta_1_2*t459
976  t464 = beta_3_2*t144
977  t468 = 0.1e1_dp/rs_b
978  t471 = t460*rs_brhob/0.2e1_dp + beta_2_2*rs_brhob + 0.3e1_dp &
979  /0.2e1_dp*rs_brhob*t464 + t150*t66*rs_brhob*t468
980  t472 = 0.1e1_dp/t155
981  epsilon_c_unif_brhob = -0.2e1_dp*t239*rs_brhob*t156 + t458* &
982  t471*t472
983  s_b_2rhob = 0.2e1_dp*s_b*s_brhob
984  s_avg_2rhob = s_b_2rhob/0.2e1_dp
985  e_lsda_c_brhob = epsilon_c_unif_brhob*my_rhob + epsilon_c_unif_b
986  t480 = t339*s_avg_2rhob
987  u_c_abrhob = gamma_c_ab*s_avg_2rhob*t162 - t337*t480
988  t484 = t344*s_b_2
989  t485 = t167**2
990  t486 = 0.1e1_dp/t485
991  u_c_brhob = gamma_c_ss*s_b_2rhob*t168 - t484*t486*s_b_2rhob
992  e_lsda_c_abrhob = epsilon_c_unifrhob*rho + epsilon_c_unif - &
993  e_lsda_c_brhob
994  gc_abrhob = u_c_abrhob*t170 + u_c_ab*u_c_abrhob*c_cab_2
995  gc_brhob = u_c_brhob*t176 + u_c_b*u_c_brhob*c_css_2
996 
997  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
998  exc_rhob = scale_x*(e_lsda_x_brhob*gx_b + e_lsda_x_b* &
999  gx_brhob) + scale_c*(e_lsda_c_abrhob*gc_ab + e_lsda_c_ab* &
1000  gc_abrhob + e_lsda_c_brhob*gc_b + e_lsda_c_b*gc_brhob)
1001  e_rb(ii) = e_rb(ii) + exc_rhob
1002  END IF
1003 
1004  s_anorm_drhoa = t12
1005  u_x_anorm_drhoa = 0.2e1_dp*t191*t16*s_anorm_drhoa - 0.2e1_dp &
1006  *t196*t198*s_anorm_drhoa
1007  gx_anorm_drhoa = u_x_anorm_drhoa*t18 + u_x_a*u_x_anorm_drhoa*c_x_2
1008  s_a_2norm_drhoa = 0.2e1_dp*s_a*s_anorm_drhoa
1009  s_avg_2norm_drhoa = s_a_2norm_drhoa/0.2e1_dp
1010  t512 = t339*s_avg_2norm_drhoa
1011  u_c_abnorm_drhoa = gamma_c_ab*s_avg_2norm_drhoa*t162 - t337*t512
1012  t516 = t347*s_a_2norm_drhoa
1013  u_c_anorm_drhoa = gamma_c_ss*s_a_2norm_drhoa*t165 - t345*t516
1014  gc_abnorm_drhoa = u_c_abnorm_drhoa*t170 + u_c_ab* &
1015  u_c_abnorm_drhoa*c_cab_2
1016  gc_anorm_drhoa = u_c_anorm_drhoa*t173 + u_c_a*u_c_anorm_drhoa &
1017  *c_css_2
1018 
1019  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
1020  exc_norm_drhoa = scale_x*e_lsda_x_a*gx_anorm_drhoa + scale_c* &
1021  (e_lsda_c_ab*gc_abnorm_drhoa + e_lsda_c_a*gc_anorm_drhoa)
1022  e_ndra(ii) = e_ndra(ii) + exc_norm_drhoa
1023  END IF
1024 
1025  s_bnorm_drhob = t25
1026  u_x_bnorm_drhob = 0.2e1_dp*t370*t29*s_bnorm_drhob - 0.2e1_dp &
1027  *t374*t376*s_bnorm_drhob
1028  gx_bnorm_drhob = u_x_bnorm_drhob*t31 + u_x_b*u_x_bnorm_drhob*c_x_2
1029  s_b_2norm_drhob = 0.2e1_dp*s_b*s_bnorm_drhob
1030  s_avg_2norm_drhob = s_b_2norm_drhob/0.2e1_dp
1031  t539 = t339*s_avg_2norm_drhob
1032  u_c_abnorm_drhob = gamma_c_ab*s_avg_2norm_drhob*t162 - t337*t539
1033  t543 = t486*s_b_2norm_drhob
1034  u_c_bnorm_drhob = gamma_c_ss*s_b_2norm_drhob*t168 - t484*t543
1035  gc_abnorm_drhob = u_c_abnorm_drhob*t170 + u_c_ab* &
1036  u_c_abnorm_drhob*c_cab_2
1037  gc_bnorm_drhob = u_c_bnorm_drhob*t176 + u_c_b*u_c_bnorm_drhob &
1038  *c_css_2
1039 
1040  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
1041  exc_norm_drhob = scale_x*e_lsda_x_b*gx_bnorm_drhob + scale_c* &
1042  (e_lsda_c_ab*gc_abnorm_drhob + e_lsda_c_b*gc_bnorm_drhob)
1043  e_ndrb(ii) = e_ndrb(ii) + exc_norm_drhob
1044  END IF
1045 
1046  IF (grad_deriv > 1 .OR. grad_deriv < -1) THEN
1047  t555 = t7**2
1048  t560 = t186*my_rhoa
1049  s_arhoarhoa = 0.28e2_dp/0.9e1_dp*my_norm_drhoa/t7/t560
1050  t564 = s_arhoa**2
1051  t568 = t194*s_a_2
1052  t575 = t194*gamma_x
1053  t576 = s_a_2**2
1054  t577 = t575*t576
1055  t579 = 0.1e1_dp/t197/t15
1056  u_x_arhoarhoa = 0.2e1_dp*gamma_x*t564*t16 - 0.10e2_dp*t568 &
1057  *t198*t564 + 0.2e1_dp*t191*t16*s_arhoarhoa + 0.8e1_dp* &
1058  t577*t579*t564 - 0.2e1_dp*t196*t198*s_arhoarhoa
1059  u_x_a1rhoa = u_x_arhoa
1060  t600 = 0.1e1_dp/t207/rho
1061  t601 = t33*t600
1062  chirhoarhoa = -0.2e1_dp*t208 + 0.2e1_dp*t601
1063  t605 = 0.3141592654e1_dp**2
1064  t606 = 0.1e1_dp/t605
1065  t608 = t207**2
1066  rsrhoarhoa = -t4/t210/t36*t606/t608/0.18e2_dp + &
1067  t4*t212*t600/0.6e1_dp
1068  t619 = alpha_1_1*rsrhoa
1069  t621 = t221*t235*t236
1070  t626 = t40/t220/t51
1071  t627 = t235**2
1072  t631 = 0.1e1_dp/t46
1073  t632 = beta_1_1*t631
1074  t633 = rsrhoa**2
1075  t639 = beta_3_1*t223
1076  t644 = t48**2
1077  t646 = rs**2
1078  t647 = 0.1e1_dp/t646
1079  t659 = t220**2
1080  t661 = t40/t659
1081  t662 = t55**2
1082  t663 = 0.1e1_dp/t662
1083  e_c_u_0rhoarhoa = -0.2e1_dp*t216*rsrhoarhoa*t56 + 0.2e1_dp* &
1084  t619*t621 - 0.2e1_dp*t626*t627*t236 + t222*(-t632*t633 &
1085  /0.4e1_dp + t224*rsrhoarhoa/0.2e1_dp + beta_2_1*rsrhoarhoa + &
1086  0.3e1_dp/0.4e1_dp*t639*t633 + 0.3e1_dp/0.2e1_dp*t228* &
1087  rsrhoarhoa + t50*t644*t633*t647 + t50*t48*rsrhoarhoa* &
1088  t232 - t50*t48*t633*t647)*t236 + t661*t627*t663*t42/ &
1089  0.2e1_dp
1090  e_c_u_01rhoa = e_c_u_0rhoa
1091  t671 = alpha_1_2*rsrhoa
1092  t673 = t244*t256*t257
1093  t678 = t60/t243/t69
1094  t679 = t256**2
1095  t683 = beta_1_2*t631
1096  t689 = beta_3_2*t223
1097  t694 = t66**2
1098  t707 = t243**2
1099  t709 = t60/t707
1100  t710 = t73**2
1101  t711 = 0.1e1_dp/t710
1102  t719 = alpha_1_3*rsrhoa
1103  t721 = t265*t277*t278
1104  t726 = t78/t264/t87
1105  t727 = t277**2
1106  t731 = beta_1_3*t631
1107  t737 = beta_3_3*t223
1108  t742 = t84**2
1109  t755 = t264**2
1110  t757 = t78/t755
1111  t758 = t91**2
1112  t759 = 0.1e1_dp/t758
1113  alpha_c1rhoa = alpha_crhoa
1114  t764 = t99**2
1115  t765 = 0.1e1_dp/t764
1116  t766 = chirhoa**2
1117  t771 = t102**2
1118  t772 = 0.1e1_dp/t771
1119  frhoarhoa = (0.4e1_dp/0.9e1_dp*t765*t766 + 0.4e1_dp/ &
1120  0.3e1_dp*t99*chirhoarhoa + 0.4e1_dp/0.9e1_dp*t772*t766 - &
1121  0.4e1_dp/0.3e1_dp*t102*chirhoarhoa)*t97
1122  f1rhoa = frhoa
1123  t790 = alpha_c1rhoa*f
1124  t793 = alpha_c*f1rhoa
1125  t796 = t106*t107
1126  t811 = e_c_u_1rhoa - e_c_u_01rhoa
1127  t818 = t811*f
1128  t821 = t112*f1rhoa
1129  t830 = -0.4e1_dp*t105*t290*chirhoarhoa + (-0.2e1_dp*t239* &
1130  rsrhoarhoa*t74 + 0.2e1_dp*t671*t673 - 0.2e1_dp*t678*t679 &
1131  *t257 + t245*(-t683*t633/0.4e1_dp + t246*rsrhoarhoa/ &
1132  0.2e1_dp + beta_2_2*rsrhoarhoa + 0.3e1_dp/0.4e1_dp*t689*t633 &
1133  + 0.3e1_dp/0.2e1_dp*t250*rsrhoarhoa + t68*t694*t633* &
1134  t647 + t68*t66*rsrhoarhoa*t232 - t68*t66*t633*t647)* &
1135  t257 + t709*t679*t711*t62/0.2e1_dp - e_c_u_0rhoarhoa)*f* &
1136  t108 + t294*f1rhoa*t108 + 0.4e1_dp*t295*t299 + t811*frhoa &
1137  *t108 + t112*frhoarhoa*t108 + 0.4e1_dp*t297*t299 + 0.4e1_dp &
1138  *t818*t299 + 0.4e1_dp*t821*t299 + 0.12e2_dp*t113*t107* &
1139  t766 + 0.4e1_dp*t113*t289*chirhoarhoa
1140  epsilon_c_unif1rhoa = e_c_u_01rhoa + t790*t110 + t793*t110 - &
1141  t293 + t818*t108 + t821*t108 + t301
1142  t838 = t186**2
1143  rs_arhoarhoa = -t4/t302/t116*t606/t838/0.18e2_dp + &
1144  t4*t304/t560/0.6e1_dp
1145  t858 = t327**2
1146  t864 = rs_arhoa**2
1147  t876 = rs_a**2
1148  t877 = 0.1e1_dp/t876
1149  t889 = t312**2
1150  t892 = t133**2
1151  epsilon_c_unif_a1rhoa = epsilon_c_unif_arhoa
1152  s_a_2rhoarhoa = 0.2e1_dp*t564 + 0.2e1_dp*s_a*s_arhoarhoa
1153  s_a_21rhoa = s_a_2rhoa
1154  s_avg_2rhoarhoa = s_a_2rhoarhoa/0.2e1_dp
1155  s_avg_21rhoa = s_a_21rhoa/0.2e1_dp
1156  e_lsda_c_arhoarhoa = (-0.2e1_dp*t239*rs_arhoarhoa*t134 + &
1157  0.2e1_dp*alpha_1_2*rs_arhoa*t313*t327*t328 - 0.2e1_dp* &
1158  t120/t312/t129*t858*t328 + t314*(-beta_1_2/t125*t864/ &
1159  0.4e1_dp + t316*rs_arhoarhoa/0.2e1_dp + beta_2_2*rs_arhoarhoa &
1160  + 0.3e1_dp/0.4e1_dp*beta_3_2*t315*t864 + 0.3e1_dp/ &
1161  0.2e1_dp*t320*rs_arhoarhoa + t128*t694*t864*t877 + t128* &
1162  t66*rs_arhoarhoa*t324 - t128*t66*t864*t877)*t328 + t120 &
1163  /t889*t858/t892*t62/0.2e1_dp)*my_rhoa + epsilon_c_unif_arhoa &
1164  + epsilon_c_unif_a1rhoa
1165  e_lsda_c_a1rhoa = epsilon_c_unif_a1rhoa*my_rhoa + epsilon_c_unif_a
1166  t906 = t336*s_avg_2rhoa
1167  t907 = t339*s_avg_21rhoa
1168  t911 = t336*gamma_c_ab*s_avg_2
1169  t913 = 0.1e1_dp/t338/t161
1170  t914 = t913*s_avg_2rhoa
1171  u_c_abrhoarhoa = gamma_c_ab*s_avg_2rhoarhoa*t162 - 0.2e1_dp* &
1172  t906*t907 + 0.2e1_dp*t911*t914*s_avg_21rhoa - t337*t339* &
1173  s_avg_2rhoarhoa
1174  u_c_ab1rhoa = gamma_c_ab*s_avg_21rhoa*t162 - t337*t907
1175  t925 = t344*s_a_2rhoa
1176  t926 = t347*s_a_21rhoa
1177  t929 = t344*gamma_c_ss
1178  t930 = t929*s_a_2
1179  t932 = 0.1e1_dp/t346/t164
1180  t933 = t932*s_a_2rhoa
1181  u_c_arhoarhoa = gamma_c_ss*s_a_2rhoarhoa*t165 - 0.2e1_dp* &
1182  t925*t926 + 0.2e1_dp*t930*t933*s_a_21rhoa - t345*t347* &
1183  s_a_2rhoarhoa
1184  u_c_a1rhoa = gamma_c_ss*s_a_21rhoa*t165 - t345*t926
1185  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1186  exc_rhoa_rhoa = scale_x*(-t4*t6/t555*gx_a/0.6e1_dp &
1187  + e_lsda_x_arhoa*(u_x_a1rhoa*t18 + u_x_a*u_x_a1rhoa*c_x_2) &
1188  + e_lsda_x_arhoa*gx_arhoa + e_lsda_x_a*(u_x_arhoarhoa*t18 + &
1189  0.2e1_dp*u_x_arhoa*u_x_a1rhoa*c_x_2 + u_x_a*u_x_arhoarhoa* &
1190  c_x_2)) + scale_c*(((e_c_u_0rhoarhoa + (0.2e1_dp*t260* &
1191  rsrhoarhoa*t92 - 0.2e1_dp*t719*t721 + 0.2e1_dp*t726*t727* &
1192  t278 - t266*(-t731*t633/0.4e1_dp + t267*rsrhoarhoa/ &
1193  0.2e1_dp + beta_2_3*rsrhoarhoa + 0.3e1_dp/0.4e1_dp*t737*t633 &
1194  + 0.3e1_dp/0.2e1_dp*t271*rsrhoarhoa + t86*t742*t633* &
1195  t647 + t86*t84*rsrhoarhoa*t232 - t86*t84*t633*t647)* &
1196  t278 - t757*t727*t759*t80/0.2e1_dp)*f*t110 + alpha_crhoa &
1197  *f1rhoa*t110 - 0.4e1_dp*t285*t291 + alpha_c1rhoa*frhoa* &
1198  t110 + alpha_c*frhoarhoa*t110 - 0.4e1_dp*t287*t291 - &
1199  0.4e1_dp*t790*t291 - 0.4e1_dp*t793*t291 - 0.12e2_dp*t105* &
1200  t796*t766 + t830)*rho + epsilon_c_unifrhoa + &
1201  epsilon_c_unif1rhoa - e_lsda_c_arhoarhoa)*gc_ab + e_lsda_c_abrhoa &
1202  *(u_c_ab1rhoa*t170 + u_c_ab*u_c_ab1rhoa*c_cab_2) + ( &
1203  epsilon_c_unif1rhoa*rho + epsilon_c_unif - e_lsda_c_a1rhoa)* &
1204  gc_abrhoa + e_lsda_c_ab*(u_c_abrhoarhoa*t170 + 0.2e1_dp* &
1205  u_c_abrhoa*u_c_ab1rhoa*c_cab_2 + u_c_ab*u_c_abrhoarhoa* &
1206  c_cab_2) + e_lsda_c_arhoarhoa*gc_a + e_lsda_c_arhoa*(u_c_a1rhoa &
1207  *t173 + u_c_a*u_c_a1rhoa*c_css_2) + e_lsda_c_a1rhoa*gc_arhoa &
1208  + e_lsda_c_a*(u_c_arhoarhoa*t173 + 0.2e1_dp*u_c_arhoa* &
1209  u_c_a1rhoa*c_css_2 + u_c_a*u_c_arhoarhoa*c_css_2))
1210  e_ra_ra(ii) = e_ra_ra(ii) + exc_rhoa_rhoa
1211  END IF
1212 
1213  chirhoarhob = 0.2e1_dp*t601
1214  rsrhoarhob = rsrhoarhoa
1215  t974 = t221*t396*t236
1216  t976 = alpha_1_1*rsrhob
1217  t981 = rsrhoa*rsrhob
1218  t993 = rsrhob*t647*rsrhoa
1219  e_c_u_0rhoarhob = -0.2e1_dp*t216*rsrhoarhob*t56 + t619* &
1220  t974 + t976*t621 - 0.2e1_dp*t626*t237*t396 + t222*(-t632* &
1221  t981/0.4e1_dp + t224*rsrhoarhob/0.2e1_dp + beta_2_1* &
1222  rsrhoarhob + 0.3e1_dp/0.4e1_dp*t639*t981 + 0.3e1_dp/0.2e1_dp &
1223  *t228*rsrhoarhob + t50*t644*t993 + t50*t48*rsrhoarhob* &
1224  t232 - t50*t48*t993)*t236 + t661*t235*t663*t42*t396/ &
1225  0.2e1_dp
1226  t1012 = t244*t410*t257
1227  t1014 = alpha_1_2*rsrhob
1228  t1047 = t265*t424*t278
1229  t1049 = alpha_1_3*rsrhob
1230  frhoarhob = (0.4e1_dp/0.9e1_dp*t765*chirhoa*chirhob + &
1231  0.4e1_dp/0.3e1_dp*t99*chirhoarhob + 0.4e1_dp/0.9e1_dp*t772 &
1232  *chirhoa*chirhob - 0.4e1_dp/0.3e1_dp*t102*chirhoarhob)* &
1233  t97
1234  t1107 = t107*chirhoa*chirhob
1235  t1136 = -0.4e1_dp*t105*t290*chirhoarhob + (-0.2e1_dp*t239 &
1236  *rsrhoarhob*t74 + t671*t1012 + t1014*t673 - 0.2e1_dp*t678* &
1237  t258*t410 + t245*(-t683*t981/0.4e1_dp + t246*rsrhoarhob/ &
1238  0.2e1_dp + beta_2_2*rsrhoarhob + 0.3e1_dp/0.4e1_dp*t689* &
1239  t981 + 0.3e1_dp/0.2e1_dp*t250*rsrhoarhob + t68*t694*t993 + &
1240  t68*t66*rsrhoarhob*t232 - t68*t66*t993)*t257 + t709* &
1241  t256*t711*t62*t410/0.2e1_dp - e_c_u_0rhoarhob)*f*t108 + &
1242  t294*frhob*t108 + 0.4e1_dp*t295*t443 + t438*frhoa*t108 + &
1243  t112*frhoarhob*t108 + 0.4e1_dp*t297*t443 + 0.4e1_dp*t439 &
1244  *t299 + 0.4e1_dp*t441*t299 + 0.12e2_dp*t113*t1107 + &
1245  0.4e1_dp*t113*t289*chirhoarhob
1246  u_c_abrhoarhob = -0.2e1_dp*t906*t480 + 0.2e1_dp*t911*t914 &
1247  *s_avg_2rhob
1248 
1249  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1250  exc_rhoa_rhob = scale_c*(((e_c_u_0rhoarhob + (0.2e1_dp*t260* &
1251  rsrhoarhob*t92 - t719*t1047 - t1049*t721 + 0.2e1_dp*t726* &
1252  t279*t424 - t266*(-t731*t981/0.4e1_dp + t267*rsrhoarhob/ &
1253  0.2e1_dp + beta_2_3*rsrhoarhob + 0.3e1_dp/0.4e1_dp*t737*t981 &
1254  + 0.3e1_dp/0.2e1_dp*t271*rsrhoarhob + t86*t742*t993 + t86 &
1255  *t84*rsrhoarhob*t232 - t86*t84*t993)*t278 - t757*t277 &
1256  *t759*t80*t424/0.2e1_dp)*f*t110 + alpha_crhoa*frhob* &
1257  t110 - 0.4e1_dp*t285*t435 + alpha_crhob*frhoa*t110 + alpha_c &
1258  *frhoarhob*t110 - 0.4e1_dp*t287*t435 - 0.4e1_dp*t431* &
1259  t291 - 0.4e1_dp*t433*t291 - 0.12e2_dp*t105*t106*t1107 + &
1260  t1136)*rho + epsilon_c_unifrhoa + epsilon_c_unifrhob)*gc_ab + &
1261  e_lsda_c_abrhoa*gc_abrhob + e_lsda_c_abrhob*gc_abrhoa + &
1262  e_lsda_c_ab*(u_c_abrhoarhob*t170 + 0.2e1_dp*u_c_abrhoa* &
1263  u_c_abrhob*c_cab_2 + u_c_ab*u_c_abrhoarhob*c_cab_2))
1264  e_ra_rb(ii) = e_ra_rb(ii) + exc_rhoa_rhob
1265  END IF
1266 
1267  t1152 = t20**2
1268  t1157 = t365*my_rhob
1269  s_brhobrhob = 0.28e2_dp/0.9e1_dp*my_norm_drhob/t20/t1157
1270  t1161 = s_brhob**2
1271  t1165 = t194*s_b_2
1272  t1172 = s_b_2**2
1273  t1173 = t575*t1172
1274  t1175 = 0.1e1_dp/t375/t28
1275  u_x_brhobrhob = 0.2e1_dp*gamma_x*t1161*t29 - 0.10e2_dp* &
1276  t1165*t376*t1161 + 0.2e1_dp*t370*t29*s_brhobrhob + &
1277  0.8e1_dp*t1173*t1175*t1161 - 0.2e1_dp*t374*t376* &
1278  s_brhobrhob
1279  u_x_b1rhob = u_x_brhob
1280  chirhobrhob = 0.2e1_dp*t208 + 0.2e1_dp*t601
1281  rsrhobrhob = rsrhoarhob
1282  t1201 = t396**2
1283  t1205 = rsrhob**2
1284  e_c_u_0rhobrhob = -0.2e1_dp*t216*rsrhobrhob*t56 + 0.2e1_dp* &
1285  t976*t974 - 0.2e1_dp*t626*t1201*t236 + t222*(-t632* &
1286  t1205/0.4e1_dp + t224*rsrhobrhob/0.2e1_dp + beta_2_1* &
1287  rsrhobrhob + 0.3e1_dp/0.4e1_dp*t639*t1205 + 0.3e1_dp/ &
1288  0.2e1_dp*t228*rsrhobrhob + t50*t644*t1205*t647 + t50*t48 &
1289  *rsrhobrhob*t232 - t50*t48*t1205*t647)*t236 + t661* &
1290  t1201*t663*t42/0.2e1_dp
1291  e_c_u_01rhob = e_c_u_0rhob
1292  t1236 = t410**2
1293  t1270 = t424**2
1294  alpha_c1rhob = alpha_crhob
1295  t1299 = chirhob**2
1296  frhobrhob = (0.4e1_dp/0.9e1_dp*t765*t1299 + 0.4e1_dp/ &
1297  0.3e1_dp*t99*chirhobrhob + 0.4e1_dp/0.9e1_dp*t772*t1299 - &
1298  0.4e1_dp/0.3e1_dp*t102*chirhobrhob)*t97
1299  f1rhob = frhob
1300  t1321 = alpha_c1rhob*f
1301  t1324 = alpha_c*f1rhob
1302  t1341 = e_c_u_1rhob - e_c_u_01rhob
1303  t1348 = t1341*f
1304  t1351 = t112*f1rhob
1305  t1360 = -0.4e1_dp*t105*t290*chirhobrhob + (-0.2e1_dp*t239 &
1306  *rsrhobrhob*t74 + 0.2e1_dp*t1014*t1012 - 0.2e1_dp*t678* &
1307  t1236*t257 + t245*(-t683*t1205/0.4e1_dp + t246*rsrhobrhob &
1308  /0.2e1_dp + beta_2_2*rsrhobrhob + 0.3e1_dp/0.4e1_dp*t689* &
1309  t1205 + 0.3e1_dp/0.2e1_dp*t250*rsrhobrhob + t68*t694*t1205 &
1310  *t647 + t68*t66*rsrhobrhob*t232 - t68*t66*t1205*t647) &
1311  *t257 + t709*t1236*t711*t62/0.2e1_dp - e_c_u_0rhobrhob)*f &
1312  *t108 + t438*f1rhob*t108 + 0.4e1_dp*t439*t443 + t1341* &
1313  frhob*t108 + t112*frhobrhob*t108 + 0.4e1_dp*t441*t443 + &
1314  0.4e1_dp*t1348*t443 + 0.4e1_dp*t1351*t443 + 0.12e2_dp*t113 &
1315  *t107*t1299 + 0.4e1_dp*t113*t289*chirhobrhob
1316  epsilon_c_unif1rhob = e_c_u_01rhob + t1321*t110 + t1324*t110 - &
1317  t437 + t1348*t108 + t1351*t108 + t445
1318  t1368 = t365**2
1319  rs_brhobrhob = -t4/t446/t138*t606/t1368/0.18e2_dp &
1320  + t4*t448/t1157/0.6e1_dp
1321  t1388 = t471**2
1322  t1394 = rs_brhob**2
1323  t1406 = rs_b**2
1324  t1407 = 0.1e1_dp/t1406
1325  t1419 = t456**2
1326  t1422 = t155**2
1327  epsilon_c_unif_b1rhob = epsilon_c_unif_brhob
1328  s_b_2rhobrhob = 0.2e1_dp*t1161 + 0.2e1_dp*s_b*s_brhobrhob
1329  s_b_21rhob = s_b_2rhob
1330  s_avg_2rhobrhob = s_b_2rhobrhob/0.2e1_dp
1331  s_avg_21rhob = s_b_21rhob/0.2e1_dp
1332  e_lsda_c_brhobrhob = (-0.2e1_dp*t239*rs_brhobrhob*t156 + &
1333  0.2e1_dp*alpha_1_2*rs_brhob*t457*t471*t472 - 0.2e1_dp* &
1334  t142/t456/t151*t1388*t472 + t458*(-beta_1_2/t147*t1394 &
1335  /0.4e1_dp + t460*rs_brhobrhob/0.2e1_dp + beta_2_2* &
1336  rs_brhobrhob + 0.3e1_dp/0.4e1_dp*beta_3_2*t459*t1394 + &
1337  0.3e1_dp/0.2e1_dp*t464*rs_brhobrhob + t150*t694*t1394* &
1338  t1407 + t150*t66*rs_brhobrhob*t468 - t150*t66*t1394* &
1339  t1407)*t472 + t142/t1419*t1388/t1422*t62/0.2e1_dp)* &
1340  my_rhob + epsilon_c_unif_brhob + epsilon_c_unif_b1rhob
1341  e_lsda_c_b1rhob = epsilon_c_unif_b1rhob*my_rhob + epsilon_c_unif_b
1342  t1436 = t336*s_avg_2rhob
1343  t1437 = t339*s_avg_21rhob
1344  t1440 = t913*s_avg_2rhob
1345  u_c_abrhobrhob = gamma_c_ab*s_avg_2rhobrhob*t162 - 0.2e1_dp* &
1346  t1436*t1437 + 0.2e1_dp*t911*t1440*s_avg_21rhob - t337*t339 &
1347  *s_avg_2rhobrhob
1348  u_c_ab1rhob = gamma_c_ab*s_avg_21rhob*t162 - t337*t1437
1349  t1451 = t344*s_b_2rhob
1350  t1452 = t486*s_b_21rhob
1351  t1455 = t929*s_b_2
1352  t1457 = 0.1e1_dp/t485/t167
1353  t1458 = t1457*s_b_2rhob
1354  u_c_brhobrhob = gamma_c_ss*s_b_2rhobrhob*t168 - 0.2e1_dp* &
1355  t1451*t1452 + 0.2e1_dp*t1455*t1458*s_b_21rhob - t484*t486 &
1356  *s_b_2rhobrhob
1357  u_c_b1rhob = gamma_c_ss*s_b_21rhob*t168 - t484*t1452
1358 
1359  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1360  exc_rhob_rhob = scale_x*(-t4*t6/t1152*gx_b/ &
1361  0.6e1_dp + e_lsda_x_brhob*(u_x_b1rhob*t31 + u_x_b*u_x_b1rhob* &
1362  c_x_2) + e_lsda_x_brhob*gx_brhob + e_lsda_x_b*(u_x_brhobrhob* &
1363  t31 + 0.2e1_dp*u_x_brhob*u_x_b1rhob*c_x_2 + u_x_b* &
1364  u_x_brhobrhob*c_x_2)) + scale_c*(((e_c_u_0rhobrhob + (0.2e1_dp* &
1365  t260*rsrhobrhob*t92 - 0.2e1_dp*t1049*t1047 + 0.2e1_dp* &
1366  t726*t1270*t278 - t266*(-t731*t1205/0.4e1_dp + t267* &
1367  rsrhobrhob/0.2e1_dp + beta_2_3*rsrhobrhob + 0.3e1_dp/0.4e1_dp &
1368  *t737*t1205 + 0.3e1_dp/0.2e1_dp*t271*rsrhobrhob + t86* &
1369  t742*t1205*t647 + t86*t84*rsrhobrhob*t232 - t86*t84* &
1370  t1205*t647)*t278 - t757*t1270*t759*t80/0.2e1_dp)*f* &
1371  t110 + alpha_crhob*f1rhob*t110 - 0.4e1_dp*t431*t435 + &
1372  alpha_c1rhob*frhob*t110 + alpha_c*frhobrhob*t110 - 0.4e1_dp &
1373  *t433*t435 - 0.4e1_dp*t1321*t435 - 0.4e1_dp*t1324*t435 - &
1374  0.12e2_dp*t105*t796*t1299 + t1360)*rho + epsilon_c_unifrhob &
1375  + epsilon_c_unif1rhob - e_lsda_c_brhobrhob)*gc_ab + &
1376  e_lsda_c_abrhob*(u_c_ab1rhob*t170 + u_c_ab*u_c_ab1rhob* &
1377  c_cab_2) + (epsilon_c_unif1rhob*rho + epsilon_c_unif - &
1378  e_lsda_c_b1rhob)*gc_abrhob + e_lsda_c_ab*(u_c_abrhobrhob*t170 &
1379  + 0.2e1_dp*u_c_abrhob*u_c_ab1rhob*c_cab_2 + u_c_ab* &
1380  u_c_abrhobrhob*c_cab_2) + e_lsda_c_brhobrhob*gc_b + &
1381  e_lsda_c_brhob*(u_c_b1rhob*t176 + u_c_b*u_c_b1rhob*c_css_2) &
1382  + e_lsda_c_b1rhob*gc_brhob + e_lsda_c_b*(u_c_brhobrhob*t176 + &
1383  0.2e1_dp*u_c_brhob*u_c_b1rhob*c_css_2 + u_c_b*u_c_brhobrhob &
1384  *c_css_2))
1385  e_rb_rb(ii) = e_rb_rb(ii) + exc_rhob_rhob
1386  END IF
1387 
1388  s_arhoanorm_drhoa = -0.4e1_dp/0.3e1_dp*t188
1389  u_x_arhoanorm_drhoa = 0.2e1_dp*gamma_x*s_anorm_drhoa*t192 - &
1390  0.10e2_dp*t568*t199*s_anorm_drhoa + 0.2e1_dp*t191*t16* &
1391  s_arhoanorm_drhoa + 0.8e1_dp*t577*t579*s_arhoa*s_anorm_drhoa &
1392  - 0.2e1_dp*t196*t198*s_arhoanorm_drhoa
1393  s_a_2rhoanorm_drhoa = 0.2e1_dp*s_anorm_drhoa*s_arhoa + &
1394  0.2e1_dp*s_a*s_arhoanorm_drhoa
1395  s_avg_2rhoanorm_drhoa = s_a_2rhoanorm_drhoa/0.2e1_dp
1396  u_c_abrhoanorm_drhoa = gamma_c_ab*s_avg_2rhoanorm_drhoa*t162 - &
1397  0.2e1_dp*t906*t512 + 0.2e1_dp*t911*t914*s_avg_2norm_drhoa &
1398  - t337*t339*s_avg_2rhoanorm_drhoa
1399  u_c_arhoanorm_drhoa = gamma_c_ss*s_a_2rhoanorm_drhoa*t165 - &
1400  0.2e1_dp*t925*t516 + 0.2e1_dp*t930*t933*s_a_2norm_drhoa - &
1401  t345*t347*s_a_2rhoanorm_drhoa
1402 
1403  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1404  exc_rhoa_norm_drhoa = scale_x*(e_lsda_x_arhoa*gx_anorm_drhoa + &
1405  e_lsda_x_a*(u_x_arhoanorm_drhoa*t18 + 0.2e1_dp*u_x_arhoa* &
1406  u_x_anorm_drhoa*c_x_2 + u_x_a*u_x_arhoanorm_drhoa*c_x_2)) + &
1407  scale_c*(e_lsda_c_abrhoa*gc_abnorm_drhoa + e_lsda_c_ab*( &
1408  u_c_abrhoanorm_drhoa*t170 + 0.2e1_dp*u_c_abrhoa* &
1409  u_c_abnorm_drhoa*c_cab_2 + u_c_ab*u_c_abrhoanorm_drhoa*c_cab_2 &
1410  ) + e_lsda_c_arhoa*gc_anorm_drhoa + e_lsda_c_a*( &
1411  u_c_arhoanorm_drhoa*t173 + 0.2e1_dp*u_c_arhoa*u_c_anorm_drhoa &
1412  *c_css_2 + u_c_a*u_c_arhoanorm_drhoa*c_css_2))
1413  e_ra_ndra(ii) = e_ra_ndra(ii) + exc_rhoa_norm_drhoa
1414  END IF
1415 
1416  u_c_abrhobnorm_drhoa = -0.2e1_dp*t1436*t512 + 0.2e1_dp*t911 &
1417  *t1440*s_avg_2norm_drhoa
1418 
1419  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1420  exc_rhob_norm_drhoa = scale_c*(e_lsda_c_abrhob*gc_abnorm_drhoa &
1421  + e_lsda_c_ab*(u_c_abrhobnorm_drhoa*t170 + 0.2e1_dp* &
1422  u_c_abrhob*u_c_abnorm_drhoa*c_cab_2 + u_c_ab* &
1423  u_c_abrhobnorm_drhoa*c_cab_2))
1424  e_rb_ndra(ii) = e_rb_ndra(ii) + exc_rhob_norm_drhoa
1425  END IF
1426 
1427  t1571 = s_anorm_drhoa**2
1428  u_x_anorm_drhoanorm_drhoa = 0.2e1_dp*gamma_x*t1571*t16 - &
1429  0.10e2_dp*t568*t198*t1571 + 0.8e1_dp*t577*t579*t1571
1430  s_a_2norm_drhoanorm_drhoa = 0.2e1_dp*t1571
1431  s_a_21norm_drhoa = s_a_2norm_drhoa
1432  s_avg_2norm_drhoanorm_drhoa = s_a_2norm_drhoanorm_drhoa/0.2e1_dp
1433  s_avg_21norm_drhoa = s_a_21norm_drhoa/0.2e1_dp
1434  t1589 = t336*s_avg_2norm_drhoa
1435  t1590 = t339*s_avg_21norm_drhoa
1436  t1593 = t913*s_avg_2norm_drhoa
1437  u_c_abnorm_drhoanorm_drhoa = gamma_c_ab* &
1438  s_avg_2norm_drhoanorm_drhoa*t162 - 0.2e1_dp*t1589*t1590 + &
1439  0.2e1_dp*t911*t1593*s_avg_21norm_drhoa - t337*t339* &
1440  s_avg_2norm_drhoanorm_drhoa
1441  t1605 = t347*s_a_21norm_drhoa
1442  u_c_anorm_drhoanorm_drhoa = gamma_c_ss*s_a_2norm_drhoanorm_drhoa &
1443  *t165 - 0.2e1_dp*t344*s_a_2norm_drhoa*t1605 + 0.2e1_dp* &
1444  t930*t932*s_a_2norm_drhoa*s_a_21norm_drhoa - t345*t347* &
1445  s_a_2norm_drhoanorm_drhoa
1446 
1447  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1448  exc_norm_drhoa_norm_drhoa = scale_x*e_lsda_x_a*( &
1449  u_x_anorm_drhoanorm_drhoa*t18 + 0.2e1_dp*u_x_anorm_drhoa**2* &
1450  c_x_2 + u_x_a*u_x_anorm_drhoanorm_drhoa*c_x_2) + scale_c*( &
1451  e_lsda_c_ab*(u_c_abnorm_drhoanorm_drhoa*t170 + 0.2e1_dp* &
1452  u_c_abnorm_drhoa*(gamma_c_ab*s_avg_21norm_drhoa*t162 - t337* &
1453  t1590)*c_cab_2 + u_c_ab*u_c_abnorm_drhoanorm_drhoa*c_cab_2) + &
1454  e_lsda_c_a*(u_c_anorm_drhoanorm_drhoa*t173 + 0.2e1_dp* &
1455  u_c_anorm_drhoa*(gamma_c_ss*s_a_21norm_drhoa*t165 - t345* &
1456  t1605)*c_css_2 + u_c_a*u_c_anorm_drhoanorm_drhoa*c_css_2))
1457  e_ndra_ndra(ii) = e_ndra_ndra(ii) + exc_norm_drhoa_norm_drhoa
1458  END IF
1459 
1460  u_c_abrhoanorm_drhob = -0.2e1_dp*t906*t539 + 0.2e1_dp*t911* &
1461  t914*s_avg_2norm_drhob
1462 
1463  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1464  exc_rhoa_norm_drhob = scale_c*(e_lsda_c_abrhoa*gc_abnorm_drhob &
1465  + e_lsda_c_ab*(u_c_abrhoanorm_drhob*t170 + 0.2e1_dp* &
1466  u_c_abrhoa*u_c_abnorm_drhob*c_cab_2 + u_c_ab* &
1467  u_c_abrhoanorm_drhob*c_cab_2))
1468  e_ra_ndrb(ii) = e_ra_ndrb(ii) + exc_rhoa_norm_drhob
1469  END IF
1470 
1471  s_brhobnorm_drhob = -0.4e1_dp/0.3e1_dp*t367
1472  u_x_brhobnorm_drhob = 0.2e1_dp*gamma_x*s_bnorm_drhob*t371 - &
1473  0.10e2_dp*t1165*t377*s_bnorm_drhob + 0.2e1_dp*t370*t29* &
1474  s_brhobnorm_drhob + 0.8e1_dp*t1173*t1175*s_brhob* &
1475  s_bnorm_drhob - 0.2e1_dp*t374*t376*s_brhobnorm_drhob
1476  s_b_2rhobnorm_drhob = 0.2e1_dp*s_bnorm_drhob*s_brhob + &
1477  0.2e1_dp*s_b*s_brhobnorm_drhob
1478  s_avg_2rhobnorm_drhob = s_b_2rhobnorm_drhob/0.2e1_dp
1479  u_c_abrhobnorm_drhob = gamma_c_ab*s_avg_2rhobnorm_drhob*t162 - &
1480  0.2e1_dp*t1436*t539 + 0.2e1_dp*t911*t1440* &
1481  s_avg_2norm_drhob - t337*t339*s_avg_2rhobnorm_drhob
1482  u_c_brhobnorm_drhob = gamma_c_ss*s_b_2rhobnorm_drhob*t168 - &
1483  0.2e1_dp*t1451*t543 + 0.2e1_dp*t1455*t1458*s_b_2norm_drhob &
1484  - t484*t486*s_b_2rhobnorm_drhob
1485 
1486  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1487  exc_rhob_norm_drhob = scale_x*(e_lsda_x_brhob*gx_bnorm_drhob + &
1488  e_lsda_x_b*(u_x_brhobnorm_drhob*t31 + 0.2e1_dp*u_x_brhob* &
1489  u_x_bnorm_drhob*c_x_2 + u_x_b*u_x_brhobnorm_drhob*c_x_2)) + &
1490  scale_c*(e_lsda_c_abrhob*gc_abnorm_drhob + e_lsda_c_ab*( &
1491  u_c_abrhobnorm_drhob*t170 + 0.2e1_dp*u_c_abrhob* &
1492  u_c_abnorm_drhob*c_cab_2 + u_c_ab*u_c_abrhobnorm_drhob*c_cab_2 &
1493  ) + e_lsda_c_brhob*gc_bnorm_drhob + e_lsda_c_b*( &
1494  u_c_brhobnorm_drhob*t176 + 0.2e1_dp*u_c_brhob*u_c_bnorm_drhob &
1495  *c_css_2 + u_c_b*u_c_brhobnorm_drhob*c_css_2))
1496  e_rb_ndrb(ii) = e_rb_ndrb(ii) + exc_rhob_norm_drhob
1497  END IF
1498 
1499  u_c_abnorm_drhoanorm_drhob = -0.2e1_dp*t1589*t539 + 0.2e1_dp* &
1500  t911*t1593*s_avg_2norm_drhob
1501 
1502  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1503  exc_norm_drhoa_norm_drhob = scale_c*e_lsda_c_ab*( &
1504  u_c_abnorm_drhoanorm_drhob*t170 + 0.2e1_dp*u_c_abnorm_drhoa* &
1505  u_c_abnorm_drhob*c_cab_2 + u_c_ab*u_c_abnorm_drhoanorm_drhob* &
1506  c_cab_2)
1507  e_ndra_ndrb(ii) = e_ndra_ndrb(ii) + exc_norm_drhoa_norm_drhob
1508  END IF
1509 
1510  t1719 = s_bnorm_drhob**2
1511  u_x_bnorm_drhobnorm_drhob = 0.2e1_dp*gamma_x*t1719*t29 - &
1512  0.10e2_dp*t1165*t376*t1719 + 0.8e1_dp*t1173*t1175*t1719
1513  s_b_2norm_drhobnorm_drhob = 0.2e1_dp*t1719
1514  s_b_21norm_drhob = s_b_2norm_drhob
1515  s_avg_2norm_drhobnorm_drhob = s_b_2norm_drhobnorm_drhob/0.2e1_dp
1516  s_avg_21norm_drhob = s_b_21norm_drhob/0.2e1_dp
1517  t1738 = t339*s_avg_21norm_drhob
1518  u_c_abnorm_drhobnorm_drhob = gamma_c_ab* &
1519  s_avg_2norm_drhobnorm_drhob*t162 - 0.2e1_dp*t336* &
1520  s_avg_2norm_drhob*t1738 + 0.2e1_dp*t911*t913* &
1521  s_avg_2norm_drhob*s_avg_21norm_drhob - t337*t339* &
1522  s_avg_2norm_drhobnorm_drhob
1523  t1753 = t486*s_b_21norm_drhob
1524  u_c_bnorm_drhobnorm_drhob = gamma_c_ss*s_b_2norm_drhobnorm_drhob &
1525  *t168 - 0.2e1_dp*t344*s_b_2norm_drhob*t1753 + 0.2e1_dp* &
1526  t1455*t1457*s_b_2norm_drhob*s_b_21norm_drhob - t484*t486* &
1527  s_b_2norm_drhobnorm_drhob
1528 
1529  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
1530  exc_norm_drhob_norm_drhob = scale_x*e_lsda_x_b*( &
1531  u_x_bnorm_drhobnorm_drhob*t31 + 0.2e1_dp*u_x_bnorm_drhob**2* &
1532  c_x_2 + u_x_b*u_x_bnorm_drhobnorm_drhob*c_x_2) + scale_c*( &
1533  e_lsda_c_ab*(u_c_abnorm_drhobnorm_drhob*t170 + 0.2e1_dp* &
1534  u_c_abnorm_drhob*(gamma_c_ab*s_avg_21norm_drhob*t162 - t337* &
1535  t1738)*c_cab_2 + u_c_ab*u_c_abnorm_drhobnorm_drhob*c_cab_2) + &
1536  e_lsda_c_b*(u_c_bnorm_drhobnorm_drhob*t176 + 0.2e1_dp* &
1537  u_c_bnorm_drhob*(gamma_c_ss*s_b_21norm_drhob*t168 - t484* &
1538  t1753)*c_css_2 + u_c_b*u_c_bnorm_drhobnorm_drhob*c_css_2))
1539  e_ndrb_ndrb(ii) = e_ndrb_ndrb(ii) + exc_norm_drhob_norm_drhob
1540  END IF
1541  END IF ! <1 || >1
1542  END IF ! /=0
1543  END IF ! rho>epsilon_rho
1544  END DO
1545 !$OMP END DO
1546  END SELECT
1547  END SUBROUTINE b97_lsd_calc
1548 
1549 ! **************************************************************************************************
1550 !> \brief low level calculation of the b97 exchange-correlation functional for lda
1551 !> \param rho_tot ...
1552 !> \param norm_drho || grad (rhoa+rhob) ||
1553 !> \param e_0 adds to it the local value of the functional
1554 !> \param e_r derivative of the energy density with respect to r
1555 !> \param e_r_r derivative of the energy density with respect to r_r
1556 !> \param e_ndr derivative of the energy density with respect to ndr
1557 !> \param e_r_ndr derivative of the energy density with respect to r_ndr
1558 !> \param e_ndr_ndr derivative of the energy density with respect to ndr_ndr
1559 !> \param grad_deriv ...
1560 !> \param npoints ...
1561 !> \param epsilon_rho ...
1562 !> \param param ...
1563 !> \param scale_c_in ...
1564 !> \param scale_x_in ...
1565 !> \author fawzi
1566 !> \note slow version
1567 ! **************************************************************************************************
1568  SUBROUTINE b97_lda_calc(rho_tot, norm_drho, &
1569  e_0, e_r, e_r_r, e_ndr, e_r_ndr, e_ndr_ndr, &
1570  grad_deriv, npoints, epsilon_rho, &
1571  param, scale_c_in, scale_x_in)
1572  REAL(kind=dp), DIMENSION(*), INTENT(in) :: rho_tot, norm_drho
1573  REAL(kind=dp), DIMENSION(*), INTENT(inout) :: e_0, e_r, e_r_r, e_ndr, e_r_ndr, &
1574  e_ndr_ndr
1575  INTEGER, INTENT(in) :: grad_deriv, npoints
1576  REAL(kind=dp), INTENT(in) :: epsilon_rho
1577  INTEGER, INTENT(in) :: param
1578  REAL(kind=dp), INTENT(in) :: scale_c_in, scale_x_in
1579 
1580  INTEGER :: ii
1581  REAL(kind=dp) :: a_1, a_2, a_3, alpha_1_1, alpha_1_2, alpha_1_3, alpha_c, alpha_c1rhoa, &
1582  alpha_c1rhob, alpha_crhoa, alpha_crhob, beta_1_1, beta_1_2, beta_1_3, beta_2_1, beta_2_2, &
1583  beta_2_3, beta_3_1, beta_3_2, beta_3_3, beta_4_1, beta_4_2, beta_4_3, c_cab_0, c_cab_1, &
1584  c_cab_2, c_css_0, c_css_1, c_css_2, c_x_0, c_x_1, c_x_2, chi, chirhoa, chirhoarhoa, &
1585  chirhoarhob, chirhob, chirhobrhob, e_c_u_0, e_c_u_01rhoa, e_c_u_01rhob, e_c_u_0rhoa, &
1586  e_c_u_0rhoarhoa, e_c_u_0rhoarhob, e_c_u_0rhob, e_c_u_0rhobrhob, e_c_u_1rhoa, e_c_u_1rhob, &
1587  e_lsda_c_a, e_lsda_c_a1rhoa, e_lsda_c_ab, e_lsda_c_abrhoa
1588  REAL(kind=dp) :: e_lsda_c_abrhob, e_lsda_c_arhoa, e_lsda_c_arhoarhoa, e_lsda_c_b, &
1589  e_lsda_c_b1rhob, e_lsda_c_brhob, e_lsda_c_brhobrhob, e_lsda_x_a, e_lsda_x_arhoa, &
1590  e_lsda_x_b, e_lsda_x_brhob, epsilon_c_unif, epsilon_c_unif1rhoa, epsilon_c_unif1rhob, &
1591  epsilon_c_unif_a, epsilon_c_unif_a1rhoa, epsilon_c_unif_arhoa, epsilon_c_unif_b, &
1592  epsilon_c_unif_b1rhob, epsilon_c_unif_brhob, epsilon_c_unifrhoa, epsilon_c_unifrhob, exc, &
1593  exc_norm_drhoa, exc_norm_drhoa_norm_drhoa, exc_norm_drhoa_norm_drhob, exc_norm_drhob, &
1594  exc_norm_drhob_norm_drhob, exc_rhoa, exc_rhoa_norm_drhoa, exc_rhoa_norm_drhob
1595  REAL(kind=dp) :: exc_rhoa_rhoa, exc_rhoa_rhob, exc_rhob, exc_rhob_norm_drhoa, &
1596  exc_rhob_norm_drhob, exc_rhob_rhob, f, f1rhoa, f1rhob, frhoa, frhoarhoa, frhoarhob, &
1597  frhob, frhobrhob, gamma_c_ab, gamma_c_ss, gamma_x, gc_a, gc_ab, gc_abnorm_drhoa, &
1598  gc_abnorm_drhob, gc_abrhoa, gc_abrhob, gc_anorm_drhoa, gc_arhoa, gc_b, gc_bnorm_drhob, &
1599  gc_brhob, gx_a, gx_anorm_drhoa, gx_arhoa, gx_b, gx_bnorm_drhob, gx_brhob, my_norm_drhoa, &
1600  my_norm_drhob, my_rhoa, my_rhob, p_1, p_2, p_3, rho, rs, rs_a, rs_arhoa, rs_arhoarhoa, &
1601  rs_b, rs_brhob, rs_brhobrhob, rsrhoa, rsrhoarhoa, rsrhoarhob, rsrhob, rsrhobrhob, s_a
1602  REAL(kind=dp) :: s_a_2, s_a_21norm_drhoa, s_a_21rhoa, s_a_2norm_drhoa, &
1603  s_a_2norm_drhoanorm_drhoa, s_a_2rhoa, s_a_2rhoanorm_drhoa, s_a_2rhoarhoa, s_anorm_drhoa, &
1604  s_arhoa, s_arhoanorm_drhoa, s_arhoarhoa, s_avg_2, s_avg_21norm_drhoa, s_avg_21norm_drhob, &
1605  s_avg_21rhoa, s_avg_21rhob, s_avg_2norm_drhoa, s_avg_2norm_drhoanorm_drhoa, &
1606  s_avg_2norm_drhob, s_avg_2norm_drhobnorm_drhob, s_avg_2rhoa, s_avg_2rhoanorm_drhoa, &
1607  s_avg_2rhoarhoa, s_avg_2rhob, s_avg_2rhobnorm_drhob, s_avg_2rhobrhob, s_b, s_b_2, &
1608  s_b_21norm_drhob, s_b_21rhob, s_b_2norm_drhob, s_b_2norm_drhobnorm_drhob, s_b_2rhob, &
1609  s_b_2rhobnorm_drhob
1610  REAL(kind=dp) :: s_b_2rhobrhob, s_bnorm_drhob, s_brhob, s_brhobnorm_drhob, s_brhobrhob, &
1611  scale_c, scale_x, t1, t101, t1012, t1014, t102, t1047, t1049, t105, t106, t107, t108, &
1612  t110, t1107, t112, t113, t1136, t1152, t1157, t116, t1161, t1165, t117, t1172, t1173, &
1613  t1175, t12, t120, t1201, t1205, t122, t1236, t125, t127, t1270, t128, t129, t1299, t13, &
1614  t1321, t1324, t133, t134, t1341, t1348, t1351, t1360, t1368, t138, t1388, t139, t1394, &
1615  t14, t1406, t1407, t1419, t142, t1422, t1436, t1437, t144, t1440, t1451, t1452, t1455, &
1616  t1457, t1458, t147, t149, t15, t150, t151, t155, t156, t1571, t1589, t1590
1617  REAL(kind=dp) :: t1593, t16, t160, t1605, t161, t162, t163, t164, t165, t166, t167, t168, &
1618  t170, t1719, t173, t1738, t1753, t176, t18, t186, t188, t191, t192, t194, t196, t197, &
1619  t198, t199, t2, t20, t207, t208, t209, t21, t210, t212, t216, t220, t221, t222, t223, &
1620  t224, t228, t232, t235, t236, t237, t239, t243, t244, t245, t246, t25, t250, t256, t257, &
1621  t258, t26, t260, t264, t265, t266, t267, t27, t271, t277, t278, t279, t28, t285, t287, &
1622  t289, t29, t290, t291, t293, t294, t295, t297, t299, t3, t301, t302, t304, t31, t312, &
1623  t313, t314, t315, t316, t320, t324, t327, t328, t33, t336, t337, t338
1624  REAL(kind=dp) :: t339, t34, t344, t345, t346, t347, t35, t36, t365, t367, t37, t370, t371, &
1625  t374, t375, t376, t377, t396, t4, t40, t410, t42, t424, t43, t431, t433, t435, t437, &
1626  t438, t439, t441, t443, t445, t446, t448, t456, t457, t458, t459, t46, t460, t464, t468, &
1627  t471, t472, t48, t480, t484, t485, t486, t49, t50, t51, t512, t516, t539, t543, t55, &
1628  t555, t56, t560, t564, t568, t575, t576, t577, t579, t6, t60, t600, t601, t605, t606, &
1629  t608, t619, t62, t621, t626, t627, t631, t632, t633, t639, t644, t646, t647, t659, t66, &
1630  t661, t662, t663, t67, t671, t673, t678, t679, t68, t683, t689, t69
1631  REAL(kind=dp) :: t694, t7, t707, t709, t710, t711, t719, t721, t726, t727, t73, t731, t737, &
1632  t74, t742, t755, t757, t758, t759, t764, t765, t766, t771, t772, t78, t790, t793, t796, &
1633  t8, t80, t811, t818, t821, t830, t838, t84, t85, t858, t86, t864, t87, t876, t877, t889, &
1634  t892, t906, t907, t91, t911, t913, t914, t92, t925, t926, t929, t930, t932, t933, t94, &
1635  t97, t974, t976, t98, t981, t99, t993, u_c_a, u_c_a1rhoa, u_c_ab, u_c_ab1rhoa, &
1636  u_c_ab1rhob, u_c_abnorm_drhoa, u_c_abnorm_drhoanorm_drhoa, u_c_abnorm_drhoanorm_drhob, &
1637  u_c_abnorm_drhob, u_c_abnorm_drhobnorm_drhob, u_c_abrhoa
1638  REAL(kind=dp) :: u_c_abrhoanorm_drhoa, u_c_abrhoanorm_drhob, u_c_abrhoarhoa, u_c_abrhoarhob, &
1639  u_c_abrhob, u_c_abrhobnorm_drhoa, u_c_abrhobnorm_drhob, u_c_abrhobrhob, u_c_anorm_drhoa, &
1640  u_c_anorm_drhoanorm_drhoa, u_c_arhoa, u_c_arhoanorm_drhoa, u_c_arhoarhoa, u_c_b, &
1641  u_c_b1rhob, u_c_bnorm_drhob, u_c_bnorm_drhobnorm_drhob, u_c_brhob, u_c_brhobnorm_drhob, &
1642  u_c_brhobrhob, u_x_a, u_x_a1rhoa, u_x_anorm_drhoa, u_x_anorm_drhoanorm_drhoa, u_x_arhoa, &
1643  u_x_arhoanorm_drhoa, u_x_arhoarhoa, u_x_b, u_x_b1rhob, u_x_bnorm_drhob, &
1644  u_x_bnorm_drhobnorm_drhob, u_x_brhob, u_x_brhobnorm_drhob, u_x_brhobrhob
1645  REAL(kind=dp), DIMENSION(10) :: coeffs
1646 
1647  p_1 = 0.10e1_dp
1648  a_1 = 0.31091e-1_dp
1649  alpha_1_1 = 0.21370e0_dp
1650  beta_1_1 = 0.75957e1_dp
1651  beta_2_1 = 0.35876e1_dp
1652  beta_3_1 = 0.16382e1_dp
1653  beta_4_1 = 0.49294e0_dp
1654  p_2 = 0.10e1_dp
1655  a_2 = 0.15545e-1_dp
1656  alpha_1_2 = 0.20548e0_dp
1657  beta_1_2 = 0.141189e2_dp
1658  beta_2_2 = 0.61977e1_dp
1659  beta_3_2 = 0.33662e1_dp
1660  beta_4_2 = 0.62517e0_dp
1661  p_3 = 0.10e1_dp
1662  a_3 = 0.16887e-1_dp
1663  alpha_1_3 = 0.11125e0_dp
1664  beta_1_3 = 0.10357e2_dp
1665  beta_2_3 = 0.36231e1_dp
1666  beta_3_3 = 0.88026e0_dp
1667  beta_4_3 = 0.49671e0_dp
1668 
1669  coeffs = b97_coeffs(param)
1670  c_x_0 = coeffs(1)
1671  c_x_1 = coeffs(2)
1672  c_x_2 = coeffs(3)
1673  c_cab_0 = coeffs(4)
1674  c_cab_1 = coeffs(5)
1675  c_cab_2 = coeffs(6)
1676  c_css_0 = coeffs(7)
1677  c_css_1 = coeffs(8)
1678  c_css_2 = coeffs(9)
1679 
1680  scale_c = scale_c_in
1681  scale_x = scale_x_in
1682  IF (scale_x == -1.0_dp) scale_x = coeffs(10)
1683 
1684  gamma_x = 0.004_dp
1685  gamma_c_ss = 0.2_dp
1686  gamma_c_ab = 0.006_dp
1687 
1688  SELECT CASE (grad_deriv)
1689  CASE default
1690  t1 = 3**(0.1e1_dp/0.3e1_dp)
1691  t2 = 4**(0.1e1_dp/0.3e1_dp)
1692  t3 = t2**2
1693  t4 = t1*t3
1694  t6 = (0.1e1_dp/pi)**(0.1e1_dp/0.3e1_dp)
1695 !$OMP DO
1696  DO ii = 1, npoints
1697  my_rhoa = 0.5_dp*max(rho_tot(ii), 0.0_dp)
1698  my_rhob = my_rhoa
1699  rho = my_rhoa + my_rhob
1700  IF (rho > epsilon_rho) THEN
1701  my_rhoa = max(my_rhoa, 0.5_dp*epsilon_rho)
1702  my_rhob = max(my_rhob, 0.5_dp*epsilon_rho)
1703  rho = my_rhoa + my_rhob
1704  my_norm_drhoa = 0.5_dp*norm_drho(ii)
1705  my_norm_drhob = 0.5_dp*norm_drho(ii)
1706  t7 = my_rhoa**(0.1e1_dp/0.3e1_dp)
1707  t8 = t7*my_rhoa
1708  e_lsda_x_a = -0.3e1_dp/0.8e1_dp*t4*t6*t8
1709  t12 = 0.1e1_dp/t8
1710  s_a = my_norm_drhoa*t12
1711  t13 = s_a**2
1712  t14 = gamma_x*t13
1713  t15 = 0.1e1_dp + t14
1714  t16 = 0.1e1_dp/t15
1715  u_x_a = t14*t16
1716  t18 = c_x_1 + u_x_a*c_x_2
1717  gx_a = c_x_0 + u_x_a*t18
1718  t20 = my_rhob**(0.1e1_dp/0.3e1_dp)
1719  t21 = t20*my_rhob
1720  e_lsda_x_b = -0.3e1_dp/0.8e1_dp*t4*t6*t21
1721  t25 = 0.1e1_dp/t21
1722  s_b = my_norm_drhob*t25
1723  t26 = s_b**2
1724  t27 = gamma_x*t26
1725  t28 = 0.1e1_dp + t27
1726  t29 = 0.1e1_dp/t28
1727  u_x_b = t27*t29
1728  t31 = c_x_1 + u_x_b*c_x_2
1729  gx_b = c_x_0 + u_x_b*t31
1730  t33 = my_rhoa - my_rhob
1731  t34 = 0.1e1_dp/rho
1732  chi = t33*t34
1733  t35 = 0.1e1_dp/pi
1734  t36 = t35*t34
1735  t37 = t36**(0.1e1_dp/0.3e1_dp)
1736  rs = t4*t37/0.4e1_dp
1737  t40 = 0.1e1_dp + alpha_1_1*rs
1738  t42 = 0.1e1_dp/a_1
1739  t43 = sqrt(rs)
1740  t46 = t43*rs
1741  t48 = p_1 + 0.1e1_dp
1742  t49 = rs**t48
1743  t50 = beta_4_1*t49
1744  t51 = beta_1_1*t43 + beta_2_1*rs + beta_3_1*t46 + t50
1745  t55 = 0.1e1_dp + t42/t51/0.2e1_dp
1746  t56 = log(t55)
1747  e_c_u_0 = -0.2e1_dp*a_1*t40*t56
1748  t60 = 0.1e1_dp + alpha_1_2*rs
1749  t62 = 0.1e1_dp/a_2
1750  t66 = p_2 + 0.1e1_dp
1751  t67 = rs**t66
1752  t68 = beta_4_2*t67
1753  t69 = beta_1_2*t43 + beta_2_2*rs + beta_3_2*t46 + t68
1754  t73 = 0.1e1_dp + t62/t69/0.2e1_dp
1755  t74 = log(t73)
1756  t78 = 0.1e1_dp + alpha_1_3*rs
1757  t80 = 0.1e1_dp/a_3
1758  t84 = p_3 + 0.1e1_dp
1759  t85 = rs**t84
1760  t86 = beta_4_3*t85
1761  t87 = beta_1_3*t43 + beta_2_3*rs + beta_3_3*t46 + t86
1762  t91 = 0.1e1_dp + t80/t87/0.2e1_dp
1763  t92 = log(t91)
1764  alpha_c = 0.2e1_dp*a_3*t78*t92
1765  t94 = 2**(0.1e1_dp/0.3e1_dp)
1766  t97 = 1/(2*t94 - 2)
1767  t98 = 0.1e1_dp + chi
1768  t99 = t98**(0.1e1_dp/0.3e1_dp)
1769  t101 = 0.1e1_dp - chi
1770  t102 = t101**(0.1e1_dp/0.3e1_dp)
1771  f = (t99*t98 + t102*t101 - 0.2e1_dp)*t97
1772  t105 = alpha_c*f
1773  t106 = 0.9e1_dp/0.8e1_dp/t97
1774  t107 = chi**2
1775  t108 = t107**2
1776  t110 = t106*(0.1e1_dp - t108)
1777  t112 = -0.2e1_dp*a_2*t60*t74 - e_c_u_0
1778  t113 = t112*f
1779  epsilon_c_unif = e_c_u_0 + t105*t110 + t113*t108
1780  t116 = t35/my_rhoa
1781  t117 = t116**(0.1e1_dp/0.3e1_dp)
1782  rs_a = t4*t117/0.4e1_dp
1783  t120 = 0.1e1_dp + alpha_1_2*rs_a
1784  t122 = sqrt(rs_a)
1785  t125 = t122*rs_a
1786  t127 = rs_a**t66
1787  t128 = beta_4_2*t127
1788  t129 = beta_1_2*t122 + beta_2_2*rs_a + beta_3_2*t125 + t128
1789  t133 = 0.1e1_dp + t62/t129/0.2e1_dp
1790  t134 = log(t133)
1791  epsilon_c_unif_a = -0.2e1_dp*a_2*t120*t134
1792  t138 = t35/my_rhob
1793  t139 = t138**(0.1e1_dp/0.3e1_dp)
1794  rs_b = t4*t139/0.4e1_dp
1795  t142 = 0.1e1_dp + alpha_1_2*rs_b
1796  t144 = sqrt(rs_b)
1797  t147 = t144*rs_b
1798  t149 = rs_b**t66
1799  t150 = beta_4_2*t149
1800  t151 = beta_1_2*t144 + beta_2_2*rs_b + beta_3_2*t147 + t150
1801  t155 = 0.1e1_dp + t62/t151/0.2e1_dp
1802  t156 = log(t155)
1803  epsilon_c_unif_b = -0.2e1_dp*a_2*t142*t156
1804  s_a_2 = t13
1805  s_b_2 = t26
1806  s_avg_2 = s_a_2/0.2e1_dp + s_b_2/0.2e1_dp
1807  e_lsda_c_a = epsilon_c_unif_a*my_rhoa
1808  e_lsda_c_b = epsilon_c_unif_b*my_rhob
1809  t160 = gamma_c_ab*s_avg_2
1810  t161 = 0.1e1_dp + t160
1811  t162 = 0.1e1_dp/t161
1812  u_c_ab = t160*t162
1813  t163 = gamma_c_ss*s_a_2
1814  t164 = 0.1e1_dp + t163
1815  t165 = 0.1e1_dp/t164
1816  u_c_a = t163*t165
1817  t166 = gamma_c_ss*s_b_2
1818  t167 = 0.1e1_dp + t166
1819  t168 = 0.1e1_dp/t167
1820  u_c_b = t166*t168
1821  e_lsda_c_ab = epsilon_c_unif*rho - e_lsda_c_a - e_lsda_c_b
1822  t170 = c_cab_1 + u_c_ab*c_cab_2
1823  gc_ab = c_cab_0 + u_c_ab*t170
1824  t173 = c_css_1 + u_c_a*c_css_2
1825  gc_a = c_css_0 + u_c_a*t173
1826  t176 = c_css_1 + u_c_b*c_css_2
1827  gc_b = c_css_0 + u_c_b*t176
1828 
1829  IF (grad_deriv >= 0) THEN
1830  exc = scale_x*(e_lsda_x_a*gx_a + e_lsda_x_b*gx_b) + scale_c &
1831  *(e_lsda_c_ab*gc_ab + e_lsda_c_a*gc_a + e_lsda_c_b*gc_b)
1832  e_0(ii) = e_0(ii) + exc
1833  END IF
1834 
1835  IF (grad_deriv /= 0) THEN
1836 
1837  e_lsda_x_arhoa = -t4*t6*t7/0.2e1_dp
1838  t186 = my_rhoa**2
1839  t188 = 0.1e1_dp/t7/t186
1840  s_arhoa = -0.4e1_dp/0.3e1_dp*my_norm_drhoa*t188
1841  t191 = gamma_x*s_a
1842  t192 = t16*s_arhoa
1843  t194 = gamma_x**2
1844  t196 = t194*s_a_2*s_a
1845  t197 = t15**2
1846  t198 = 0.1e1_dp/t197
1847  t199 = t198*s_arhoa
1848  u_x_arhoa = 0.2e1_dp*t191*t192 - 0.2e1_dp*t196*t199
1849  gx_arhoa = u_x_arhoa*t18 + u_x_a*u_x_arhoa*c_x_2
1850  t207 = rho**2
1851  t208 = 0.1e1_dp/t207
1852  t209 = t33*t208
1853  chirhoa = t34 - t209
1854  t210 = t37**2
1855  t212 = 0.1e1_dp/t210*t35
1856  rsrhoa = -t4*t212*t208/0.12e2_dp
1857  t216 = a_1*alpha_1_1
1858  t220 = t51**2
1859  t221 = 0.1e1_dp/t220
1860  t222 = t40*t221
1861  t223 = 0.1e1_dp/t43
1862  t224 = beta_1_1*t223
1863  t228 = beta_3_1*t43
1864  t232 = 0.1e1_dp/rs
1865  t235 = t224*rsrhoa/0.2e1_dp + beta_2_1*rsrhoa + 0.3e1_dp/ &
1866  0.2e1_dp*t228*rsrhoa + t50*t48*rsrhoa*t232
1867  t236 = 0.1e1_dp/t55
1868  t237 = t235*t236
1869  e_c_u_0rhoa = -0.2e1_dp*t216*rsrhoa*t56 + t222*t237
1870  t239 = a_2*alpha_1_2
1871  t243 = t69**2
1872  t244 = 0.1e1_dp/t243
1873  t245 = t60*t244
1874  t246 = beta_1_2*t223
1875  t250 = beta_3_2*t43
1876  t256 = t246*rsrhoa/0.2e1_dp + beta_2_2*rsrhoa + 0.3e1_dp/ &
1877  0.2e1_dp*t250*rsrhoa + t68*t66*rsrhoa*t232
1878  t257 = 0.1e1_dp/t73
1879  t258 = t256*t257
1880  e_c_u_1rhoa = -0.2e1_dp*t239*rsrhoa*t74 + t245*t258
1881  t260 = a_3*alpha_1_3
1882  t264 = t87**2
1883  t265 = 0.1e1_dp/t264
1884  t266 = t78*t265
1885  t267 = beta_1_3*t223
1886  t271 = beta_3_3*t43
1887  t277 = t267*rsrhoa/0.2e1_dp + beta_2_3*rsrhoa + 0.3e1_dp/ &
1888  0.2e1_dp*t271*rsrhoa + t86*t84*rsrhoa*t232
1889  t278 = 0.1e1_dp/t91
1890  t279 = t277*t278
1891  alpha_crhoa = 0.2e1_dp*t260*rsrhoa*t92 - t266*t279
1892  frhoa = (0.4e1_dp/0.3e1_dp*t99*chirhoa - 0.4e1_dp/0.3e1_dp &
1893  *t102*chirhoa)*t97
1894  t285 = alpha_crhoa*f
1895  t287 = alpha_c*frhoa
1896  t289 = t107*chi
1897  t290 = t106*t289
1898  t291 = t290*chirhoa
1899  t293 = 0.4e1_dp*t105*t291
1900  t294 = e_c_u_1rhoa - e_c_u_0rhoa
1901  t295 = t294*f
1902  t297 = t112*frhoa
1903  t299 = t289*chirhoa
1904  t301 = 0.4e1_dp*t113*t299
1905  epsilon_c_unifrhoa = e_c_u_0rhoa + t285*t110 + t287*t110 - &
1906  t293 + t295*t108 + t297*t108 + t301
1907  t302 = t117**2
1908  t304 = 0.1e1_dp/t302*t35
1909  rs_arhoa = -t4*t304/t186/0.12e2_dp
1910  t312 = t129**2
1911  t313 = 0.1e1_dp/t312
1912  t314 = t120*t313
1913  t315 = 0.1e1_dp/t122
1914  t316 = beta_1_2*t315
1915  t320 = beta_3_2*t122
1916  t324 = 0.1e1_dp/rs_a
1917  t327 = t316*rs_arhoa/0.2e1_dp + beta_2_2*rs_arhoa + 0.3e1_dp &
1918  /0.2e1_dp*t320*rs_arhoa + t128*t66*rs_arhoa*t324
1919  t328 = 0.1e1_dp/t133
1920  epsilon_c_unif_arhoa = -0.2e1_dp*t239*rs_arhoa*t134 + t314* &
1921  t327*t328
1922  s_a_2rhoa = 0.2e1_dp*s_a*s_arhoa
1923  s_avg_2rhoa = s_a_2rhoa/0.2e1_dp
1924  e_lsda_c_arhoa = epsilon_c_unif_arhoa*my_rhoa + epsilon_c_unif_a
1925  t336 = gamma_c_ab**2
1926  t337 = t336*s_avg_2
1927  t338 = t161**2
1928  t339 = 0.1e1_dp/t338
1929  u_c_abrhoa = gamma_c_ab*s_avg_2rhoa*t162 - t337*t339*s_avg_2rhoa
1930  t344 = gamma_c_ss**2
1931  t345 = t344*s_a_2
1932  t346 = t164**2
1933  t347 = 0.1e1_dp/t346
1934  u_c_arhoa = gamma_c_ss*s_a_2rhoa*t165 - t345*t347*s_a_2rhoa
1935  e_lsda_c_abrhoa = epsilon_c_unifrhoa*rho + epsilon_c_unif - &
1936  e_lsda_c_arhoa
1937  gc_abrhoa = u_c_abrhoa*t170 + u_c_ab*u_c_abrhoa*c_cab_2
1938  gc_arhoa = u_c_arhoa*t173 + u_c_a*u_c_arhoa*c_css_2
1939 
1940  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
1941  exc_rhoa = scale_x*(e_lsda_x_arhoa*gx_a + e_lsda_x_a* &
1942  gx_arhoa) + scale_c*(e_lsda_c_abrhoa*gc_ab + e_lsda_c_ab* &
1943  gc_abrhoa + e_lsda_c_arhoa*gc_a + e_lsda_c_a*gc_arhoa)
1944  e_r(ii) = e_r(ii) + 0.5_dp*exc_rhoa
1945  END IF
1946 
1947  e_lsda_x_brhob = -t4*t6*t20/0.2e1_dp
1948  t365 = my_rhob**2
1949  t367 = 0.1e1_dp/t20/t365
1950  s_brhob = -0.4e1_dp/0.3e1_dp*my_norm_drhob*t367
1951  t370 = gamma_x*s_b
1952  t371 = t29*s_brhob
1953  t374 = t194*s_b_2*s_b
1954  t375 = t28**2
1955  t376 = 0.1e1_dp/t375
1956  t377 = t376*s_brhob
1957  u_x_brhob = 0.2e1_dp*t370*t371 - 0.2e1_dp*t374*t377
1958  gx_brhob = u_x_brhob*t31 + u_x_b*u_x_brhob*c_x_2
1959  chirhob = -t34 - t209
1960  rsrhob = rsrhoa
1961  t396 = t224*rsrhob/0.2e1_dp + beta_2_1*rsrhob + 0.3e1_dp/ &
1962  0.2e1_dp*t228*rsrhob + t50*t48*rsrhob*t232
1963  e_c_u_0rhob = -0.2e1_dp*t216*rsrhob*t56 + t222*t396*t236
1964  t410 = t246*rsrhob/0.2e1_dp + beta_2_2*rsrhob + 0.3e1_dp/ &
1965  0.2e1_dp*t250*rsrhob + t68*t66*rsrhob*t232
1966  e_c_u_1rhob = -0.2e1_dp*t239*rsrhob*t74 + t245*t410*t257
1967  t424 = t267*rsrhob/0.2e1_dp + beta_2_3*rsrhob + 0.3e1_dp/ &
1968  0.2e1_dp*t271*rsrhob + t86*t84*rsrhob*t232
1969  alpha_crhob = 0.2e1_dp*t260*rsrhob*t92 - t266*t424*t278
1970  frhob = (0.4e1_dp/0.3e1_dp*t99*chirhob - 0.4e1_dp/0.3e1_dp &
1971  *t102*chirhob)*t97
1972  t431 = alpha_crhob*f
1973  t433 = alpha_c*frhob
1974  t435 = t290*chirhob
1975  t437 = 0.4e1_dp*t105*t435
1976  t438 = e_c_u_1rhob - e_c_u_0rhob
1977  t439 = t438*f
1978  t441 = t112*frhob
1979  t443 = t289*chirhob
1980  t445 = 0.4e1_dp*t113*t443
1981  epsilon_c_unifrhob = e_c_u_0rhob + t431*t110 + t433*t110 - &
1982  t437 + t439*t108 + t441*t108 + t445
1983  t446 = t139**2
1984  t448 = 0.1e1_dp/t446*t35
1985  rs_brhob = -t4*t448/t365/0.12e2_dp
1986  t456 = t151**2
1987  t457 = 0.1e1_dp/t456
1988  t458 = t142*t457
1989  t459 = 0.1e1_dp/t144
1990  t460 = beta_1_2*t459
1991  t464 = beta_3_2*t144
1992  t468 = 0.1e1_dp/rs_b
1993  t471 = t460*rs_brhob/0.2e1_dp + beta_2_2*rs_brhob + 0.3e1_dp &
1994  /0.2e1_dp*rs_brhob*t464 + t150*t66*rs_brhob*t468
1995  t472 = 0.1e1_dp/t155
1996  epsilon_c_unif_brhob = -0.2e1_dp*t239*rs_brhob*t156 + t458* &
1997  t471*t472
1998  s_b_2rhob = 0.2e1_dp*s_b*s_brhob
1999  s_avg_2rhob = s_b_2rhob/0.2e1_dp
2000  e_lsda_c_brhob = epsilon_c_unif_brhob*my_rhob + epsilon_c_unif_b
2001  t480 = t339*s_avg_2rhob
2002  u_c_abrhob = gamma_c_ab*s_avg_2rhob*t162 - t337*t480
2003  t484 = t344*s_b_2
2004  t485 = t167**2
2005  t486 = 0.1e1_dp/t485
2006  u_c_brhob = gamma_c_ss*s_b_2rhob*t168 - t484*t486*s_b_2rhob
2007  e_lsda_c_abrhob = epsilon_c_unifrhob*rho + epsilon_c_unif - &
2008  e_lsda_c_brhob
2009  gc_abrhob = u_c_abrhob*t170 + u_c_ab*u_c_abrhob*c_cab_2
2010  gc_brhob = u_c_brhob*t176 + u_c_b*u_c_brhob*c_css_2
2011 
2012  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
2013  exc_rhob = scale_x*(e_lsda_x_brhob*gx_b + e_lsda_x_b* &
2014  gx_brhob) + scale_c*(e_lsda_c_abrhob*gc_ab + e_lsda_c_ab* &
2015  gc_abrhob + e_lsda_c_brhob*gc_b + e_lsda_c_b*gc_brhob)
2016  e_r(ii) = e_r(ii) + 0.5_dp*exc_rhob
2017  END IF
2018 
2019  s_anorm_drhoa = t12
2020  u_x_anorm_drhoa = 0.2e1_dp*t191*t16*s_anorm_drhoa - 0.2e1_dp &
2021  *t196*t198*s_anorm_drhoa
2022  gx_anorm_drhoa = u_x_anorm_drhoa*t18 + u_x_a*u_x_anorm_drhoa*c_x_2
2023  s_a_2norm_drhoa = 0.2e1_dp*s_a*s_anorm_drhoa
2024  s_avg_2norm_drhoa = s_a_2norm_drhoa/0.2e1_dp
2025  t512 = t339*s_avg_2norm_drhoa
2026  u_c_abnorm_drhoa = gamma_c_ab*s_avg_2norm_drhoa*t162 - t337*t512
2027  t516 = t347*s_a_2norm_drhoa
2028  u_c_anorm_drhoa = gamma_c_ss*s_a_2norm_drhoa*t165 - t345*t516
2029  gc_abnorm_drhoa = u_c_abnorm_drhoa*t170 + u_c_ab* &
2030  u_c_abnorm_drhoa*c_cab_2
2031  gc_anorm_drhoa = u_c_anorm_drhoa*t173 + u_c_a*u_c_anorm_drhoa &
2032  *c_css_2
2033 
2034  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
2035  exc_norm_drhoa = scale_x*e_lsda_x_a*gx_anorm_drhoa + scale_c* &
2036  (e_lsda_c_ab*gc_abnorm_drhoa + e_lsda_c_a*gc_anorm_drhoa)
2037  e_ndr(ii) = e_ndr(ii) + 0.5_dp*exc_norm_drhoa
2038  END IF
2039 
2040  s_bnorm_drhob = t25
2041  u_x_bnorm_drhob = 0.2e1_dp*t370*t29*s_bnorm_drhob - 0.2e1_dp &
2042  *t374*t376*s_bnorm_drhob
2043  gx_bnorm_drhob = u_x_bnorm_drhob*t31 + u_x_b*u_x_bnorm_drhob*c_x_2
2044  s_b_2norm_drhob = 0.2e1_dp*s_b*s_bnorm_drhob
2045  s_avg_2norm_drhob = s_b_2norm_drhob/0.2e1_dp
2046  t539 = t339*s_avg_2norm_drhob
2047  u_c_abnorm_drhob = gamma_c_ab*s_avg_2norm_drhob*t162 - t337*t539
2048  t543 = t486*s_b_2norm_drhob
2049  u_c_bnorm_drhob = gamma_c_ss*s_b_2norm_drhob*t168 - t484*t543
2050  gc_abnorm_drhob = u_c_abnorm_drhob*t170 + u_c_ab* &
2051  u_c_abnorm_drhob*c_cab_2
2052  gc_bnorm_drhob = u_c_bnorm_drhob*t176 + u_c_b*u_c_bnorm_drhob &
2053  *c_css_2
2054 
2055  IF (grad_deriv > 0 .OR. grad_deriv == -1) THEN
2056  exc_norm_drhob = scale_x*e_lsda_x_b*gx_bnorm_drhob + scale_c* &
2057  (e_lsda_c_ab*gc_abnorm_drhob + e_lsda_c_b*gc_bnorm_drhob)
2058  e_ndr(ii) = e_ndr(ii) + 0.5_dp*exc_norm_drhob
2059  END IF
2060 
2061  IF (grad_deriv > 1 .OR. grad_deriv < -1) THEN
2062  t555 = t7**2
2063  t560 = t186*my_rhoa
2064  s_arhoarhoa = 0.28e2_dp/0.9e1_dp*my_norm_drhoa/t7/t560
2065  t564 = s_arhoa**2
2066  t568 = t194*s_a_2
2067  t575 = t194*gamma_x
2068  t576 = s_a_2**2
2069  t577 = t575*t576
2070  t579 = 0.1e1_dp/t197/t15
2071  u_x_arhoarhoa = 0.2e1_dp*gamma_x*t564*t16 - 0.10e2_dp*t568 &
2072  *t198*t564 + 0.2e1_dp*t191*t16*s_arhoarhoa + 0.8e1_dp* &
2073  t577*t579*t564 - 0.2e1_dp*t196*t198*s_arhoarhoa
2074  u_x_a1rhoa = u_x_arhoa
2075  t600 = 0.1e1_dp/t207/rho
2076  t601 = t33*t600
2077  chirhoarhoa = -0.2e1_dp*t208 + 0.2e1_dp*t601
2078  t605 = 0.3141592654e1_dp**2
2079  t606 = 0.1e1_dp/t605
2080  t608 = t207**2
2081  rsrhoarhoa = -t4/t210/t36*t606/t608/0.18e2_dp + &
2082  t4*t212*t600/0.6e1_dp
2083  t619 = alpha_1_1*rsrhoa
2084  t621 = t221*t235*t236
2085  t626 = t40/t220/t51
2086  t627 = t235**2
2087  t631 = 0.1e1_dp/t46
2088  t632 = beta_1_1*t631
2089  t633 = rsrhoa**2
2090  t639 = beta_3_1*t223
2091  t644 = t48**2
2092  t646 = rs**2
2093  t647 = 0.1e1_dp/t646
2094  t659 = t220**2
2095  t661 = t40/t659
2096  t662 = t55**2
2097  t663 = 0.1e1_dp/t662
2098  e_c_u_0rhoarhoa = -0.2e1_dp*t216*rsrhoarhoa*t56 + 0.2e1_dp* &
2099  t619*t621 - 0.2e1_dp*t626*t627*t236 + t222*(-t632*t633 &
2100  /0.4e1_dp + t224*rsrhoarhoa/0.2e1_dp + beta_2_1*rsrhoarhoa + &
2101  0.3e1_dp/0.4e1_dp*t639*t633 + 0.3e1_dp/0.2e1_dp*t228* &
2102  rsrhoarhoa + t50*t644*t633*t647 + t50*t48*rsrhoarhoa* &
2103  t232 - t50*t48*t633*t647)*t236 + t661*t627*t663*t42/ &
2104  0.2e1_dp
2105  e_c_u_01rhoa = e_c_u_0rhoa
2106  t671 = alpha_1_2*rsrhoa
2107  t673 = t244*t256*t257
2108  t678 = t60/t243/t69
2109  t679 = t256**2
2110  t683 = beta_1_2*t631
2111  t689 = beta_3_2*t223
2112  t694 = t66**2
2113  t707 = t243**2
2114  t709 = t60/t707
2115  t710 = t73**2
2116  t711 = 0.1e1_dp/t710
2117  t719 = alpha_1_3*rsrhoa
2118  t721 = t265*t277*t278
2119  t726 = t78/t264/t87
2120  t727 = t277**2
2121  t731 = beta_1_3*t631
2122  t737 = beta_3_3*t223
2123  t742 = t84**2
2124  t755 = t264**2
2125  t757 = t78/t755
2126  t758 = t91**2
2127  t759 = 0.1e1_dp/t758
2128  alpha_c1rhoa = alpha_crhoa
2129  t764 = t99**2
2130  t765 = 0.1e1_dp/t764
2131  t766 = chirhoa**2
2132  t771 = t102**2
2133  t772 = 0.1e1_dp/t771
2134  frhoarhoa = (0.4e1_dp/0.9e1_dp*t765*t766 + 0.4e1_dp/ &
2135  0.3e1_dp*t99*chirhoarhoa + 0.4e1_dp/0.9e1_dp*t772*t766 - &
2136  0.4e1_dp/0.3e1_dp*t102*chirhoarhoa)*t97
2137  f1rhoa = frhoa
2138  t790 = alpha_c1rhoa*f
2139  t793 = alpha_c*f1rhoa
2140  t796 = t106*t107
2141  t811 = e_c_u_1rhoa - e_c_u_01rhoa
2142  t818 = t811*f
2143  t821 = t112*f1rhoa
2144  t830 = -0.4e1_dp*t105*t290*chirhoarhoa + (-0.2e1_dp*t239* &
2145  rsrhoarhoa*t74 + 0.2e1_dp*t671*t673 - 0.2e1_dp*t678*t679 &
2146  *t257 + t245*(-t683*t633/0.4e1_dp + t246*rsrhoarhoa/ &
2147  0.2e1_dp + beta_2_2*rsrhoarhoa + 0.3e1_dp/0.4e1_dp*t689*t633 &
2148  + 0.3e1_dp/0.2e1_dp*t250*rsrhoarhoa + t68*t694*t633* &
2149  t647 + t68*t66*rsrhoarhoa*t232 - t68*t66*t633*t647)* &
2150  t257 + t709*t679*t711*t62/0.2e1_dp - e_c_u_0rhoarhoa)*f* &
2151  t108 + t294*f1rhoa*t108 + 0.4e1_dp*t295*t299 + t811*frhoa &
2152  *t108 + t112*frhoarhoa*t108 + 0.4e1_dp*t297*t299 + 0.4e1_dp &
2153  *t818*t299 + 0.4e1_dp*t821*t299 + 0.12e2_dp*t113*t107* &
2154  t766 + 0.4e1_dp*t113*t289*chirhoarhoa
2155  epsilon_c_unif1rhoa = e_c_u_01rhoa + t790*t110 + t793*t110 - &
2156  t293 + t818*t108 + t821*t108 + t301
2157  t838 = t186**2
2158  rs_arhoarhoa = -t4/t302/t116*t606/t838/0.18e2_dp + &
2159  t4*t304/t560/0.6e1_dp
2160  t858 = t327**2
2161  t864 = rs_arhoa**2
2162  t876 = rs_a**2
2163  t877 = 0.1e1_dp/t876
2164  t889 = t312**2
2165  t892 = t133**2
2166  epsilon_c_unif_a1rhoa = epsilon_c_unif_arhoa
2167  s_a_2rhoarhoa = 0.2e1_dp*t564 + 0.2e1_dp*s_a*s_arhoarhoa
2168  s_a_21rhoa = s_a_2rhoa
2169  s_avg_2rhoarhoa = s_a_2rhoarhoa/0.2e1_dp
2170  s_avg_21rhoa = s_a_21rhoa/0.2e1_dp
2171  e_lsda_c_arhoarhoa = (-0.2e1_dp*t239*rs_arhoarhoa*t134 + &
2172  0.2e1_dp*alpha_1_2*rs_arhoa*t313*t327*t328 - 0.2e1_dp* &
2173  t120/t312/t129*t858*t328 + t314*(-beta_1_2/t125*t864/ &
2174  0.4e1_dp + t316*rs_arhoarhoa/0.2e1_dp + beta_2_2*rs_arhoarhoa &
2175  + 0.3e1_dp/0.4e1_dp*beta_3_2*t315*t864 + 0.3e1_dp/ &
2176  0.2e1_dp*t320*rs_arhoarhoa + t128*t694*t864*t877 + t128* &
2177  t66*rs_arhoarhoa*t324 - t128*t66*t864*t877)*t328 + t120 &
2178  /t889*t858/t892*t62/0.2e1_dp)*my_rhoa + epsilon_c_unif_arhoa &
2179  + epsilon_c_unif_a1rhoa
2180  e_lsda_c_a1rhoa = epsilon_c_unif_a1rhoa*my_rhoa + epsilon_c_unif_a
2181  t906 = t336*s_avg_2rhoa
2182  t907 = t339*s_avg_21rhoa
2183  t911 = t336*gamma_c_ab*s_avg_2
2184  t913 = 0.1e1_dp/t338/t161
2185  t914 = t913*s_avg_2rhoa
2186  u_c_abrhoarhoa = gamma_c_ab*s_avg_2rhoarhoa*t162 - 0.2e1_dp* &
2187  t906*t907 + 0.2e1_dp*t911*t914*s_avg_21rhoa - t337*t339* &
2188  s_avg_2rhoarhoa
2189  u_c_ab1rhoa = gamma_c_ab*s_avg_21rhoa*t162 - t337*t907
2190  t925 = t344*s_a_2rhoa
2191  t926 = t347*s_a_21rhoa
2192  t929 = t344*gamma_c_ss
2193  t930 = t929*s_a_2
2194  t932 = 0.1e1_dp/t346/t164
2195  t933 = t932*s_a_2rhoa
2196  u_c_arhoarhoa = gamma_c_ss*s_a_2rhoarhoa*t165 - 0.2e1_dp* &
2197  t925*t926 + 0.2e1_dp*t930*t933*s_a_21rhoa - t345*t347* &
2198  s_a_2rhoarhoa
2199  u_c_a1rhoa = gamma_c_ss*s_a_21rhoa*t165 - t345*t926
2200  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2201  exc_rhoa_rhoa = scale_x*(-t4*t6/t555*gx_a/0.6e1_dp &
2202  + e_lsda_x_arhoa*(u_x_a1rhoa*t18 + u_x_a*u_x_a1rhoa*c_x_2) &
2203  + e_lsda_x_arhoa*gx_arhoa + e_lsda_x_a*(u_x_arhoarhoa*t18 + &
2204  0.2e1_dp*u_x_arhoa*u_x_a1rhoa*c_x_2 + u_x_a*u_x_arhoarhoa* &
2205  c_x_2)) + scale_c*(((e_c_u_0rhoarhoa + (0.2e1_dp*t260* &
2206  rsrhoarhoa*t92 - 0.2e1_dp*t719*t721 + 0.2e1_dp*t726*t727* &
2207  t278 - t266*(-t731*t633/0.4e1_dp + t267*rsrhoarhoa/ &
2208  0.2e1_dp + beta_2_3*rsrhoarhoa + 0.3e1_dp/0.4e1_dp*t737*t633 &
2209  + 0.3e1_dp/0.2e1_dp*t271*rsrhoarhoa + t86*t742*t633* &
2210  t647 + t86*t84*rsrhoarhoa*t232 - t86*t84*t633*t647)* &
2211  t278 - t757*t727*t759*t80/0.2e1_dp)*f*t110 + alpha_crhoa &
2212  *f1rhoa*t110 - 0.4e1_dp*t285*t291 + alpha_c1rhoa*frhoa* &
2213  t110 + alpha_c*frhoarhoa*t110 - 0.4e1_dp*t287*t291 - &
2214  0.4e1_dp*t790*t291 - 0.4e1_dp*t793*t291 - 0.12e2_dp*t105* &
2215  t796*t766 + t830)*rho + epsilon_c_unifrhoa + &
2216  epsilon_c_unif1rhoa - e_lsda_c_arhoarhoa)*gc_ab + e_lsda_c_abrhoa &
2217  *(u_c_ab1rhoa*t170 + u_c_ab*u_c_ab1rhoa*c_cab_2) + ( &
2218  epsilon_c_unif1rhoa*rho + epsilon_c_unif - e_lsda_c_a1rhoa)* &
2219  gc_abrhoa + e_lsda_c_ab*(u_c_abrhoarhoa*t170 + 0.2e1_dp* &
2220  u_c_abrhoa*u_c_ab1rhoa*c_cab_2 + u_c_ab*u_c_abrhoarhoa* &
2221  c_cab_2) + e_lsda_c_arhoarhoa*gc_a + e_lsda_c_arhoa*(u_c_a1rhoa &
2222  *t173 + u_c_a*u_c_a1rhoa*c_css_2) + e_lsda_c_a1rhoa*gc_arhoa &
2223  + e_lsda_c_a*(u_c_arhoarhoa*t173 + 0.2e1_dp*u_c_arhoa* &
2224  u_c_a1rhoa*c_css_2 + u_c_a*u_c_arhoarhoa*c_css_2))
2225  e_r_r(ii) = e_r_r(ii) + 0.5_dp*0.5_dp*exc_rhoa_rhoa
2226  END IF
2227 
2228  chirhoarhob = 0.2e1_dp*t601
2229  rsrhoarhob = rsrhoarhoa
2230  t974 = t221*t396*t236
2231  t976 = alpha_1_1*rsrhob
2232  t981 = rsrhoa*rsrhob
2233  t993 = rsrhob*t647*rsrhoa
2234  e_c_u_0rhoarhob = -0.2e1_dp*t216*rsrhoarhob*t56 + t619* &
2235  t974 + t976*t621 - 0.2e1_dp*t626*t237*t396 + t222*(-t632* &
2236  t981/0.4e1_dp + t224*rsrhoarhob/0.2e1_dp + beta_2_1* &
2237  rsrhoarhob + 0.3e1_dp/0.4e1_dp*t639*t981 + 0.3e1_dp/0.2e1_dp &
2238  *t228*rsrhoarhob + t50*t644*t993 + t50*t48*rsrhoarhob* &
2239  t232 - t50*t48*t993)*t236 + t661*t235*t663*t42*t396/ &
2240  0.2e1_dp
2241  t1012 = t244*t410*t257
2242  t1014 = alpha_1_2*rsrhob
2243  t1047 = t265*t424*t278
2244  t1049 = alpha_1_3*rsrhob
2245  frhoarhob = (0.4e1_dp/0.9e1_dp*t765*chirhoa*chirhob + &
2246  0.4e1_dp/0.3e1_dp*t99*chirhoarhob + 0.4e1_dp/0.9e1_dp*t772 &
2247  *chirhoa*chirhob - 0.4e1_dp/0.3e1_dp*t102*chirhoarhob)* &
2248  t97
2249  t1107 = t107*chirhoa*chirhob
2250  t1136 = -0.4e1_dp*t105*t290*chirhoarhob + (-0.2e1_dp*t239 &
2251  *rsrhoarhob*t74 + t671*t1012 + t1014*t673 - 0.2e1_dp*t678* &
2252  t258*t410 + t245*(-t683*t981/0.4e1_dp + t246*rsrhoarhob/ &
2253  0.2e1_dp + beta_2_2*rsrhoarhob + 0.3e1_dp/0.4e1_dp*t689* &
2254  t981 + 0.3e1_dp/0.2e1_dp*t250*rsrhoarhob + t68*t694*t993 + &
2255  t68*t66*rsrhoarhob*t232 - t68*t66*t993)*t257 + t709* &
2256  t256*t711*t62*t410/0.2e1_dp - e_c_u_0rhoarhob)*f*t108 + &
2257  t294*frhob*t108 + 0.4e1_dp*t295*t443 + t438*frhoa*t108 + &
2258  t112*frhoarhob*t108 + 0.4e1_dp*t297*t443 + 0.4e1_dp*t439 &
2259  *t299 + 0.4e1_dp*t441*t299 + 0.12e2_dp*t113*t1107 + &
2260  0.4e1_dp*t113*t289*chirhoarhob
2261  u_c_abrhoarhob = -0.2e1_dp*t906*t480 + 0.2e1_dp*t911*t914 &
2262  *s_avg_2rhob
2263 
2264  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2265  exc_rhoa_rhob = scale_c*(((e_c_u_0rhoarhob + (0.2e1_dp*t260* &
2266  rsrhoarhob*t92 - t719*t1047 - t1049*t721 + 0.2e1_dp*t726* &
2267  t279*t424 - t266*(-t731*t981/0.4e1_dp + t267*rsrhoarhob/ &
2268  0.2e1_dp + beta_2_3*rsrhoarhob + 0.3e1_dp/0.4e1_dp*t737*t981 &
2269  + 0.3e1_dp/0.2e1_dp*t271*rsrhoarhob + t86*t742*t993 + t86 &
2270  *t84*rsrhoarhob*t232 - t86*t84*t993)*t278 - t757*t277 &
2271  *t759*t80*t424/0.2e1_dp)*f*t110 + alpha_crhoa*frhob* &
2272  t110 - 0.4e1_dp*t285*t435 + alpha_crhob*frhoa*t110 + alpha_c &
2273  *frhoarhob*t110 - 0.4e1_dp*t287*t435 - 0.4e1_dp*t431* &
2274  t291 - 0.4e1_dp*t433*t291 - 0.12e2_dp*t105*t106*t1107 + &
2275  t1136)*rho + epsilon_c_unifrhoa + epsilon_c_unifrhob)*gc_ab + &
2276  e_lsda_c_abrhoa*gc_abrhob + e_lsda_c_abrhob*gc_abrhoa + &
2277  e_lsda_c_ab*(u_c_abrhoarhob*t170 + 0.2e1_dp*u_c_abrhoa* &
2278  u_c_abrhob*c_cab_2 + u_c_ab*u_c_abrhoarhob*c_cab_2))
2279  e_r_r(ii) = e_r_r(ii) + 0.5_dp*exc_rhoa_rhob
2280  END IF
2281 
2282  t1152 = t20**2
2283  t1157 = t365*my_rhob
2284  s_brhobrhob = 0.28e2_dp/0.9e1_dp*my_norm_drhob/t20/t1157
2285  t1161 = s_brhob**2
2286  t1165 = t194*s_b_2
2287  t1172 = s_b_2**2
2288  t1173 = t575*t1172
2289  t1175 = 0.1e1_dp/t375/t28
2290  u_x_brhobrhob = 0.2e1_dp*gamma_x*t1161*t29 - 0.10e2_dp* &
2291  t1165*t376*t1161 + 0.2e1_dp*t370*t29*s_brhobrhob + &
2292  0.8e1_dp*t1173*t1175*t1161 - 0.2e1_dp*t374*t376* &
2293  s_brhobrhob
2294  u_x_b1rhob = u_x_brhob
2295  chirhobrhob = 0.2e1_dp*t208 + 0.2e1_dp*t601
2296  rsrhobrhob = rsrhoarhob
2297  t1201 = t396**2
2298  t1205 = rsrhob**2
2299  e_c_u_0rhobrhob = -0.2e1_dp*t216*rsrhobrhob*t56 + 0.2e1_dp* &
2300  t976*t974 - 0.2e1_dp*t626*t1201*t236 + t222*(-t632* &
2301  t1205/0.4e1_dp + t224*rsrhobrhob/0.2e1_dp + beta_2_1* &
2302  rsrhobrhob + 0.3e1_dp/0.4e1_dp*t639*t1205 + 0.3e1_dp/ &
2303  0.2e1_dp*t228*rsrhobrhob + t50*t644*t1205*t647 + t50*t48 &
2304  *rsrhobrhob*t232 - t50*t48*t1205*t647)*t236 + t661* &
2305  t1201*t663*t42/0.2e1_dp
2306  e_c_u_01rhob = e_c_u_0rhob
2307  t1236 = t410**2
2308  t1270 = t424**2
2309  alpha_c1rhob = alpha_crhob
2310  t1299 = chirhob**2
2311  frhobrhob = (0.4e1_dp/0.9e1_dp*t765*t1299 + 0.4e1_dp/ &
2312  0.3e1_dp*t99*chirhobrhob + 0.4e1_dp/0.9e1_dp*t772*t1299 - &
2313  0.4e1_dp/0.3e1_dp*t102*chirhobrhob)*t97
2314  f1rhob = frhob
2315  t1321 = alpha_c1rhob*f
2316  t1324 = alpha_c*f1rhob
2317  t1341 = e_c_u_1rhob - e_c_u_01rhob
2318  t1348 = t1341*f
2319  t1351 = t112*f1rhob
2320  t1360 = -0.4e1_dp*t105*t290*chirhobrhob + (-0.2e1_dp*t239 &
2321  *rsrhobrhob*t74 + 0.2e1_dp*t1014*t1012 - 0.2e1_dp*t678* &
2322  t1236*t257 + t245*(-t683*t1205/0.4e1_dp + t246*rsrhobrhob &
2323  /0.2e1_dp + beta_2_2*rsrhobrhob + 0.3e1_dp/0.4e1_dp*t689* &
2324  t1205 + 0.3e1_dp/0.2e1_dp*t250*rsrhobrhob + t68*t694*t1205 &
2325  *t647 + t68*t66*rsrhobrhob*t232 - t68*t66*t1205*t647) &
2326  *t257 + t709*t1236*t711*t62/0.2e1_dp - e_c_u_0rhobrhob)*f &
2327  *t108 + t438*f1rhob*t108 + 0.4e1_dp*t439*t443 + t1341* &
2328  frhob*t108 + t112*frhobrhob*t108 + 0.4e1_dp*t441*t443 + &
2329  0.4e1_dp*t1348*t443 + 0.4e1_dp*t1351*t443 + 0.12e2_dp*t113 &
2330  *t107*t1299 + 0.4e1_dp*t113*t289*chirhobrhob
2331  epsilon_c_unif1rhob = e_c_u_01rhob + t1321*t110 + t1324*t110 - &
2332  t437 + t1348*t108 + t1351*t108 + t445
2333  t1368 = t365**2
2334  rs_brhobrhob = -t4/t446/t138*t606/t1368/0.18e2_dp &
2335  + t4*t448/t1157/0.6e1_dp
2336  t1388 = t471**2
2337  t1394 = rs_brhob**2
2338  t1406 = rs_b**2
2339  t1407 = 0.1e1_dp/t1406
2340  t1419 = t456**2
2341  t1422 = t155**2
2342  epsilon_c_unif_b1rhob = epsilon_c_unif_brhob
2343  s_b_2rhobrhob = 0.2e1_dp*t1161 + 0.2e1_dp*s_b*s_brhobrhob
2344  s_b_21rhob = s_b_2rhob
2345  s_avg_2rhobrhob = s_b_2rhobrhob/0.2e1_dp
2346  s_avg_21rhob = s_b_21rhob/0.2e1_dp
2347  e_lsda_c_brhobrhob = (-0.2e1_dp*t239*rs_brhobrhob*t156 + &
2348  0.2e1_dp*alpha_1_2*rs_brhob*t457*t471*t472 - 0.2e1_dp* &
2349  t142/t456/t151*t1388*t472 + t458*(-beta_1_2/t147*t1394 &
2350  /0.4e1_dp + t460*rs_brhobrhob/0.2e1_dp + beta_2_2* &
2351  rs_brhobrhob + 0.3e1_dp/0.4e1_dp*beta_3_2*t459*t1394 + &
2352  0.3e1_dp/0.2e1_dp*t464*rs_brhobrhob + t150*t694*t1394* &
2353  t1407 + t150*t66*rs_brhobrhob*t468 - t150*t66*t1394* &
2354  t1407)*t472 + t142/t1419*t1388/t1422*t62/0.2e1_dp)* &
2355  my_rhob + epsilon_c_unif_brhob + epsilon_c_unif_b1rhob
2356  e_lsda_c_b1rhob = epsilon_c_unif_b1rhob*my_rhob + epsilon_c_unif_b
2357  t1436 = t336*s_avg_2rhob
2358  t1437 = t339*s_avg_21rhob
2359  t1440 = t913*s_avg_2rhob
2360  u_c_abrhobrhob = gamma_c_ab*s_avg_2rhobrhob*t162 - 0.2e1_dp* &
2361  t1436*t1437 + 0.2e1_dp*t911*t1440*s_avg_21rhob - t337*t339 &
2362  *s_avg_2rhobrhob
2363  u_c_ab1rhob = gamma_c_ab*s_avg_21rhob*t162 - t337*t1437
2364  t1451 = t344*s_b_2rhob
2365  t1452 = t486*s_b_21rhob
2366  t1455 = t929*s_b_2
2367  t1457 = 0.1e1_dp/t485/t167
2368  t1458 = t1457*s_b_2rhob
2369  u_c_brhobrhob = gamma_c_ss*s_b_2rhobrhob*t168 - 0.2e1_dp* &
2370  t1451*t1452 + 0.2e1_dp*t1455*t1458*s_b_21rhob - t484*t486 &
2371  *s_b_2rhobrhob
2372  u_c_b1rhob = gamma_c_ss*s_b_21rhob*t168 - t484*t1452
2373 
2374  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2375  exc_rhob_rhob = scale_x*(-t4*t6/t1152*gx_b/ &
2376  0.6e1_dp + e_lsda_x_brhob*(u_x_b1rhob*t31 + u_x_b*u_x_b1rhob* &
2377  c_x_2) + e_lsda_x_brhob*gx_brhob + e_lsda_x_b*(u_x_brhobrhob* &
2378  t31 + 0.2e1_dp*u_x_brhob*u_x_b1rhob*c_x_2 + u_x_b* &
2379  u_x_brhobrhob*c_x_2)) + scale_c*(((e_c_u_0rhobrhob + (0.2e1_dp* &
2380  t260*rsrhobrhob*t92 - 0.2e1_dp*t1049*t1047 + 0.2e1_dp* &
2381  t726*t1270*t278 - t266*(-t731*t1205/0.4e1_dp + t267* &
2382  rsrhobrhob/0.2e1_dp + beta_2_3*rsrhobrhob + 0.3e1_dp/0.4e1_dp &
2383  *t737*t1205 + 0.3e1_dp/0.2e1_dp*t271*rsrhobrhob + t86* &
2384  t742*t1205*t647 + t86*t84*rsrhobrhob*t232 - t86*t84* &
2385  t1205*t647)*t278 - t757*t1270*t759*t80/0.2e1_dp)*f* &
2386  t110 + alpha_crhob*f1rhob*t110 - 0.4e1_dp*t431*t435 + &
2387  alpha_c1rhob*frhob*t110 + alpha_c*frhobrhob*t110 - 0.4e1_dp &
2388  *t433*t435 - 0.4e1_dp*t1321*t435 - 0.4e1_dp*t1324*t435 - &
2389  0.12e2_dp*t105*t796*t1299 + t1360)*rho + epsilon_c_unifrhob &
2390  + epsilon_c_unif1rhob - e_lsda_c_brhobrhob)*gc_ab + &
2391  e_lsda_c_abrhob*(u_c_ab1rhob*t170 + u_c_ab*u_c_ab1rhob* &
2392  c_cab_2) + (epsilon_c_unif1rhob*rho + epsilon_c_unif - &
2393  e_lsda_c_b1rhob)*gc_abrhob + e_lsda_c_ab*(u_c_abrhobrhob*t170 &
2394  + 0.2e1_dp*u_c_abrhob*u_c_ab1rhob*c_cab_2 + u_c_ab* &
2395  u_c_abrhobrhob*c_cab_2) + e_lsda_c_brhobrhob*gc_b + &
2396  e_lsda_c_brhob*(u_c_b1rhob*t176 + u_c_b*u_c_b1rhob*c_css_2) &
2397  + e_lsda_c_b1rhob*gc_brhob + e_lsda_c_b*(u_c_brhobrhob*t176 + &
2398  0.2e1_dp*u_c_brhob*u_c_b1rhob*c_css_2 + u_c_b*u_c_brhobrhob &
2399  *c_css_2))
2400  e_r_r(ii) = e_r_r(ii) + 0.5_dp*0.5_dp*exc_rhob_rhob
2401  END IF
2402 
2403  s_arhoanorm_drhoa = -0.4e1_dp/0.3e1_dp*t188
2404  u_x_arhoanorm_drhoa = 0.2e1_dp*gamma_x*s_anorm_drhoa*t192 - &
2405  0.10e2_dp*t568*t199*s_anorm_drhoa + 0.2e1_dp*t191*t16* &
2406  s_arhoanorm_drhoa + 0.8e1_dp*t577*t579*s_arhoa*s_anorm_drhoa &
2407  - 0.2e1_dp*t196*t198*s_arhoanorm_drhoa
2408  s_a_2rhoanorm_drhoa = 0.2e1_dp*s_anorm_drhoa*s_arhoa + &
2409  0.2e1_dp*s_a*s_arhoanorm_drhoa
2410  s_avg_2rhoanorm_drhoa = s_a_2rhoanorm_drhoa/0.2e1_dp
2411  u_c_abrhoanorm_drhoa = gamma_c_ab*s_avg_2rhoanorm_drhoa*t162 - &
2412  0.2e1_dp*t906*t512 + 0.2e1_dp*t911*t914*s_avg_2norm_drhoa &
2413  - t337*t339*s_avg_2rhoanorm_drhoa
2414  u_c_arhoanorm_drhoa = gamma_c_ss*s_a_2rhoanorm_drhoa*t165 - &
2415  0.2e1_dp*t925*t516 + 0.2e1_dp*t930*t933*s_a_2norm_drhoa - &
2416  t345*t347*s_a_2rhoanorm_drhoa
2417 
2418  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2419  exc_rhoa_norm_drhoa = scale_x*(e_lsda_x_arhoa*gx_anorm_drhoa + &
2420  e_lsda_x_a*(u_x_arhoanorm_drhoa*t18 + 0.2e1_dp*u_x_arhoa* &
2421  u_x_anorm_drhoa*c_x_2 + u_x_a*u_x_arhoanorm_drhoa*c_x_2)) + &
2422  scale_c*(e_lsda_c_abrhoa*gc_abnorm_drhoa + e_lsda_c_ab*( &
2423  u_c_abrhoanorm_drhoa*t170 + 0.2e1_dp*u_c_abrhoa* &
2424  u_c_abnorm_drhoa*c_cab_2 + u_c_ab*u_c_abrhoanorm_drhoa*c_cab_2 &
2425  ) + e_lsda_c_arhoa*gc_anorm_drhoa + e_lsda_c_a*( &
2426  u_c_arhoanorm_drhoa*t173 + 0.2e1_dp*u_c_arhoa*u_c_anorm_drhoa &
2427  *c_css_2 + u_c_a*u_c_arhoanorm_drhoa*c_css_2))
2428  e_r_ndr(ii) = e_r_ndr(ii) + 0.5_dp*0.5_dp*exc_rhoa_norm_drhoa
2429  END IF
2430 
2431  u_c_abrhobnorm_drhoa = -0.2e1_dp*t1436*t512 + 0.2e1_dp*t911 &
2432  *t1440*s_avg_2norm_drhoa
2433 
2434  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2435  exc_rhob_norm_drhoa = scale_c*(e_lsda_c_abrhob*gc_abnorm_drhoa &
2436  + e_lsda_c_ab*(u_c_abrhobnorm_drhoa*t170 + 0.2e1_dp* &
2437  u_c_abrhob*u_c_abnorm_drhoa*c_cab_2 + u_c_ab* &
2438  u_c_abrhobnorm_drhoa*c_cab_2))
2439  e_r_ndr(ii) = e_r_ndr(ii) + 0.5_dp*0.5_dp*exc_rhob_norm_drhoa
2440  END IF
2441 
2442  t1571 = s_anorm_drhoa**2
2443  u_x_anorm_drhoanorm_drhoa = 0.2e1_dp*gamma_x*t1571*t16 - &
2444  0.10e2_dp*t568*t198*t1571 + 0.8e1_dp*t577*t579*t1571
2445  s_a_2norm_drhoanorm_drhoa = 0.2e1_dp*t1571
2446  s_a_21norm_drhoa = s_a_2norm_drhoa
2447  s_avg_2norm_drhoanorm_drhoa = s_a_2norm_drhoanorm_drhoa/0.2e1_dp
2448  s_avg_21norm_drhoa = s_a_21norm_drhoa/0.2e1_dp
2449  t1589 = t336*s_avg_2norm_drhoa
2450  t1590 = t339*s_avg_21norm_drhoa
2451  t1593 = t913*s_avg_2norm_drhoa
2452  u_c_abnorm_drhoanorm_drhoa = gamma_c_ab* &
2453  s_avg_2norm_drhoanorm_drhoa*t162 - 0.2e1_dp*t1589*t1590 + &
2454  0.2e1_dp*t911*t1593*s_avg_21norm_drhoa - t337*t339* &
2455  s_avg_2norm_drhoanorm_drhoa
2456  t1605 = t347*s_a_21norm_drhoa
2457  u_c_anorm_drhoanorm_drhoa = gamma_c_ss*s_a_2norm_drhoanorm_drhoa &
2458  *t165 - 0.2e1_dp*t344*s_a_2norm_drhoa*t1605 + 0.2e1_dp* &
2459  t930*t932*s_a_2norm_drhoa*s_a_21norm_drhoa - t345*t347* &
2460  s_a_2norm_drhoanorm_drhoa
2461 
2462  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2463  exc_norm_drhoa_norm_drhoa = scale_x*e_lsda_x_a*( &
2464  u_x_anorm_drhoanorm_drhoa*t18 + 0.2e1_dp*u_x_anorm_drhoa**2* &
2465  c_x_2 + u_x_a*u_x_anorm_drhoanorm_drhoa*c_x_2) + scale_c*( &
2466  e_lsda_c_ab*(u_c_abnorm_drhoanorm_drhoa*t170 + 0.2e1_dp* &
2467  u_c_abnorm_drhoa*(gamma_c_ab*s_avg_21norm_drhoa*t162 - t337* &
2468  t1590)*c_cab_2 + u_c_ab*u_c_abnorm_drhoanorm_drhoa*c_cab_2) + &
2469  e_lsda_c_a*(u_c_anorm_drhoanorm_drhoa*t173 + 0.2e1_dp* &
2470  u_c_anorm_drhoa*(gamma_c_ss*s_a_21norm_drhoa*t165 - t345* &
2471  t1605)*c_css_2 + u_c_a*u_c_anorm_drhoanorm_drhoa*c_css_2))
2472  e_ndr_ndr(ii) = e_ndr_ndr(ii) + 0.5_dp*0.5_dp*exc_norm_drhoa_norm_drhoa
2473  END IF
2474 
2475  u_c_abrhoanorm_drhob = -0.2e1_dp*t906*t539 + 0.2e1_dp*t911* &
2476  t914*s_avg_2norm_drhob
2477 
2478  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2479  exc_rhoa_norm_drhob = scale_c*(e_lsda_c_abrhoa*gc_abnorm_drhob &
2480  + e_lsda_c_ab*(u_c_abrhoanorm_drhob*t170 + 0.2e1_dp* &
2481  u_c_abrhoa*u_c_abnorm_drhob*c_cab_2 + u_c_ab* &
2482  u_c_abrhoanorm_drhob*c_cab_2))
2483  e_r_ndr(ii) = e_r_ndr(ii) + 0.5_dp*0.5_dp*exc_rhoa_norm_drhob
2484  END IF
2485 
2486  s_brhobnorm_drhob = -0.4e1_dp/0.3e1_dp*t367
2487  u_x_brhobnorm_drhob = 0.2e1_dp*gamma_x*s_bnorm_drhob*t371 - &
2488  0.10e2_dp*t1165*t377*s_bnorm_drhob + 0.2e1_dp*t370*t29* &
2489  s_brhobnorm_drhob + 0.8e1_dp*t1173*t1175*s_brhob* &
2490  s_bnorm_drhob - 0.2e1_dp*t374*t376*s_brhobnorm_drhob
2491  s_b_2rhobnorm_drhob = 0.2e1_dp*s_bnorm_drhob*s_brhob + &
2492  0.2e1_dp*s_b*s_brhobnorm_drhob
2493  s_avg_2rhobnorm_drhob = s_b_2rhobnorm_drhob/0.2e1_dp
2494  u_c_abrhobnorm_drhob = gamma_c_ab*s_avg_2rhobnorm_drhob*t162 - &
2495  0.2e1_dp*t1436*t539 + 0.2e1_dp*t911*t1440* &
2496  s_avg_2norm_drhob - t337*t339*s_avg_2rhobnorm_drhob
2497  u_c_brhobnorm_drhob = gamma_c_ss*s_b_2rhobnorm_drhob*t168 - &
2498  0.2e1_dp*t1451*t543 + 0.2e1_dp*t1455*t1458*s_b_2norm_drhob &
2499  - t484*t486*s_b_2rhobnorm_drhob
2500 
2501  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2502  exc_rhob_norm_drhob = scale_x*(e_lsda_x_brhob*gx_bnorm_drhob + &
2503  e_lsda_x_b*(u_x_brhobnorm_drhob*t31 + 0.2e1_dp*u_x_brhob* &
2504  u_x_bnorm_drhob*c_x_2 + u_x_b*u_x_brhobnorm_drhob*c_x_2)) + &
2505  scale_c*(e_lsda_c_abrhob*gc_abnorm_drhob + e_lsda_c_ab*( &
2506  u_c_abrhobnorm_drhob*t170 + 0.2e1_dp*u_c_abrhob* &
2507  u_c_abnorm_drhob*c_cab_2 + u_c_ab*u_c_abrhobnorm_drhob*c_cab_2 &
2508  ) + e_lsda_c_brhob*gc_bnorm_drhob + e_lsda_c_b*( &
2509  u_c_brhobnorm_drhob*t176 + 0.2e1_dp*u_c_brhob*u_c_bnorm_drhob &
2510  *c_css_2 + u_c_b*u_c_brhobnorm_drhob*c_css_2))
2511  e_r_ndr(ii) = e_r_ndr(ii) + 0.5_dp*0.5_dp*exc_rhob_norm_drhob
2512  END IF
2513 
2514  u_c_abnorm_drhoanorm_drhob = -0.2e1_dp*t1589*t539 + 0.2e1_dp* &
2515  t911*t1593*s_avg_2norm_drhob
2516 
2517  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2518  exc_norm_drhoa_norm_drhob = scale_c*e_lsda_c_ab*( &
2519  u_c_abnorm_drhoanorm_drhob*t170 + 0.2e1_dp*u_c_abnorm_drhoa* &
2520  u_c_abnorm_drhob*c_cab_2 + u_c_ab*u_c_abnorm_drhoanorm_drhob* &
2521  c_cab_2)
2522  e_ndr_ndr(ii) = e_ndr_ndr(ii) + 0.5_dp*exc_norm_drhoa_norm_drhob
2523  END IF
2524 
2525  t1719 = s_bnorm_drhob**2
2526  u_x_bnorm_drhobnorm_drhob = 0.2e1_dp*gamma_x*t1719*t29 - &
2527  0.10e2_dp*t1165*t376*t1719 + 0.8e1_dp*t1173*t1175*t1719
2528  s_b_2norm_drhobnorm_drhob = 0.2e1_dp*t1719
2529  s_b_21norm_drhob = s_b_2norm_drhob
2530  s_avg_2norm_drhobnorm_drhob = s_b_2norm_drhobnorm_drhob/0.2e1_dp
2531  s_avg_21norm_drhob = s_b_21norm_drhob/0.2e1_dp
2532  t1738 = t339*s_avg_21norm_drhob
2533  u_c_abnorm_drhobnorm_drhob = gamma_c_ab* &
2534  s_avg_2norm_drhobnorm_drhob*t162 - 0.2e1_dp*t336* &
2535  s_avg_2norm_drhob*t1738 + 0.2e1_dp*t911*t913* &
2536  s_avg_2norm_drhob*s_avg_21norm_drhob - t337*t339* &
2537  s_avg_2norm_drhobnorm_drhob
2538  t1753 = t486*s_b_21norm_drhob
2539  u_c_bnorm_drhobnorm_drhob = gamma_c_ss*s_b_2norm_drhobnorm_drhob &
2540  *t168 - 0.2e1_dp*t344*s_b_2norm_drhob*t1753 + 0.2e1_dp* &
2541  t1455*t1457*s_b_2norm_drhob*s_b_21norm_drhob - t484*t486* &
2542  s_b_2norm_drhobnorm_drhob
2543 
2544  IF (grad_deriv > 1 .OR. grad_deriv == -2) THEN
2545  exc_norm_drhob_norm_drhob = scale_x*e_lsda_x_b*( &
2546  u_x_bnorm_drhobnorm_drhob*t31 + 0.2e1_dp*u_x_bnorm_drhob**2* &
2547  c_x_2 + u_x_b*u_x_bnorm_drhobnorm_drhob*c_x_2) + scale_c*( &
2548  e_lsda_c_ab*(u_c_abnorm_drhobnorm_drhob*t170 + 0.2e1_dp* &
2549  u_c_abnorm_drhob*(gamma_c_ab*s_avg_21norm_drhob*t162 - t337* &
2550  t1738)*c_cab_2 + u_c_ab*u_c_abnorm_drhobnorm_drhob*c_cab_2) + &
2551  e_lsda_c_b*(u_c_bnorm_drhobnorm_drhob*t176 + 0.2e1_dp* &
2552  u_c_bnorm_drhob*(gamma_c_ss*s_b_21norm_drhob*t168 - t484* &
2553  t1753)*c_css_2 + u_c_b*u_c_bnorm_drhobnorm_drhob*c_css_2))
2554  e_ndr_ndr(ii) = e_ndr_ndr(ii) + 0.5_dp*0.5_dp*exc_norm_drhob_norm_drhob
2555  END IF
2556  END IF ! <1 || >1
2557  END IF ! /=0
2558  END IF ! rho>epsilon_rho
2559  END DO
2560 !$OMP END DO
2561  END SELECT
2562  END SUBROUTINE b97_lda_calc
2563 
2564 END MODULE xc_b97
collects all references to literature in CP2K as new algorithms / method are included from literature...
Definition: bibliography.F:28
integer, save, public grimme2006
Definition: bibliography.F:43
integer, save, public becke1997
Definition: bibliography.F:43
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.
Definition: mathconstants.F:16
real(kind=dp), parameter, public pi
calculates the b97 correlation functional
Definition: xc_b97.F:24
subroutine, public b97_lda_info(b97_params, reference, shortform, needs, max_deriv)
return various information on the functional
Definition: xc_b97.F:187
subroutine, public b97_lda_eval(rho_set, deriv_set, grad_deriv, b97_params)
evaluates the b97 correlation functional for lda
Definition: xc_b97.F:252
subroutine, public b97_lsd_info(b97_params, reference, shortform, needs, max_deriv)
return various information on the functional
Definition: xc_b97.F:219
subroutine, public b97_lsd_eval(rho_set, deriv_set, grad_deriv, b97_params)
evaluates the b 97 xc functional for lsd
Definition: xc_b97.F:364
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
input constants for xc
integer, parameter, public xc_b97_mardirossian
integer, parameter, public xc_b97_orig
integer, parameter, public xc_b97_grimme
integer, parameter, public xc_b97_3c
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