TABLE OF CONTENTS


ABINIT/m_energies [ Modules ]

[ Top ] [ Modules ]

NAME

  m_energies

FUNCTION

  This module provides the definition of the energies used
  to store energies from GS calculations.

COPYRIGHT

 Copyright (C) 2008-2024 ABINIT group (MT, DC)
 This file is distributed under the terms of the
 GNU General Public License, see ~abinit/COPYING
 or http://www.gnu.org/copyleft/gpl.txt .

SOURCE

17 #if defined HAVE_CONFIG_H
18 #include "config.h"
19 #endif
20 
21 #include "abi_common.h"
22 
23 module m_energies
24 
25  use defs_basis
26  use m_abicore
27  use m_errors
28  use m_nctk
29  use m_dtset
30 #ifdef HAVE_NETCDF
31  use netcdf
32 #endif
33 
34  implicit none
35 
36  private
37 
38 !public parameter
39  integer, public, parameter :: n_energies=38

m_energies/energies_copy [ Functions ]

[ Top ] [ m_energies ] [ Functions ]

NAME

 energies_copy

FUNCTION

 Copy a type(energies_type) object into another

INPUTS

   energies_in <type(energies_type)>=input values (to copy)

OUTPUT

   energies_out <type(energies_type)>=output values

SOURCE

285  subroutine energies_copy(energies_in,energies_out)
286 
287 !Arguments ------------------------------------
288 !scalars
289  type(energies_type),intent(in)  :: energies_in
290  type(energies_type),intent(out) :: energies_out
291 
292 !*************************************************************************
293 
294 !@energies_type
295 
296  energies_out%e_chempot            = energies_in%e_chempot
297  energies_out%e_constrained_dft    = energies_in%e_constrained_dft
298  energies_out%e_corepsp            = energies_in%e_corepsp
299  energies_out%e_corepspdc          = energies_in%e_corepspdc
300  energies_out%e_eigenvalues        = energies_in%e_eigenvalues
301  energies_out%e_elecfield          = energies_in%e_elecfield
302  energies_out%e_electronpositron   = energies_in%e_electronpositron
303  energies_out%edc_electronpositron = energies_in%edc_electronpositron
304  energies_out%e0_electronpositron  = energies_in%e0_electronpositron
305  energies_out%entropy              = energies_in%entropy
306  energies_out%e_entropy            = energies_in%e_entropy
307  energies_out%e_ewald              = energies_in%e_ewald
308  energies_out%e_exactX             = energies_in%e_exactX
309  energies_out%e_extfpmd            = energies_in%e_extfpmd
310  energies_out%edc_extfpmd          = energies_in%edc_extfpmd
311  energies_out%e_fermie             = energies_in%e_fermie
312  energies_out%e_fermih             = energies_in%e_fermih
313  energies_out%e_fock               = energies_in%e_fock
314  energies_out%e_fockdc             = energies_in%e_fockdc
315  energies_out%e_fock0              = energies_in%e_fock0
316  energies_out%e_hartree            = energies_in%e_hartree
317  energies_out%e_hybcomp_E0         = energies_in%e_hybcomp_E0
318  energies_out%e_hybcomp_v0         = energies_in%e_hybcomp_v0
319  energies_out%e_hybcomp_v          = energies_in%e_hybcomp_v
320  energies_out%e_kinetic            = energies_in%e_kinetic
321  energies_out%e_localpsp           = energies_in%e_localpsp
322  energies_out%e_magfield           = energies_in%e_magfield
323  energies_out%e_monopole           = energies_in%e_monopole
324  energies_out%e_nlpsp_vfock        = energies_in%e_nlpsp_vfock
325  energies_out%e_nucdip             = energies_in%e_nucdip
326  energies_out%e_paw                = energies_in%e_paw
327  energies_out%e_pawdc              = energies_in%e_pawdc
328  energies_out%e_sicdc              = energies_in%e_sicdc
329  energies_out%e_vdw_dftd           = energies_in%e_vdw_dftd
330  energies_out%e_xc                 = energies_in%e_xc
331  energies_out%e_xcdc               = energies_in%e_xcdc
332  energies_out%e_xc_vdw             = energies_in%e_xc_vdw
333  energies_out%h0                   = energies_in%h0
334  energies_out%e_zeeman             = energies_in%e_zeeman
335 
336 end subroutine energies_copy

m_energies/energies_eval_eint [ Functions ]

