Octopus
xc_functional.F90
Go to the documentation of this file.
1!! Copyright (C) 2002-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch
2!!
3!! This program is free software; you can redistribute it and/or modify
4!! it under the terms of the GNU General Public License as published by
5!! the Free Software Foundation; either version 2, or (at your option)
6!! any later version.
7!!
8!! This program is distributed in the hope that it will be useful,
9!! but WITHOUT ANY WARRANTY; without even the implied warranty of
10!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11!! GNU General Public License for more details.
12!!
13!! You should have received a copy of the GNU General Public License
14!! along with this program; if not, write to the Free Software
15!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16!! 02110-1301, USA.
17!!
18
19#include "global.h"
20#include "xc_funcs.h"
21
22module xc_functional_oct_m
23 use debug_oct_m
24 use global_oct_m
28 use parser_oct_m
29 use pseudo_oct_m
30 use xc_f03_lib_m
31
32 implicit none
33
34 ! Although the following file only contain comments, we include it here to make sure it exists.
35 ! Otherwise the code might compile, but not run properly, as the variables documentations
36 ! will be incomplete.
37#include "functionals_list.F90"
38
39 private
40 public :: &
41 xc_functional_t, &
42 xc_functional_init, &
43 xc_functional_end, &
44 xc_functional_write_info, &
45 xc_functional_is_not_size_consistent, &
46 xc_functional_is_energy_functional, &
47 xc_get_default_functional
48
49
52 integer, public, parameter :: &
53 XC_OEP_X = 901, & !< Exact exchange
54 xc_oep_x_slater = 902, &
55 xc_oep_x_fbe = 903, &
56 xc_ks_inversion = 904, &
57 xc_rdmft_xc_m = 905, &
58 xc_oep_x_fbe_sl = 906, &
59 xc_lda_c_fbe = 907, &
60 xc_lda_c_fbe_sl = 908, &
61 xc_half_hartree = 917, &
62 xc_vdw_c_vdwdf = 918, &
63 xc_vdw_c_vdwdf2 = 919, &
64 xc_vdw_c_vdwdfcx = 920, &
65 xc_hyb_gga_xc_mvorb_hse06 = 921, &
66 xc_hyb_gga_xc_mvorb_pbeh = 922, &
67 xc_mgga_x_nc_br = 923, &
68 xc_mgga_x_nc_br_1 = 924, &
69 xc_mgga_c_nc_cs = 925, &
70 xc_mgga_x_nc_br_explicit = 926
71
74 integer, public, parameter :: &
75 XC_FAMILY_KS_INVERSION = 1024, &
76 xc_family_rdmft = 2048, &
77 xc_family_libvdwxc = 4096, &
78 xc_family_nc_lda = 8192, &
79 xc_family_nc_mgga = 16384
80
81 type xc_functional_t
82 ! Components are public by default
83 integer :: family = xc_family_unknown
84 integer :: type = 0
85 integer :: id = 0
86
87 integer :: spin_channels = 0
88 integer :: flags = 0
89
90 logical, private :: from_libxc = .false.
91
92 type(xc_f03_func_t) :: conf
93 type(xc_f03_func_info_t), private :: info
94 type(libvdwxc_t) :: libvdwxc
95 end type xc_functional_t
96
97 integer, public, parameter :: LIBXC_C_INDEX = 1000
98
99contains
100
101 ! ---------------------------------------------------------
102 subroutine xc_functional_init(functl, namespace, id, ndim, nel, spin_channels)
103 type(xc_functional_t), intent(inout) :: functl
104 type(namespace_t), intent(in) :: namespace
105 integer, intent(in) :: id
106 integer, intent(in) :: ndim
107 real(real64), intent(in) :: nel
108 integer, intent(in) :: spin_channels
109
110 integer :: interact_1d
111 real(real64) :: alpha, parameters(2)
112
113 push_sub(xc_functional_init)
114
115 ! initialize structure
116 functl%id = id
117 functl%spin_channels = spin_channels
118
119 if (functl%id == 0) then
120 functl%family = xc_family_none
121 else
122 ! get the family of the functional
123 functl%family = xc_f03_family_from_id(functl%id)
124 ! this also ensures it is actually a functional defined by the linked version of libxc
125
126 if (functl%family == xc_family_unknown) then
127
128 select case (functl%id)
129 case (xc_oep_x, xc_oep_x_slater, xc_oep_x_fbe, xc_oep_x_fbe_sl, xc_lda_c_fbe_sl)
130 functl%family = xc_family_oep
131
132 case (xc_ks_inversion)
133 functl%family = xc_family_ks_inversion
134
135 case (xc_half_hartree)
136 call messages_experimental("half-Hartree exchange", namespace=namespace)
137 functl%family = xc_family_lda ! XXX not really
138
139 case (xc_vdw_c_vdwdf, xc_vdw_c_vdwdf2, xc_vdw_c_vdwdfcx)
140 functl%family = xc_family_libvdwxc
141 !functl%flags = functl%flags + XC_FLAGS_HAVE_VXC + XC_FLAGS_HAVE_EXC
142
143 case (xc_rdmft_xc_m)
144 functl%family = xc_family_rdmft
145
146 case (xc_hyb_gga_xc_mvorb_hse06, xc_hyb_gga_xc_mvorb_pbeh)
147 functl%family = xc_family_hyb_gga
148
149 case (xc_mgga_x_nc_br, xc_mgga_x_nc_br_1, xc_mgga_x_nc_br_explicit, xc_mgga_c_nc_cs)
150 functl%family = xc_family_nc_mgga
151
152 case default
153 call messages_input_error(namespace, 'XCFunctional', 'Unknown functional')
154
155 end select
156 end if
157 end if
158
159 if (functl%family == xc_family_oep) then
160 functl%type = xc_exchange
161 functl%flags = xc_flags_1d + xc_flags_2d + xc_flags_3d
162
163 else if (functl%family == xc_family_ks_inversion .or. functl%family == xc_family_rdmft) then
164 functl%type = xc_exchange_correlation
165 functl%flags = xc_flags_1d + xc_flags_2d + xc_flags_3d
166
167 else if (functl%family == xc_family_libvdwxc) then
168 call xc_f03_func_init(functl%conf, xc_lda_c_pw, spin_channels)
169 functl%info = xc_f03_func_get_info(functl%conf)
170 functl%type = xc_f03_func_info_get_kind(functl%info)
171 functl%flags = xc_f03_func_info_get_flags(functl%info)
172 ! Convert Octopus code for functional into corresponding libvdwxc code:
173 call libvdwxc_init(functl%libvdwxc, namespace, functl%id - xc_vdw_c_vdwdf + 1)
174
175 else if (functl%id == xc_half_hartree) then
176 functl%type = xc_exchange_correlation
177 functl%flags = xc_flags_1d + xc_flags_2d + xc_flags_3d
178
179 else if(functl%id == xc_lda_c_fbe) then
180 functl%family = xc_family_lda
181 functl%type = xc_correlation
182 functl%flags = xc_flags_have_exc + xc_flags_have_vxc + xc_flags_3d
183
184 else if (functl%id == xc_mgga_x_nc_br .or. functl%id == xc_mgga_x_nc_br_1 .or. functl%id == xc_mgga_x_nc_br_explicit) then
185 functl%type = xc_exchange
186 functl%flags = xc_flags_have_vxc + xc_flags_have_exc + xc_flags_3d
187
188 else if(functl%id == xc_mgga_c_nc_cs) then
189 functl%type = xc_correlation
190 functl%flags = xc_flags_have_vxc + xc_flags_have_exc + xc_flags_3d
191
192 else if (functl%family == xc_family_none) then
193 functl%type = -1
194 functl%flags = xc_flags_1d + xc_flags_2d + xc_flags_3d
195
196 else ! handled by libxc
197 ! initialize
198 functl%from_libxc = .true.
199
200 !For the two MVORB functionals, we initialize libxc with the non-MVORB functionals
201 select case (functl%id)
202 case (xc_hyb_gga_xc_mvorb_hse06)
203 call xc_f03_func_init(functl%conf, xc_hyb_gga_xc_hse06, spin_channels)
204
205 case (xc_hyb_gga_xc_mvorb_pbeh)
206 call xc_f03_func_init(functl%conf, xc_hyb_gga_xc_pbeh, spin_channels)
207
208 case default
209 call xc_f03_func_init(functl%conf, functl%id, spin_channels)
210 end select
211 functl%info = xc_f03_func_get_info(functl%conf)
212 functl%type = xc_f03_func_info_get_kind(functl%info)
213 functl%flags = xc_f03_func_info_get_flags(functl%info)
214
215 ! FIXME: no need to say this for kernel
216 if (bitand(functl%flags, xc_flags_have_exc) == 0) then
217 message(1) = 'Specified functional does not have total energy available.'
218 message(2) = 'Corresponding component of energy will just be left as zero.'
219 call messages_warning(2, namespace=namespace)
220 end if
221
222 if (bitand(functl%flags, xc_flags_have_vxc) == 0) then
223 message(1) = 'Specified functional does not have XC potential available.'
224 message(2) = 'Cannot run calculations. Choose another XCFunctional.'
225 call messages_fatal(2, namespace=namespace)
226 end if
227 end if
228
229 ! Octopus-defined functionals need to provide the proper flags
230 if (functl%family /= xc_family_none) then
231 call xc_check_dimension(functl, ndim, namespace)
232 end if
233
234 ! Yukawa hybrids not supported yet
235 if (bitand(functl%flags, xc_flags_hyb_camy) /= 0) then
236 call messages_not_implemented("Yukawa-range separated hybrids", namespace=namespace)
237 end if
238
239 ! FIXME: aren`t there other parameters that can or should be set?
240 ! special parameters that have to be configured
241 select case (functl%id)
242 ! FIXME: aren`t there other Xalpha functionals?
243 case (xc_lda_c_xalpha)
244
245 !%Variable Xalpha
246 !%Type float
247 !%Default 1.0
248 !%Section Hamiltonian::XC
249 !%Description
250 !% The parameter of the Slater X<math>\alpha</math> functional. Applies only for
251 !% <tt>XCFunctional = xc_lda_c_xalpha</tt>.
252 !%End
253 call parse_variable(namespace, 'Xalpha', m_one, parameters(1))
254
255 call xc_f03_func_set_ext_params(functl%conf, parameters(1))
256
257 ! FIXME: doesn`t this apply to other 1D functionals?
258 case (xc_lda_x_1d_soft, xc_lda_c_1d_csc)
259 !%Variable Interaction1D
260 !%Type integer
261 !%Default interaction_soft_coulomb
262 !%Section Hamiltonian::XC
263 !%Description
264 !% When running in 1D, one has to soften the Coulomb interaction. This softening
265 !% is not unique, and several possibilities exist in the literature.
266 !%Option interaction_exp_screened 0
267 !% Exponentially screened Coulomb interaction.
268 !% See, <i>e.g.</i>, M Casula, S Sorella, and G Senatore, <i>Phys. Rev. B</i> <b>74</b>, 245427 (2006).
269 !%Option interaction_soft_coulomb 1
270 !% Soft Coulomb interaction of the form <math>1/\sqrt{x^2 + \alpha^2}</math>.
271 !%End
272 call messages_obsolete_variable(namespace, 'SoftInteraction1D_alpha', 'Interaction1D')
273 call parse_variable(namespace, 'Interaction1D', option__interaction1d__interaction_soft_coulomb, interact_1d)
274
275 !%Variable Interaction1DScreening
276 !%Type float
277 !%Default 1.0
278 !%Section Hamiltonian::XC
279 !%Description
280 !% Defines the screening parameter <math>\alpha</math> of the softened Coulomb interaction
281 !% when running in 1D.
282 !%End
283 call messages_obsolete_variable(namespace, 'SoftInteraction1D_alpha', 'Interaction1DScreening')
284 call parse_variable(namespace, 'Interaction1DScreening', m_one, alpha)
285 parameters(1) = real(interact_1d, real64)
286 parameters(2) = alpha
287 call xc_f03_func_set_ext_params(functl%conf, parameters(1))
288
289 case (xc_gga_x_lb)
290 if (parse_is_defined(namespace, 'LB94_modified')) then
291 call messages_obsolete_variable(namespace, 'LB94_modified')
292 end if
293
294 if (parse_is_defined(namespace, 'LB94_threshold')) then
295 call messages_obsolete_variable(namespace, 'LB94_threshold')
296 end if
297 end select
298
299
300 ! For functionals that depend on the number of electrons, we set the number of electrons
301 ! This is currently the case of GGA_K_TFLW, LDA_X_2D_PRM, and LDA_X_RAE
302 if (xc_functional_is_not_size_consistent(functl, namespace)) then
303 assert(xc_f03_func_info_get_n_ext_params(functl%info) == 1)
304 parameters(1) = nel
305 call xc_f03_func_set_ext_params(functl%conf, parameters(1))
306 write(message(1), '(a,i1)') "Info: Setting the number of electrons for the functional for spin ", spin_channels
307 call messages_info(1, namespace=namespace)
308 end if
309
310 pop_sub(xc_functional_init)
311 end subroutine xc_functional_init
312
313
314 ! ---------------------------------------------------------
315 subroutine xc_functional_end(functl)
316 type(xc_functional_t), intent(inout) :: functl
317
318 push_sub(xc_functional_end)
319
320 if (functl%family /= xc_family_none .and. functl%family /= xc_family_oep .and. &
321 functl%family /= xc_family_ks_inversion .and. functl%id /= xc_half_hartree &
322 .and. functl%id /= xc_lda_c_fbe &
323 .and. functl%family /= xc_family_nc_lda .and. functl%family /= xc_family_nc_mgga) then
324 call xc_f03_func_end(functl%conf)
325 end if
326
327 if (functl%family == xc_family_libvdwxc) then
328 call libvdwxc_end(functl%libvdwxc)
329 end if
330
331 pop_sub(xc_functional_end)
332 end subroutine xc_functional_end
333
334
335 ! ---------------------------------------------------------
337 subroutine xc_functional_write_info(functl, iunit, namespace)
338 type(xc_functional_t), intent(in) :: functl
339 integer, optional, intent(in) :: iunit
340 type(namespace_t), optional, intent(in) :: namespace
341
342 character(len=120) :: family
343 integer :: ii
344
345 push_sub(xc_functional_write_info)
346
347 if (functl%family == xc_family_oep) then
348 ! this is handled separately
349
350 select case (functl%id)
351 case (xc_oep_x)
352 write(message(1), '(2x,a)') 'Exchange'
353 write(message(2), '(4x,a)') 'Exact exchange'
354 call messages_info(2, iunit=iunit, namespace=namespace)
355
356 case(xc_oep_x_slater)
357 write(message(1), '(2x,a)') 'Exchange'
358 write(message(2), '(4x,a)') 'Slater exchange'
359 call messages_info(2, iunit=iunit, namespace=namespace)
360
361 case (xc_oep_x_fbe)
362 write(message(1), '(2x,a)') 'Exchange'
363 write(message(2), '(4x,a)') 'Force-based local exchange'
364 write(message(3), '(4x,a)') '[1] Tancogne-Dejean et al., J. Chem. Phys. 160, 024103 (2024)'
365 call messages_info(3, iunit=iunit, namespace=namespace)
366
367 case (xc_oep_x_fbe_sl)
368 write(message(1), '(2x,a)') 'Exchange'
369 write(message(2), '(4x,a)') 'Force-based local exchange - Sturm-Liouville'
370 call messages_info(2, iunit=iunit, namespace=namespace)
371
372 case (xc_lda_c_fbe_sl)
373 write(message(1), '(2x,a)') 'Correlation'
374 write(message(2), '(4x,a)') 'Force-based local-density correlation - Sturm-Liouville'
375 call messages_info(2, iunit=iunit, namespace=namespace)
376
377 case default
378 assert(.false.)
379 end select
380
381 else if (functl%family == xc_family_ks_inversion) then
382 ! this is handled separately
383 select case (functl%id)
384 case (xc_ks_inversion)
385 write(message(1), '(2x,a)') 'Exchange-Correlation:'
386 write(message(2), '(4x,a)') ' KS Inversion'
387 call messages_info(2, iunit=iunit, namespace=namespace)
388 end select
389
390 else if (functl%family == xc_family_libvdwxc) then
391 call libvdwxc_write_info(functl%libvdwxc, iunit=iunit)
392
393 else if (functl%id == xc_mgga_x_nc_br) then
394 write(message(1), '(2x,a)') 'Exchange'
395 write(message(2), '(4x,a)') 'Noncollinear Becke-Roussel (MGGA)'
396 write(message(3), '(4x,a)') '[1] N. Tancogne-Dejean, A. Rubio, and C. A. Ullrich, Phys. Rev. B 107, 165111 (2023)'
397 call messages_info(3, iunit)
398
399 else if (functl%id == xc_mgga_x_nc_br_1) then
400 write(message(1), '(2x,a)') 'Exchange'
401 write(message(2), '(4x,a)') 'Noncollinear Becke-Roussel, gamma = 1.0 (MGGA)'
402 write(message(3), '(4x,a)') '[1] N. Tancogne-Dejean, A. Rubio, and C. A. Ullrich, Phys. Rev. B 107, 165111 (2023)'
403 call messages_info(3, iunit)
404
405 else if (functl%id == xc_mgga_x_nc_br_explicit) then
406 write(message(1), '(2x,a)') 'Exchange'
407 write(message(2), '(4x,a)') 'Noncollinear Becke-Roussel (MGGA) with explicit inversion of x(y)'
408 write(message(3), '(4x,a)') '[1] N. Tancogne-Dejean, A. Rubio, and C. A. Ullrich, Phys. Rev. B 107, 165111 (2023)'
409 write(message(4), '(4x,a)') '[2] E. Proynov et al., Chemical Physics Letters 455, 103 (2008)'
410 call messages_info(4, iunit)
411
412 else if (functl%id == xc_mgga_c_nc_cs) then
413 write(message(1), '(2x,a)') 'Correlation'
414 write(message(2), '(4x,a)') 'Noncollinear Colle-Salvetti (MGGA)'
415 write(message(3), '(4x,a)') '[1] N. Tancogne-Dejean, A. Rubio, and C. A. Ullrich, Phys. Rev. B 107, 165111 (2023)'
416 call messages_info(3, iunit)
417
418
419 else if (functl%id == xc_half_hartree) then
420 write(message(1), '(2x,a)') 'Exchange-Correlation:'
421 write(message(2), '(4x,a)') 'Half-Hartree two-electron exchange'
422 call messages_info(2, iunit=iunit, namespace=namespace)
423
424 else if(functl%id == xc_lda_c_fbe) then
425 write(message(1), '(2x,a)') 'Correlation'
426 write(message(2), '(4x,a)') 'Force-based LDA correlation'
427 call messages_info(2, iunit=iunit, namespace=namespace)
428
429 else if (functl%family /= xc_family_none) then ! all the other families
430 select case (functl%type)
431 case (xc_exchange)
432 write(message(1), '(2x,a)') 'Exchange'
433 case (xc_correlation)
434 write(message(1), '(2x,a)') 'Correlation'
435 case (xc_exchange_correlation)
436 write(message(1), '(2x,a)') 'Exchange-correlation'
437 case (xc_kinetic)
438 call messages_not_implemented("kinetic-energy functionals", namespace=namespace)
439 case default
440 write(message(1), '(a,i6,a,i6)') "Unknown functional type ", functl%type, ' for functional ', functl%id
441 call messages_fatal(1, namespace=namespace)
442 end select
443
444 select case (functl%family)
445 case (xc_family_lda)
446 write(family,'(a)') "LDA"
447 case (xc_family_gga)
448 write(family,'(a)') "GGA"
449 case (xc_family_mgga)
450 write(family,'(a)') "MGGA"
451 case (xc_family_lca)
452 call messages_not_implemented("Support of LCA functional", namespace=namespace)
453 case (xc_family_hyb_lda)
454 write(family,'(a)') "Hybrid LDA"
455 case (xc_family_hyb_gga)
456 write(family,'(a)') "Hybrid GGA"
457 case (xc_family_hyb_mgga)
458 write(family,'(a)') "Hybrid MGGA"
459 end select
460 write(message(2), '(4x,4a)') trim(xc_f03_func_info_get_name(functl%info)), ' (', trim(family), ')'
461 call messages_info(2, iunit=iunit, namespace=namespace)
462
463 ii = 0
464 do while(ii >= 0)
465 write(message(1), '(4x,a,i1,2a)') '[', ii + 1, '] ', &
466 trim(xc_f03_func_reference_get_ref(xc_f03_func_info_get_references(functl%info, ii)))
467 call messages_info(1, iunit=iunit, namespace=namespace)
468 end do
469 end if
470
471 pop_sub(xc_functional_write_info)
472 end subroutine xc_functional_write_info
473
474
476 integer function xc_get_default_functional(dim, pseudo_x_functional, pseudo_c_functional) result(default)
477 integer, intent(in) :: dim
478 integer, intent(in) :: pseudo_x_functional, pseudo_c_functional
479
480 push_sub(xc_get_default_functional)
481
482 default = 0
483
484 if (pseudo_x_functional /= pseudo_exchange_any) then
485 default = pseudo_x_functional
486 else
487 select case (dim)
488 case (3)
489 default = xc_lda_x
490 case (2)
491 default = xc_lda_x_2d
492 case (1)
493 default = xc_lda_x_1d_soft
494 end select
495 end if
496
497 assert(default >= 0)
498
499 if (pseudo_c_functional /= pseudo_correlation_any) then
500 default = default + libxc_c_index*pseudo_c_functional
501 else
502 select case (dim)
503 case (3)
504 default = default + libxc_c_index * xc_lda_c_pz_mod
505 case (2)
506 default = default + libxc_c_index * xc_lda_c_2d_amgb
507 case (1)
508 default = default + libxc_c_index * xc_lda_c_1d_csc
509 end select
510 end if
511
512 assert(default >= 0)
513
514 pop_sub(xc_get_default_functional)
515 end function xc_get_default_functional
516
518 subroutine xc_check_dimension(functl, ndim, namespace)
519 type(xc_functional_t), intent(in) :: functl
520 integer, intent(in) :: ndim
521 type(namespace_t), intent(in) :: namespace
522
523 logical :: ok
524
525 push_sub(xc_check_dimension)
526
527 ! Check that the functional is used for the correct space dimension
528 ok = bitand(functl%flags, xc_flags_1d) /= 0
529 if (ndim == 1 .and. (.not. ok)) then
530 message(1) = 'Cannot use the specified functionals in 1D.'
531 call messages_fatal(1, namespace=namespace)
532 end if
533
534 ok = bitand(functl%flags, xc_flags_2d) /= 0
535 if (ndim == 2 .and. (.not. ok)) then
536 message(1) = 'Cannot use the specified functionals in 2D.'
537 call messages_fatal(1, namespace=namespace)
538 end if
539
540 ok = bitand(functl%flags, xc_flags_3d) /= 0
541 if (ndim == 3 .and. (.not. ok)) then
542 message(1) = 'Cannot use the specified functionals in 3D.'
543 call messages_fatal(1, namespace=namespace)
544 end if
545
546 pop_sub(xc_check_dimension)
547 end subroutine xc_check_dimension
548
550 logical function xc_functional_is_not_size_consistent(functl, namespace)
551 type(xc_functional_t), intent(in) :: functl
552 type(namespace_t), intent(in) :: namespace
553
554 integer :: n_ext_params, ip
555 character(len=128) :: ext_params_name
556
557 xc_functional_is_not_size_consistent = .false.
558 if (.not. functl%from_libxc) return
559
560 push_sub(xc_functional_is_not_size_consistent)
561
562 ! External parameters
563 n_ext_params = xc_f03_func_info_get_n_ext_params(functl%info)
564 do ip = 0, n_ext_params-1
565 ext_params_name = xc_f03_func_info_get_ext_params_name(functl%info, ip)
566 ! Internal parameters starts with '_'
567 if (ext_params_name(1:1) == '_') cycle
568 if (trim(xc_f03_func_info_get_ext_params_description(functl%info, ip)) == 'Number of electrons') then
569 xc_functional_is_not_size_consistent = .true.
570 end if
571 end do
572
573 ! We only support size inconsistent functionals with a single parameter at the moment
574 if (xc_functional_is_not_size_consistent .and. n_ext_params > 1) then
575 message(1) = 'The selected functional is currently not supported.'
576 call messages_fatal(1, namespace=namespace)
577 end if
578
579 pop_sub(xc_functional_is_not_size_consistent)
580 end function xc_functional_is_not_size_consistent
581
582 logical pure function xc_functional_is_energy_functional(functl)
583 type(xc_functional_t), intent(in) :: functl
584
585 xc_functional_is_energy_functional = bitand(functl%flags, xc_flags_have_exc) /= 0
586 end function xc_functional_is_energy_functional
587
588end module xc_functional_oct_m
589
590!! Local Variables:
591!! mode: f90
592!! coding: utf-8
593!! End:
real(real64), parameter, public m_one
Definition: global.F90:189
subroutine, public libvdwxc_end(this)
Definition: libvdwxc.F90:481
subroutine, public libvdwxc_init(libvdwxc, namespace, functional)
Definition: libvdwxc.F90:161
subroutine, public libvdwxc_write_info(this, iunit, namespace)
Definition: libvdwxc.F90:207
subroutine, public messages_not_implemented(feature, namespace)
Definition: messages.F90:1113
subroutine, public messages_warning(no_lines, all_nodes, namespace)
Definition: messages.F90:537
subroutine, public messages_obsolete_variable(namespace, name, rep)
Definition: messages.F90:1045
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
Definition: messages.F90:160
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
Definition: messages.F90:414
subroutine, public messages_input_error(namespace, var, details, row, column)
Definition: messages.F90:713
subroutine, public messages_experimental(name, namespace)
Definition: messages.F90:1085
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
Definition: messages.F90:616
logical function, public parse_is_defined(namespace, name)
Definition: parser.F90:502
integer, parameter, public pseudo_correlation_any
Definition: pseudo.F90:192
integer, parameter, public pseudo_exchange_any
Definition: pseudo.F90:188
int true(void)