(git:374b731)
Loading...
Searching...
No Matches
xc_xbeef.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 Exchange contribution in the BEEF-vdW functional
10! (Norskov Group)
11!> \par History
12!> 02.2014 created based on xc_xbecke88.F [rkoitz]
13!> \author rkoitz
14! **************************************************************************************************
16
17 USE bibliography, ONLY: wellendorff2012,&
18 cite_reference
22 USE kinds, ONLY: dp
23 USE mathconstants, ONLY: pi
27 deriv_rho,&
37#include "../base/base_uses.f90"
38
39 IMPLICIT NONE
40 PRIVATE
41
42 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
43 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xc_xbeef'
44
46
47 !for beef functional pulled out of GPAW source, Feb 2014
48 REAL(kind=dp), PARAMETER :: a(0:29) = (/1.516501714304992365356_dp, 0.441353209874497942611_dp, -0.091821352411060291887_dp, &
49 -0.023527543314744041314_dp, 0.034188284548603550816_dp, 0.002411870075717384172_dp, &
50 -0.014163813515916020766_dp, 0.000697589558149178113_dp, 0.009859205136982565273_dp, &
51 -0.006737855050935187551_dp, -0.001573330824338589097_dp, 0.005036146253345903309_dp, &
52 -0.002569472452841069059_dp, -0.000987495397608761146_dp, 0.002033722894696920677_dp, &
53 -0.000801871884834044583_dp, -0.000668807872347525591_dp, 0.001030936331268264214_dp, &
54 -0.000367383865990214423_dp, -0.000421363539352619543_dp, 0.000576160799160517858_dp, &
55 -0.000083465037349510408_dp, -0.000445844758523195788_dp, 0.000460129009232047457_dp, &
56 -0.000005231775398304339_dp, -0.000423957047149510404_dp, 0.000375019067938866537_dp, &
57 0.000021149381251344578_dp, -0.000190491156503997170_dp, 0.000073843624209823442_dp/)
58CONTAINS
59
60! **************************************************************************************************
61!> \brief return various information on the functional
62!> \param reference string with the reference of the actual functional
63!> \param shortform string with the shortform of the functional name
64!> \param needs the components needed by this functional are set to
65!> true (does not set the unneeded components to false)
66!> \param max_deriv ...
67!> \par History
68!> 02.2014 created
69!> \author rkoitz
70! **************************************************************************************************
71
72 SUBROUTINE xbeef_lda_info(reference, shortform, needs, max_deriv)
73 CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
74 TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL :: needs
75 INTEGER, INTENT(out), OPTIONAL :: max_deriv
76
77 IF (PRESENT(reference)) THEN
78 reference = "Wellendorff, J. et al., Phys. Rev. B 85, 235149 (2012) {LDA}"
79 END IF
80 IF (PRESENT(shortform)) THEN
81 shortform = "Exchange Contribution to BEEF-vdW Functional (Wellendorff, 2012) {LDA}"
82 END IF
83 IF (PRESENT(needs)) THEN
84 needs%rho = .true.
85 needs%rho_1_3 = .true.
86 needs%norm_drho = .true.
87 END IF
88 IF (PRESENT(max_deriv)) max_deriv = 1
89
90 END SUBROUTINE xbeef_lda_info
91
92! **************************************************************************************************
93!> \brief return various information on the functional
94!> \param reference string with the reference of the actual functional
95!> \param shortform string with the shortform of the functional name
96!> \param needs the components needed by this functional are set to
97!> true (does not set the unneeded components to false)
98!> \param max_deriv ...
99!> \par History
100!> 02.2014 created
101!> \author rkoitz
102! **************************************************************************************************
103 SUBROUTINE xbeef_lsd_info(reference, shortform, needs, max_deriv)
104 CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: reference, shortform
105 TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL :: needs
106 INTEGER, INTENT(out), OPTIONAL :: max_deriv
107
108 IF (PRESENT(reference)) THEN
109 reference = "Wellendorff, J. et al., Phys. Rev. B 85, 235149 (2012) {LSD}"
110 END IF
111 IF (PRESENT(shortform)) THEN
112 shortform = "Exchange Contribution to BEEF-vdW Functional (Wellendorff, 2012) {LSD}"
113 END IF
114 IF (PRESENT(needs)) THEN
115 needs%rho_spin = .true.
116 needs%rho_spin_1_3 = .true.
117 needs%norm_drho_spin = .true.
118 END IF
119 IF (PRESENT(max_deriv)) max_deriv = 1
120
121 END SUBROUTINE xbeef_lsd_info
122
123! **************************************************************************************************
124!> \brief evaluates the beef exchange functional for lda
125!> \param rho_set the density where you want to evaluate the functional
126!> \param deriv_set place where to store the functional derivatives (they are
127!> added to the derivatives)
128!> \param grad_deriv degree of the derivative that should be evaluated,
129!> if positive all the derivatives up to the given degree are evaluated,
130!> if negative only the given degree is calculated
131!> \param xbeef_params input parameters (scaling)
132!> \par History
133!> 02.2014 created
134!> \author rkoitz
135! **************************************************************************************************
136 SUBROUTINE xbeef_lda_eval(rho_set, deriv_set, grad_deriv, xbeef_params)
137 TYPE(xc_rho_set_type), INTENT(IN) :: rho_set
138 TYPE(xc_derivative_set_type), INTENT(IN) :: deriv_set
139 INTEGER, INTENT(in) :: grad_deriv
140 TYPE(section_vals_type), POINTER :: xbeef_params
141
142 CHARACTER(len=*), PARAMETER :: routinen = 'xbeef_lda_eval'
143
144 INTEGER :: handle, npoints
145 INTEGER, DIMENSION(2, 3) :: bo
146 REAL(kind=dp) :: epsilon_rho, sx
147 REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), &
148 POINTER :: dummy, e_0, e_ndrho, e_rho, norm_drho, &
149 rho, rho_1_3
150 TYPE(xc_derivative_type), POINTER :: deriv
151
152 CALL timeset(routinen, handle)
153
154 CALL section_vals_val_get(xbeef_params, "scale_x", r_val=sx)
155
156 CALL cite_reference(wellendorff2012)
157
158 CALL xc_rho_set_get(rho_set, rho_1_3=rho_1_3, rho=rho, &
159 norm_drho=norm_drho, local_bounds=bo, rho_cutoff=epsilon_rho)
160 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
161
162 dummy => rho
163
164 e_0 => dummy
165 e_rho => dummy
166 e_ndrho => dummy
167
168 IF (grad_deriv >= 0) THEN
169 deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
170 allocate_deriv=.true.)
171 CALL xc_derivative_get(deriv, deriv_data=e_0)
172 END IF
173 IF (grad_deriv >= 1 .OR. grad_deriv == -1) THEN
174 deriv => xc_dset_get_derivative(deriv_set, [deriv_rho], &
175 allocate_deriv=.true.)
176 CALL xc_derivative_get(deriv, deriv_data=e_rho)
177 deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drho], &
178 allocate_deriv=.true.)
179 CALL xc_derivative_get(deriv, deriv_data=e_ndrho)
180 END IF
181 IF (grad_deriv > 1 .OR. grad_deriv < -1) THEN
182 cpabort("derivatives greater than 1 not implemented")
183 END IF
184
185!$OMP PARALLEL DEFAULT(NONE) &
186!$OMP SHARED(rho, rho_1_3, norm_drho, e_0, e_rho) &
187!$OMP SHARED(e_ndrho) &
188!$OMP SHARED( grad_deriv, npoints) &
189!$OMP SHARED(epsilon_rho,sx)
190 CALL xbeef_lda_calc(rho=rho, rho_1_3=rho_1_3, norm_drho=norm_drho, &
191 e_0=e_0, e_rho=e_rho, e_ndrho=e_ndrho, &
192 grad_deriv=grad_deriv, &
193 npoints=npoints, epsilon_rho=epsilon_rho, sx=sx)
194!$OMP END PARALLEL
195
196 CALL timestop(handle)
197 END SUBROUTINE xbeef_lda_eval
198
199! **************************************************************************************************
200!> \brief evaluates the beef exchange functional for lda
201!> \param rho the density where you want to evaluate the functional
202!> \param rho_1_3 ...
203!> \param norm_drho ...
204!> \param e_0 ...
205!> \param e_rho ...
206!> \param e_ndrho ...
207!> \param grad_deriv degree of the derivative that should be evaluated,
208!> if positive all the derivatives up to the given degree are evaluated,
209!> if negative only the given degree is calculated
210!> \param npoints ...
211!> \param epsilon_rho ...
212!> \param sx scaling-parameter for exchange
213!> \par History
214!> 02.2014 created based on xc_xbecke88
215!> \author rkoitz
216! **************************************************************************************************
217 SUBROUTINE xbeef_lda_calc(rho, rho_1_3, norm_drho, &
218 e_0, e_rho, e_ndrho, &
219 grad_deriv, npoints, epsilon_rho, sx)
220 INTEGER, INTENT(in) :: npoints, grad_deriv
221 REAL(kind=dp), DIMENSION(1:npoints), INTENT(inout) :: e_ndrho, e_rho, e_0
222 REAL(kind=dp), DIMENSION(1:npoints), INTENT(in) :: norm_drho, rho_1_3, rho
223 REAL(kind=dp), INTENT(in) :: epsilon_rho, sx
224
225 INTEGER, PARAMETER :: m = 30
226
227 INTEGER :: i, ii
228 REAL(kind=dp) :: ds_ndrho, ds_rho, dt, e_ueg, e_ueg_drho, &
229 epsilon_rho43, k_lda, kf, my_rho, &
230 my_rho_1_3, s, s2, t, t3
231 REAL(kind=dp), DIMENSION(0:29) :: de_leg, e_leg
232
233!energies, first and second derivatives from legendre pol
234
235 kf = (3.0_dp*pi**2)**(1.0_dp/3.0_dp) !only constants, without n^1/3
236 k_lda = -(2.0_dp/(2.0_dp**(4._dp/3._dp)))*(3.0_dp/2.0_dp)*(3.0_dp/(4.0_dp*pi))**(1.0_dp/3.0_dp)
237 !exchange energy density of the uniform electron gas, non spin-polarized
238
239 epsilon_rho43 = epsilon_rho**(4._dp/3._dp)
240
241!$OMP DO
242 DO ii = 1, npoints
243
244 my_rho = rho(ii)
245
246 IF (my_rho > epsilon_rho) THEN
247 my_rho_1_3 = rho_1_3(ii)
248
249 e_ueg = k_lda*my_rho*my_rho_1_3
250 e_ueg_drho = (4.0_dp/3.0_dp)*k_lda*my_rho_1_3
251
252 t3 = my_rho_1_3*my_rho*2*kf !reduced gradient, denominator
253
254 s = norm_drho(ii)/max(t3, epsilon_rho43) !reduced gradient finally
255 s2 = s**2
256 t = 2.0_dp*s2/(4.0_dp + s2) - 1.0_dp
257
258 IF (grad_deriv >= 0) THEN !asking for pure e evaluation or also derivatives
259 e_leg(0) = 1 !first legendre pol
260 e_leg(1) = t !second legendre pol
261 END IF
262
263 IF ((grad_deriv >= 1) .OR. (grad_deriv == -1)) THEN !asking for first derivative or higher
264 de_leg(0) = 0
265 de_leg(1) = 1
266 dt = 4.0_dp*s/(4.0_dp + s2) - 4.0_dp*s*s2/(4.0_dp + s2)**2
267 ds_rho = -(4.0_dp*s)/(3.0_dp*max(my_rho, epsilon_rho))
268 ds_ndrho = 1.0_dp/(max(t3, epsilon_rho43))
269 END IF
270
271 DO i = 2, m - 1 !LEGENDRE PART
272 e_leg(i) = 2.*(t)*e_leg(i - 1) - e_leg(i - 2) - ((t)*e_leg(i - 1) - e_leg(i - 2))/(real(i, kind=dp))
273 !taken from quantum espresso beef library.
274
275 IF (abs(grad_deriv) >= 1) THEN !first derivative
276 !the zero-derivatives need to be available for the first deriv.
277 de_leg(i) = e_leg(i - 1)*i + de_leg(i - 1)*(t)
278 END IF
279 END DO
280
281 !NO DERIVATIVE
282 IF (grad_deriv >= 0) THEN
283 !add the scaled legendre linear combination to e_0
284 e_0(ii) = e_0(ii) + sum(e_leg*a)*e_ueg*sx
285 END IF
286
287 !FIRST DERIVATIVE
288 IF ((grad_deriv >= 1) .OR. (grad_deriv == -1)) THEN !asking for first derivative or higher
289 e_rho(ii) = e_rho(ii) + (sum(e_leg*a)*e_ueg_drho + sum(de_leg*a)*dt*ds_rho*e_ueg)*sx
290 e_ndrho(ii) = e_ndrho(ii) + (sum(de_leg*a)*dt*ds_ndrho*e_ueg)*sx
291 END IF
292
293 END IF
294 END DO
295
296!$OMP END DO
297
298 END SUBROUTINE xbeef_lda_calc
299
300! **************************************************************************************************
301!> \brief evaluates the beef 88 exchange functional for lsd
302!> \param rho_set ...
303!> \param deriv_set ...
304!> \param grad_deriv ...
305!> \param xbeef_params ...
306!> \par History
307!> 2/2014 rkoitz [created based on Becke 88]
308!> \author rkoitz
309! **************************************************************************************************
310 SUBROUTINE xbeef_lsd_eval(rho_set, deriv_set, grad_deriv, xbeef_params)
311 TYPE(xc_rho_set_type), INTENT(IN) :: rho_set
312 TYPE(xc_derivative_set_type), INTENT(IN) :: deriv_set
313 INTEGER, INTENT(in) :: grad_deriv
314 TYPE(section_vals_type), POINTER :: xbeef_params
315
316 CHARACTER(len=*), PARAMETER :: routinen = 'xbeef_lsd_eval'
317
318 INTEGER :: handle, i, ispin, npoints
319 INTEGER, DIMENSION(2, 3) :: bo
320 REAL(kind=dp) :: epsilon_rho, sx
321 REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), &
322 POINTER :: dummy, e_0
323 TYPE(cp_3d_r_cp_type), DIMENSION(2) :: e_ndrho, e_rho, norm_drho, rho, rho_1_3
324 TYPE(xc_derivative_type), POINTER :: deriv
325
326 CALL timeset(routinen, handle)
327
328 CALL cite_reference(wellendorff2012)
329
330 NULLIFY (deriv)
331 DO i = 1, 2
332 NULLIFY (norm_drho(i)%array, rho(i)%array, rho_1_3(i)%array)
333 END DO
334
335 CALL section_vals_val_get(xbeef_params, "scale_x", r_val=sx)
336 CALL xc_rho_set_get(rho_set, rhoa_1_3=rho_1_3(1)%array, &
337 rhob_1_3=rho_1_3(2)%array, rhoa=rho(1)%array, &
338 rhob=rho(2)%array, norm_drhoa=norm_drho(1)%array, &
339 norm_drhob=norm_drho(2)%array, rho_cutoff=epsilon_rho, &
340 local_bounds=bo)
341 npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
342
343 dummy => rho(1)%array
344
345 e_0 => dummy
346 DO i = 1, 2
347 e_rho(i)%array => dummy
348 e_ndrho(i)%array => dummy
349 END DO
350
351 IF (grad_deriv >= 0) THEN
352 deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
353 allocate_deriv=.true.)
354 CALL xc_derivative_get(deriv, deriv_data=e_0)
355 END IF
356 IF (grad_deriv >= 1 .OR. grad_deriv == -1) THEN
357 deriv => xc_dset_get_derivative(deriv_set, [deriv_rhoa], &
358 allocate_deriv=.true.)
359 CALL xc_derivative_get(deriv, deriv_data=e_rho(1)%array)
360 deriv => xc_dset_get_derivative(deriv_set, [deriv_rhob], &
361 allocate_deriv=.true.)
362 CALL xc_derivative_get(deriv, deriv_data=e_rho(2)%array)
363 deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhoa], &
364 allocate_deriv=.true.)
365 CALL xc_derivative_get(deriv, deriv_data=e_ndrho(1)%array)
366 deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhob], &
367 allocate_deriv=.true.)
368 CALL xc_derivative_get(deriv, deriv_data=e_ndrho(2)%array)
369 END IF
370 IF (grad_deriv > 1 .OR. grad_deriv < -1) THEN
371 cpabort("derivatives greater than 1 not implemented")
372 END IF
373
374 DO ispin = 1, 2
375
376!$OMP PARALLEL DEFAULT(NONE) &
377!$OMP SHARED(rho, ispin, rho_1_3, norm_drho, e_0) &
378!$OMP SHARED(e_rho, e_ndrho) &
379!$OMP SHARED(grad_deriv, npoints) &
380!$OMP SHARED(epsilon_rho, sx)
381
382 CALL xbeef_lsd_calc( &
383 rho_spin=rho(ispin)%array, &
384 rho_1_3_spin=rho_1_3(ispin)%array, &
385 norm_drho_spin=norm_drho(ispin)%array, &
386 e_0=e_0, e_rho_spin=e_rho(ispin)%array, &
387 e_ndrho_spin=e_ndrho(ispin)%array, &
388 grad_deriv=grad_deriv, npoints=npoints, &
389 epsilon_rho=epsilon_rho, sx=sx)
390
391!$OMP END PARALLEL
392
393 END DO
394
395 CALL timestop(handle)
396
397 END SUBROUTINE xbeef_lsd_eval
398! **************************************************************************************************
399!> \brief low level calculation of the beef exchange functional for lsd
400!> \param rho_spin alpha or beta spin density
401!> \param rho_1_3_spin rho_spin**(1./3.)
402!> \param norm_drho_spin || grad rho_spin ||
403!> \param e_0 adds to it the local value of the functional
404!> \param e_rho_spin e_*_spin: derivative of the functional wrt. to the variables
405!> named where the * is. Everything wrt. to the spin of the arguments.
406!> \param e_ndrho_spin ...
407!> \param grad_deriv ...
408!> \param npoints ...
409!> \param epsilon_rho ...
410!> \param sx scaling-parameter for exchange
411!> \par History
412!> 02.2014 created based on Becke88
413!> \author rkoitz
414! **************************************************************************************************
415 SUBROUTINE xbeef_lsd_calc(rho_spin, rho_1_3_spin, norm_drho_spin, e_0, &
416 e_rho_spin, e_ndrho_spin, grad_deriv, npoints, epsilon_rho, sx)
417 REAL(kind=dp), DIMENSION(*), INTENT(in) :: rho_spin, rho_1_3_spin, norm_drho_spin
418 REAL(kind=dp), DIMENSION(*), INTENT(inout) :: e_0, e_rho_spin, e_ndrho_spin
419 INTEGER, INTENT(in) :: grad_deriv, npoints
420 REAL(kind=dp), INTENT(in) :: epsilon_rho, sx
421
422 INTEGER, PARAMETER :: m = 30
423
424 INTEGER :: i, ii
425 REAL(kind=dp) :: ds_ndrho, ds_rho, dt, e_ueg, e_ueg_drho, &
426 epsilon_rho43, k_lsd, kf, &
427 my_epsilon_rho, my_rho, my_rho_1_3, s, &
428 s2, t, t3
429 REAL(kind=dp), DIMENSION(0:29) :: de_leg, e_leg
430
431!energies and first derivatives from legendre pol
432
433 kf = (3.0_dp*pi**2)**(1.0_dp/3.0_dp) !only constants, without n^1/3
434 k_lsd = (3.0_dp/2.0_dp)*(3.0_dp/(4.0_dp*pi))**(1.0_dp/3.0_dp)
435 !exchange energy density of the uniform electron gas, spin-polarized
436
437 my_epsilon_rho = 0.5_dp*epsilon_rho
438 epsilon_rho43 = my_epsilon_rho**(4._dp/3._dp)
439
440!$OMP DO
441 DO ii = 1, npoints
442 my_rho = rho_spin(ii)
443
444 IF (my_rho > epsilon_rho) THEN
445 my_rho_1_3 = rho_1_3_spin(ii)
446
447 e_ueg = k_lsd*my_rho*my_rho_1_3
448 e_ueg_drho = (4.0_dp/3.0_dp)*k_lsd*my_rho_1_3
449
450 t3 = my_rho_1_3*my_rho*2*kf !reduced gradient, denominator
451
452 s = norm_drho_spin(ii)/max(t3, epsilon_rho43) !reduced gradient finally
453 s2 = s**2
454 t = 2.0_dp*s**2/(4.0_dp + s**2) - 1.0_dp
455
456 IF (grad_deriv >= 0) THEN !asking for pure e evaluation or also derivatives
457 e_leg(0) = 1 !first legendre pol
458 e_leg(1) = t !second legendre pol
459 END IF
460
461 IF ((grad_deriv >= 1) .OR. (grad_deriv == -1)) THEN !asking for first derivative or higher
462 de_leg(0) = 0
463 de_leg(1) = 1
464 dt = 4.0_dp*s/(4.0_dp + s2) - 4.0_dp*s*s2/(4.0_dp + s2)**2
465 ds_rho = -(4.0_dp*s)/(3.0_dp*max(my_rho, epsilon_rho))
466 ds_ndrho = 1.0_dp/(max(t3, epsilon_rho43))
467 END IF
468
469 DO i = 2, m - 1 !LEGENDRE PART
470 e_leg(i) = 2.*(t)*e_leg(i - 1) - e_leg(i - 2) - ((t)*e_leg(i - 1) - e_leg(i - 2))/(real(i, kind=dp))
471 !taken from quantum espresso beef library.
472
473 IF (abs(grad_deriv) >= 1) THEN !first derivative
474 !the zero-derivatives need to be available for the first deriv.
475 de_leg(i) = e_leg(i - 1)*i + de_leg(i - 1)*(t)
476 END IF
477
478 END DO
479
480 !NO DERIVATIVE
481 IF (grad_deriv >= 0) THEN
482 !add the scaled legendre linear combination to e_0
483 e_0(ii) = e_0(ii) + sum(e_leg*a)*e_ueg*sx
484 END IF
485
486 !FIRST DERIVATIVE
487 IF ((grad_deriv >= 1) .OR. (grad_deriv == -1)) THEN !asking for first derivative or higher
488 e_rho_spin(ii) = e_rho_spin(ii) + (sum(e_leg*a)*e_ueg_drho + sum(de_leg*a)*dt*ds_rho*e_ueg)*sx
489 e_ndrho_spin(ii) = e_ndrho_spin(ii) + (sum(de_leg*a)*dt*ds_ndrho*e_ueg)*sx
490 END IF
491 END IF
492 END DO
493!$OMP END DO
494
495 END SUBROUTINE xbeef_lsd_calc
496
497END MODULE xc_xbeef
498
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public wellendorff2012
various utilities that regard array of different kinds: output, allocation,... maybe it is not a good...
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Module with functions to handle derivative descriptors. derivative description are strings have the f...
integer, parameter, public deriv_norm_drho
integer, parameter, public deriv_norm_drhoa
integer, parameter, public deriv_rhob
integer, parameter, public deriv_rhoa
integer, parameter, public deriv_rho
integer, parameter, public deriv_norm_drhob
represent a group ofunctional derivatives
type(xc_derivative_type) function, pointer, public xc_dset_get_derivative(derivative_set, description, allocate_deriv)
returns the requested xc_derivative
Provides types for the management of the xc-functionals and their derivatives.
subroutine, public xc_derivative_get(deriv, split_desc, order, deriv_data, accept_null_data)
returns various information on the given derivative
contains the structure
contains the structure
subroutine, public xc_rho_set_get(rho_set, can_return_null, rho, drho, norm_drho, rhoa, rhob, norm_drhoa, norm_drhob, rho_1_3, rhoa_1_3, rhob_1_3, laplace_rho, laplace_rhoa, laplace_rhob, drhoa, drhob, rho_cutoff, drho_cutoff, tau_cutoff, tau, tau_a, tau_b, local_bounds)
returns the various attributes of rho_set
calculates the Exchange contribution in the BEEF-vdW functional
Definition xc_xbeef.F:15
subroutine, public xbeef_lda_eval(rho_set, deriv_set, grad_deriv, xbeef_params)
evaluates the beef exchange functional for lda
Definition xc_xbeef.F:137
subroutine, public xbeef_lsd_info(reference, shortform, needs, max_deriv)
return various information on the functional
Definition xc_xbeef.F:104
subroutine, public xbeef_lda_info(reference, shortform, needs, max_deriv)
return various information on the functional
Definition xc_xbeef.F:73
subroutine, public xbeef_lsd_eval(rho_set, deriv_set, grad_deriv, xbeef_params)
evaluates the beef 88 exchange functional for lsd
Definition xc_xbeef.F:311
represent a pointer to a contiguous 3d array
A derivative set contains the different derivatives of a xc-functional in form of a linked list.
represent a derivative of a functional
contains a flag for each component of xc_rho_set, so that you can use it to tell which components you...
represent a density, with all the representation and data needed to perform a functional evaluation