[ Top ] [ m_energies ] [ Functions ]

NAME

 energies_eval_eint

FUNCTION

 Compute the internal energy (Direct and DC as it was in prtene)

INPUTS

  energies <type(energies_type)>=values of parts of total energy
  dtset <type(dataset_type)>=all input variables in this dataset
   | berryphase
   | kptopt
   | occopt
   | positron=option for electron-positron calculation
  usepaw= 0 for non paw calculation; =1 for paw calculation
  usewvl= 0 for PW calculation; =1 for WVL calculation

OUTPUT

  optdc=option for double counting scheme
  eint=internal energy with direct scheme
  eintdc=internal energy with double counting scheme

SIDE EFFECTS

SOURCE

490  subroutine energies_eval_eint(energies,dtset,usepaw,optdc,eint,eintdc)
491 
492 !Arguments ------------------------------------
493 !scalars
494  type(energies_type),intent(in) :: energies
495  type(dataset_type),intent(in) :: dtset
496  integer,intent(in) :: usepaw
497  integer , intent(out) :: optdc
498  real(dp), intent(out) :: eint
499  real(dp), intent(out) :: eintdc
500 
501 !Local variables-------------------------------
502 ! Do not modify the length of this string
503 !scalars
504  logical :: positron
505  logical :: wvlbigdft=.false.
506 
507 ! *************************************************************************
508 
509 !If usewvl: wvlbigdft indicates that the BigDFT workflow will be followed
510  wvlbigdft=(dtset%usewvl==1.and.dtset%wvl_bigdft_comp==1)
511 
512  optdc=-1;positron=(dtset%positron/=0)
513  if (.not.positron) then
514    if ((abs(energies%e_xcdc)<1.e-15_dp).and.(abs(energies%e_fockdc)<1.e-15_dp)) optdc=0
515    if (abs(energies%e_localpsp)<1.e-15_dp.and.(abs(energies%e_xcdc)>1.e-15_dp.or.abs(energies%e_fockdc)>1.e-15_dp)) optdc=1
516    if (abs(energies%e_localpsp)>1.e-15_dp.and.(abs(energies%e_xcdc)>1.e-15_dp.or.abs(energies%e_fockdc)>1.e-15_dp)) optdc=2
517    if (wvlbigdft .and. dtset%iscf > 0) optdc=1
518  else
519    if (abs(energies%edc_electronpositron)<1.e-15_dp) optdc=0
520    if (abs(energies%e_electronpositron)<1.e-15_dp.and.abs(energies%edc_electronpositron)>1.e-15_dp) optdc=1
521    if (abs(energies%e_electronpositron)>1.e-15_dp.and.abs(energies%edc_electronpositron)>1.e-15_dp) optdc=2
522  end if
523 
524  eint  = zero
525  eintdc = zero
526 
527 !============= Evaluate some parts of the energy ===========
528 
529  if (optdc==0.or.optdc==2) then
530    eint = energies%e_kinetic + energies%e_hartree + energies%e_xc+ &
531 !&  +two*energies%e_fock-energies%e_fock0+&  ! The Fock energy is already included in the non_local part ...
532 !&  energies%e_nlpsp_vfock - energies%e_fock0+&
533 &   energies%e_hybcomp_E0 -energies%e_hybcomp_v0 + energies%e_hybcomp_v+&
534 &   energies%e_localpsp + energies%e_corepsp + energies%e_constrained_dft+&
535 &   energies%e_nucdip
536 
537 !  See similar section in m_scfcv_core.F90
538 !  XG 20181025 This gives a variational energy in case of NCPP with all bands occupied - not yet for metals.
539    if (usepaw==0) eint = eint + energies%e_nlpsp_vfock - energies%e_fock0
540 !  XG 20181025 I was expecting the following to give also a variational energy in case of PAW, but this is not true.
541 !  if (usepaw==1) eint = eint + energies%e_paw + energies%e_nlpsp_vfock - energies%e_fock0
542 !  XG 20181025 So, the following is giving a non-variational expression ...
543    if (usepaw==1) eint = eint + energies%e_paw + energies%e_fock
544 
545    if (dtset%berryopt==4 .or. dtset%berryopt==6 .or. dtset%berryopt==7 .or.  &
546 &   dtset%berryopt==14 .or. dtset%berryopt==16 .or. dtset%berryopt==17) eint=eint+energies%e_elecfield    !!HONG
547    eint = eint + energies%e_ewald + energies%e_chempot + energies%e_vdw_dftd
548    if (positron) eint=eint+energies%e0_electronpositron+energies%e_electronpositron
549    if(abs(energies%e_extfpmd)>tiny(0.0_dp)) eint=eint+energies%e_extfpmd
550  end if
551  if (optdc>=1) then
552    eintdc = energies%e_eigenvalues - energies%e_hartree + energies%e_xc &
553 &   + energies%e_hybcomp_E0 - energies%e_hybcomp_v0 &
554 &   - energies%e_xcdc + energies%e_corepsp - energies%e_corepspdc-energies%e_fock0
555    if (usepaw==1) eintdc = eintdc + energies%e_pawdc
556    if (dtset%berryopt==4 .or. dtset%berryopt==6 .or. dtset%berryopt==7 .or.  &
557 &   dtset%berryopt==14 .or. dtset%berryopt==16 .or. dtset%berryopt==17) eintdc = eintdc + energies%e_elecfield
558    eintdc = eintdc + energies%e_ewald + energies%e_chempot + energies%e_vdw_dftd + energies%e_constrained_dft
559    if (positron) eintdc=eintdc-energies%edc_electronpositron &
560 &   +energies%e0_electronpositron+energies%e_electronpositron
561    if(abs(energies%e_extfpmd)>tiny(0.0_dp)) eintdc=eintdc+energies%edc_extfpmd
562  end if
563 
564 end subroutine energies_eval_eint

m_energies/energies_init [ Functions ]

[ Top ] [ m_energies ] [ Functions ]

NAME

 energies_init

FUNCTION

 Set zero in all values of a type(energies_type) object

INPUTS

OUTPUT

   energies <type(energies_type)>=values to initialise

SOURCE

214 subroutine energies_init(energies)
215 
216 !Arguments ------------------------------------
217 !scalars
218  type(energies_type),intent(out) :: energies
219 
220 ! *************************************************************************
221 
222 !@energies_type
223 
224  energies%e_chempot     = zero
225  energies%e_constrained_dft    = zero
226  energies%e_corepsp     = zero
227  energies%e_corepspdc   = zero
228  energies%e_eigenvalues = zero
229  energies%e_elecfield   = zero
230  energies%e_electronpositron   = zero
231  energies%edc_electronpositron = zero
232  energies%e0_electronpositron  = zero
233  energies%e_entropy     = zero
234  energies%e_exactX      = zero
235  energies%entropy       = zero
236  energies%e_ewald       = zero
237  energies%e_extfpmd     = zero
238  energies%edc_extfpmd   = zero
239  energies%e_fermie      = zero
240  energies%e_fermih      = zero
241  energies%e_fock        = zero
242  energies%e_fockdc      = zero
243  energies%e_fock0       = zero
244  energies%e_hartree     = zero
245  energies%e_hybcomp_E0  = zero
246  energies%e_hybcomp_v0  = zero
247  energies%e_hybcomp_v   = zero
248  energies%e_kinetic     = zero
249  energies%e_localpsp    = zero
250  energies%e_magfield    = zero
251  energies%e_monopole    = zero
252  energies%e_nlpsp_vfock = zero
253  energies%e_nucdip      = zero
254  energies%e_paw         = zero
255  energies%e_pawdc       = zero
256  energies%e_sicdc       = zero
257  energies%e_vdw_dftd    = zero
258  energies%e_xc          = zero
259  energies%e_xcdc        = zero
260  energies%e_xc_vdw      = zero
261  energies%h0            = zero
262  energies%e_zeeman      = zero
263 
264 end subroutine energies_init

m_energies/energies_ncwrite [ Functions ]

[ Top ] [ m_energies ] [ Functions ]

NAME

 energies_ncwrite

FUNCTION

  Write the contenc of the datatype in a netcdf file.

INPUTS

  ncid=NC file handle

OUTPUT

  Only writing.

SOURCE

584 subroutine energies_ncwrite(enes, ncid)
585 
586 !Arguments ------------------------------------
587 !scalars
588  integer,intent(in) :: ncid
589  type(energies_type),intent(in) :: enes
590 
591 !Local variables-------------------------------
592 !scalars
593 #ifdef HAVE_NETCDF
594  integer :: ncerr
595 
596 ! *************************************************************************
597 
598 !@energies_type
599  ncerr = nctk_defnwrite_dpvars(ncid, [character(len=nctk_slen) :: &
600   "e_chempot", "e_constrained_dft", "e_corepsp", "e_corepspdc", "e_eigenvalues", "e_elecfield", &
601   "e_electronpositron", "edc_electronpositron", "e0_electronpositron",&
602   "e_entropy", "entropy", "e_ewald", &
603   "e_exactX", "e_extfpmd", "edc_extfpmd", "e_fermie", &
604   "e_fock", "e_fockdc", "e_fock0", "e_hartree", "e_hybcomp_E0", "e_hybcomp_v0", "e_hybcomp_v", "e_kinetic",&
605   "e_localpsp", "e_magfield", "e_monopole", "e_nlpsp_vfock", "e_nucdip", &
606   "e_paw", "e_pawdc", "e_sicdc", "e_vdw_dftd", &
607   "e_xc", "e_xcdc", "e_xc_vdw", &
608   "h0", "e_zeeman", "e_fermih"], &
609   [enes%e_chempot, enes%e_constrained_dft, enes%e_corepsp, enes%e_corepspdc, enes%e_eigenvalues, enes%e_elecfield, &
610    enes%e_electronpositron, enes%edc_electronpositron, enes%e0_electronpositron,&
611    enes%e_entropy, enes%entropy, enes%e_ewald, &
612    enes%e_exactX, enes%e_extfpmd, enes%edc_extfpmd, enes%e_fermie, &
613    enes%e_fock, enes%e_fockdc, enes%e_fock0, enes%e_hartree, &
614    enes%e_hybcomp_E0, enes%e_hybcomp_v0, enes%e_hybcomp_v, enes%e_kinetic,&
615    enes%e_localpsp, enes%e_magfield, enes%e_monopole, enes%e_nlpsp_vfock, enes%e_nucdip, &
616    enes%e_paw, enes%e_pawdc, enes%e_sicdc, enes%e_vdw_dftd,&
617    enes%e_xc, enes%e_xcdc, enes%e_xc_vdw,&
618    enes%h0,enes%e_zeeman,enes%e_fermih])
619 
620  NCF_CHECK(ncerr)
621 
622 #else
623  ABI_ERROR("ETSF-IO support is not activated.")
624 #endif
625 
626 end subroutine energies_ncwrite

m_energies/energies_to_array [ Functions ]

[ Top ] [ m_energies ] [ Functions ]

NAME

 energies_to_array

FUNCTION

 Transfer a energies datastructure into a single array or
 transfer an array into a energies datastructure

INPUTS

   option= 1: copy energies datastructure into an array
   option=-1: copy an array into a energies datastructure

OUTPUT

SIDE EFFECTS

   energies <type(energies_type)>=energies stored in a datastructure
   energies_array=energies stored in a single array

SOURCE

362  subroutine energies_to_array(energies,energies_array,option)
363 
364 !Arguments ------------------------------------
365 !scalars
366  integer,intent(in) :: option
367 !arrays
368  real(dp),intent(inout) :: energies_array(n_energies)
369  type(energies_type),intent(inout)  :: energies
370 
371 !*************************************************************************
372 
373 !@energies_type
374 
375  if (option==1) then
376    energies_array(1)=energies%e_chempot
377    energies_array(2)=energies%e_constrained_dft
378    energies_array(3)=energies%e_corepsp
379    energies_array(4)=energies%e_corepspdc
380    energies_array(5)=energies%e_eigenvalues
381    energies_array(6)=energies%e_elecfield
382    energies_array(7)=energies%e_electronpositron
383    energies_array(8)=energies%edc_electronpositron
384    energies_array(9)=energies%e0_electronpositron
385    energies_array(10)=energies%entropy
386    energies_array(11)=energies%e_entropy
387    energies_array(12)=energies%e_ewald
388    energies_array(13)=energies%e_exactX
389    energies_array(14)=energies%e_extfpmd
390    energies_array(15)=energies%edc_extfpmd
391    energies_array(16)=energies%e_fermie
392    energies_array(17)=energies%e_fock
393    energies_array(18)=energies%e_fockdc
394    energies_array(19)=energies%e_fock0
395    energies_array(20)=energies%e_hartree
396    energies_array(21)=energies%e_hybcomp_E0
397    energies_array(22)=energies%e_hybcomp_v0
398    energies_array(23)=energies%e_hybcomp_v
399    energies_array(24)=energies%e_kinetic
400    energies_array(25)=energies%e_localpsp
401    energies_array(26)=energies%e_magfield
402    energies_array(27)=energies%e_monopole
403    energies_array(28)=energies%e_nlpsp_vfock
404    energies_array(29)=energies%e_paw
405    energies_array(30)=energies%e_pawdc
406    energies_array(31)=energies%e_sicdc
407    energies_array(32)=energies%e_vdw_dftd
408    energies_array(33)=energies%e_xc
409    energies_array(34)=energies%e_xcdc
410    energies_array(35)=energies%e_xc_vdw
411    energies_array(36)=energies%h0
412    energies_array(37)=energies%e_zeeman
413    energies_array(38)=energies%e_nucdip
414  end if
415 
416  if (option==-1) then
417    energies%e_chempot            = energies_array(1)
418    energies%e_constrained_dft    = energies_array(2)
419    energies%e_corepsp            = energies_array(3)
420    energies%e_corepspdc          = energies_array(4)
421    energies%e_eigenvalues        = energies_array(5)
422    energies%e_elecfield          = energies_array(6)
423    energies%e_electronpositron   = energies_array(7)
424    energies%edc_electronpositron = energies_array(8)
425    energies%e0_electronpositron  = energies_array(9)
426    energies%entropy              = energies_array(10)
427    energies%e_entropy            = energies_array(11)
428    energies%e_ewald              = energies_array(12)
429    energies%e_exactX             = energies_array(13)
430    energies%e_extfpmd            = energies_array(14)
431    energies%edc_extfpmd          = energies_array(15)
432    energies%e_fermie             = energies_array(16)
433    energies%e_fock               = energies_array(17)
434    energies%e_fockdc             = energies_array(18)
435    energies%e_fock0              = energies_array(19)
436    energies%e_hartree            = energies_array(20)
437    energies%e_hybcomp_E0         = energies_array(21)
438    energies%e_hybcomp_v0         = energies_array(22)
439    energies%e_hybcomp_v          = energies_array(23)
440    energies%e_kinetic            = energies_array(24)
441    energies%e_localpsp           = energies_array(25)
442    energies%e_magfield           = energies_array(26)
443    energies%e_monopole           = energies_array(27)
444    energies%e_nlpsp_vfock        = energies_array(28)
445    energies%e_paw                = energies_array(29)
446    energies%e_pawdc              = energies_array(30)
447    energies%e_sicdc              = energies_array(31)
448    energies%e_vdw_dftd           = energies_array(32)
449    energies%e_xc                 = energies_array(33)
450    energies%e_xcdc               = energies_array(34)
451    energies%e_xc_vdw             = energies_array(35)
452    energies%h0                   = energies_array(36)
453    energies%e_zeeman             = energies_array(37)
454    energies%e_nucdip             = energies_array(38)
455  end if
456 
457 end subroutine energies_to_array

m_energies/energies_type [ Types ]

[ Top ] [ m_energies ] [ Types ]

NAME

 energies_type

FUNCTION

 This structured datatype contains all parts of total energy. Not all
 attributes may have a value, depending on the scheme used to
 compute the total energy and several options read from dtset.

SOURCE

 54  type, public :: energies_type
 55 
 56 ! WARNING : if you modify this datatype, please check whether there might be creation/destruction/copy routines,
 57 ! declared in another part of ABINIT, that might need to take into account your modification.
 58 
 59   real(dp) :: e_chempot=zero
 60    ! energy from spatially-varying chemical potential
 61 
 62   real(dp) :: e_constrained_dft=zero
 63    ! correction to energy from constrained dft, to make it variational
 64 
 65   real(dp) :: e_corepsp=zero
 66    ! psp core-core energy
 67 
 68   real(dp) :: e_corepspdc=zero
 69    ! psp core-core energy double-counting
 70 
 71   real(dp) :: e_eigenvalues=zero
 72    ! Sum of the eigenvalues - Band energy (Hartree)
 73    ! (valid for double-counting scheme dtset%optene == 1)
 74 
 75   real(dp) :: e_entropy=zero
 76    ! Entropy energy due to the occupation number smearing (if metal)
 77    ! Value is multiplied by dtset%tsmear, see %entropy for the entropy alone.
 78    ! (valid for metals, dtset%occopt>=3 .and. dtset%occopt<=8)
 79 
 80   real(dp) :: entropy=zero
 81 
 82   real(dp) :: e_elecfield=zero
 83    ! Electric enthalpy, by adding both ionic and electronic contributions
 84 
 85   real(dp) :: e_electronpositron=zero
 86    ! Electron-positron: electron-positron interaction energy
 87 
 88   real(dp) :: edc_electronpositron=zero
 89    ! Electron-positron: double-counting electron-positron interaction energy
 90 
 91   real(dp) :: e0_electronpositron=zero
 92    !  Electron-positron: energy only due to unchanged particles
 93    !                     (if calctype=1, energy due to electrons only)
 94    !                     (if calctype=2, energy due to positron only)
 95 
 96   real(dp) :: e_exactX=zero
 97    ! Fock exact-exchange energy (hartree)
 98 
 99   real(dp) :: e_ewald=zero
100    ! Ewald energy (hartree), store also the ion/ion energy for free boundary conditions.
101 
102   real(dp) :: e_extfpmd=zero
103    ! Kinetic energy contribution of the Extended FPMD model for high temperature simulations
104 
105   real(dp) :: edc_extfpmd=zero
106    ! Double counting term of kinetic energy of the Extended FPMD model
107 
108   real(dp) :: e_fermie=zero
109    ! Fermie energy
110 
111   real(dp) :: e_fermih=zero
112    ! Fermi energy for holes
113 
114   real(dp) :: e_fock=zero
115    ! Fock part of total energy (hartree units)
116 
117   real(dp) :: e_fockdc=zero
118    ! Fock part of energy double counting (hartree units)
119 
120   real(dp) :: e_fock0=zero
121    ! Fock part of total energy, evaluated with the frozen Fock operator (usually in the case of the ACE)
122 
123   real(dp) :: e_hartree=zero
124    ! Hartree part of total energy (hartree units)
125 
126   real(dp) :: e_hybcomp_E0=zero
127    ! First compensation energy in the case of hybrid functionals, due to the use of two different XC functionals
128    ! Term related to energy, at frozen density
129 
130   real(dp) :: e_hybcomp_v0=zero
131    ! Second compensation energy in the case of hybrid functionals, due to the use of two different XC potentials
132    ! Term related to potential, at frozen density
133 
134   real(dp) :: e_hybcomp_v=zero
135    ! Third compensation energy in the case of hybrid functionals, due to the use of two different XC potentials
136    ! Term related to potential, at optimized density
137 
138   real(dp) :: e_kinetic=zero
139    ! Kinetic energy part of total energy.
140    ! (valid for direct scheme, dtset%optene == 0)
141 
142   real(dp) :: e_localpsp=zero
143    ! Local psp energy (hartree)
144 
145   real(dp) :: e_magfield=zero
146    ! Orbital magnetic enthalpy, by adding orbital contribution
147 
148   real(dp) :: e_monopole=zero
149    ! Monopole correction to the total energy for charged supercells
150 
151   real(dp) :: e_nlpsp_vfock=zero
152    ! Nonlocal pseudopotential part of total energy.
153 
154   real(dp) :: e_nucdip=zero
155    ! Energy due to array of nuclear magnetic dipoles
156    ! valid for direct scheme
157 
158   real(dp) :: e_paw=zero
159    ! PAW spherical part energy
160 
161   real(dp) :: e_pawdc=zero
162    ! PAW spherical part double-counting energy
163 
164   real(dp) :: e_sicdc=zero
165    ! Self-interaction energy double-counting
166 
167   real(dp) :: e_vdw_dftd=zero
168    ! Dispersion energy from DFT-D Van der Waals correction (hartree)
169 
170   real(dp) :: e_xc=zero
171    ! Exchange-correlation energy (hartree)
172 
173   real(dp) :: e_xcdc=zero
174    ! enxcdc=exchange-correlation double-counting energy (hartree)
175 
176   real(dp) :: e_xc_vdw=zero
177    ! vdW-DF correction to the XC energy
178 
179   real(dp) :: h0=zero
180    ! h0=e_kinetic+e_localpsp+e_nlpsp_vfock
181 
182   real(dp) :: e_zeeman=zero
183    ! Zeeman spin times magnetic field contribution to the XC energy
184 
185  end type energies_type
186 
187 !public procedures.
188  public :: energies_init
189  public :: energies_copy
190  public :: energies_to_array
191  public :: energies_eval_eint
192  public :: energies_ncwrite