LCOV - code coverage report
Current view: top level - shared/common/src/10_defs - defs_basis.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 88.2 % 34 30
Test Date: 2026-11-08 00:10:28 Functions: 10.3 % 39 4
Branches: 46.2 % 26 12

             Branch data     Line data    Source code
       1                 :             : !!****m* ABINIT/defs_basis
       2                 :             : !! NAME
       3                 :             : !! defs_basis
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !! This module contains definitions for a number of named constants and
       7                 :             : !! physical constants, as well as associated datatypes and methods.
       8                 :             : !!
       9                 :             : !! COPYRIGHT
      10                 :             : !! Copyright (C) 2000-2026 ABINIT group (HM, XG,XW, EB)
      11                 :             : !! This file is distributed under the terms of the
      12                 :             : !! GNU General Public License, see ~abinit/COPYING
      13                 :             : !! or http://www.gnu.org/copyleft/gpl.txt .
      14                 :             : !!
      15                 :             : !! NOTES
      16                 :             : !! Of the named constants,
      17                 :             : !! by far the most important are those that define the 'kind' types of
      18                 :             : !! virtually all the variables used in a (well-written) FORTRAN 90 code
      19                 :             : !! the content of this file is derived from 'Numerical Recipes in Fortran 90'
      20                 :             : !! W.H. Press et al., volume 2 of 'Fortran Numerical Recipes', Cambridge
      21                 :             : !! University Press, Second Edition (1996), p. 937 and 1361
      22                 :             : !!
      23                 :             : !! SOURCE
      24                 :             : 
      25                 :             : #if defined HAVE_CONFIG_H
      26                 :             : #include "config.h"
      27                 :             : #endif
      28                 :             : 
      29                 :             : module defs_basis
      30                 :             : 
      31                 :             : !#ifdef HAVE_FC_ISO_FORTRAN_2008
      32                 :             : ! use ISO_FORTRAN_ENV, only : input_unit, output_unit, error_unit
      33                 :             : !#endif
      34                 :             : 
      35                 :             :  implicit none
      36                 :             : 
      37                 :             : !Keyword 'integer' stands for default integer type
      38                 :             : !and may be used whenever integer are presumed to be small
      39                 :             : 
      40                 :             : !nb of bytes related to an integer subtype n such as -10^(argument) < n < 10^(argument) (this is standard F90)
      41                 :             :  integer, parameter :: i1b=selected_int_kind(2)
      42                 :             :  integer, parameter :: i2b=selected_int_kind(4)
      43                 :             :  integer, parameter :: i4b=selected_int_kind(9)
      44                 :             :  integer, parameter :: i8b=selected_int_kind(18)
      45                 :             : 
      46                 :             : !nb of bytes related to default simple-precision real/complex subtypes
      47                 :             : !(= 4 for many machine architectures, = 8 for e.g. Cray)
      48                 :             :  integer, parameter :: sp=kind(1.0)          ! Single precision should not be used
      49                 :             : 
      50                 :             : !nb of bytes related to default double-precision real/complex subtypes
      51                 :             : !(= 8 for many machine architectures)
      52                 :             :  integer, parameter :: dp=kind(1.0d0)
      53                 :             : 
      54                 :             : ! Please DO NOT USE use complex(dpc) as complex(dp) is completely equivalent.
      55                 :             : ! dpc is still needed because nvfortran with ELPA (eos_nvhpc_23.9_elpa), for unknown reasons,
      56                 :             : ! raises an internal compiler error when compiling m_slk if dpc is not declared here.
      57                 :             :  integer, parameter :: dpc=kind((1.0_dp,1.0_dp))
      58                 :             : 
      59                 :             : !nb of bytes related to GW arrays, that can be tuned from sp to dp independently
      60                 :             : !of other variables in ABINIT. Presently single-precision is the default (see config/specs/options.conf)..
      61                 :             : #if defined HAVE_GW_DPC
      62                 :             :  integer, parameter :: gwp=kind(1.0d0)
      63                 :             : #else
      64                 :             :  integer, parameter :: gwp=kind(1.0)
      65                 :             : #endif
      66                 :             : 
      67                 :             : !The default lengths
      68                 :             : ! TODO: We should increase fnlen to be able to handle multiple pseudos paths in the input file
      69                 :             : ! but it seems that increasing this value triggers bugs in the rest of code because people
      70                 :             : ! do not trim input strings and use character(len=500) :: msg
      71                 :             : 
      72                 :             :  !integer, parameter :: fnlen=264     ! maximum length of file name variables
      73                 :             :  integer, parameter :: fnlen=400     ! maximum length of file name variables
      74                 :             :  integer, parameter :: strlen=2000000 ! maximum length of input string
      75                 :             : 
      76                 :             :  ! The input file used to run the code, allocated and set by parsefile.
      77                 :             :  ! It will be added to the netcdf files in ntck_open_create
      78                 :             :  character(len=:), allocatable, save :: INPUT_STRING
      79                 :             : 
      80                 :             :  integer, parameter :: md5_slen = 32 ! length of strings storing the pseudos' md5 checksum.
      81                 :             :  character(len=md5_slen),parameter :: md5_none = "None"
      82                 :             : 
      83                 :             :  integer, parameter :: abi_slen=80 ! maximum length of string variables
      84                 :             : 
      85                 :             : !Some constants:
      86                 :             : 
      87                 :             : ! UNIX unit numbers: standard input, standard output, ab_out, and a number for temporary access to a file.
      88                 :             : ! Please, use these named constants instead of write(*,*),
      89                 :             : ! it makes the code more readable and easier to change.
      90                 :             : 
      91                 :             : !Default values
      92                 :             :  !integer, parameter :: std_in = input_unit
      93                 :             :  !integer, parameter :: ab_in = input_unit
      94                 :             :  !integer, parameter :: std_out_default = output_unit
      95                 :             :  !integer, parameter :: ab_out_default=7
      96                 :             :  !integer, parameter :: std_err = error_unit
      97                 :             :  integer, parameter :: std_in=5
      98                 :             :  integer, parameter :: ab_in=5
      99                 :             :  integer, parameter :: std_out_default=6
     100                 :             :  integer, parameter :: ab_out_default=7    ! TODO: This should be initialized at run-time.
     101                 :             :  integer, parameter :: std_err=0
     102                 :             : 
     103                 :             :  integer, parameter :: dev_null=-1       ! Fake unit number used to skip the printing in wrtout.
     104                 :             :  integer, parameter :: ab_xml_out = 50   ! this unit is used to print output into an XML file
     105                 :             :  integer, parameter :: tmp_unit=9,tmp_unit2=10
     106                 :             : 
     107                 :             : !These vars should be private and only modifiable via an appropriate method (see below)
     108                 :             :  integer, public, save :: ab_out = ab_out_default
     109                 :             :  integer, public, save :: std_out =  std_out_default
     110                 :             : !It should be put to xmpi_world (but it is not possible for the moment - v6.9)
     111                 :             :  integer, public, save :: abinit_comm_output = -1 !This default value has to be changed at start !!!
     112                 :             : 
     113                 :             : ! the maximum length of a record in a file connected for sequential access.
     114                 :             :  integer,public,parameter :: ABI_RECL=524288  ! 2**19
     115                 :             : 
     116                 :             :  integer,public,parameter :: MAX_NSHIFTK = 210
     117                 :             :  ! Maximum number of shifts in input k-mesh.
     118                 :             : 
     119                 :             : !Real dp constants
     120                 :             :  real(dp), parameter :: zero=0._dp
     121                 :             :  real(dp), parameter :: one=1._dp
     122                 :             :  real(dp), parameter :: two=2._dp
     123                 :             :  real(dp), parameter :: three=3._dp
     124                 :             :  real(dp), parameter :: four=4._dp
     125                 :             :  real(dp), parameter :: five=5._dp
     126                 :             :  real(dp), parameter :: six=6._dp
     127                 :             :  real(dp), parameter :: seven=7._dp
     128                 :             :  real(dp), parameter :: eight=8._dp
     129                 :             :  real(dp), parameter :: nine=9._dp
     130                 :             :  real(dp), parameter :: ten=10._dp
     131                 :             : 
     132                 :             : !Real sp constants
     133                 :             :  real(sp), parameter :: zero_sp=0._sp
     134                 :             :  real(sp), parameter :: one_sp=1._sp
     135                 :             : 
     136                 :             : !Fractionary real constants
     137                 :             :  real(dp), parameter :: half=0.50_dp
     138                 :             :  real(dp), parameter :: onehalf=1.50_dp
     139                 :             :  real(dp), parameter :: third=one/three
     140                 :             :  real(dp), parameter :: quarter=0.25_dp
     141                 :             :  real(dp), parameter :: fifth=0.20_dp
     142                 :             :  real(dp), parameter :: sixth=one/six
     143                 :             :  real(dp), parameter :: seventh=one/seven
     144                 :             :  real(dp), parameter :: eighth=0.125_dp
     145                 :             :  real(dp), parameter :: ninth=one/nine
     146                 :             :  real(dp), parameter :: two_thirds=two*third
     147                 :             :  real(dp), parameter :: four_thirds=four*third
     148                 :             :  real(dp), parameter :: five_thirds=five*third
     149                 :             :  real(dp), parameter :: three_quarters=0.75_dp
     150                 :             :  real(dp), parameter :: three_fifth=three/five
     151                 :             : 
     152                 :             : !Real constants related to the golden number
     153                 :             :  real(dp), parameter :: gold=1.618033988749894848204586834365638117720309179_dp
     154                 :             :  real(dp), parameter :: goldenratio=two-gold
     155                 :             : 
     156                 :             : !Real constants derived from pi
     157                 :             :  real(dp), parameter :: pi=3.141592653589793238462643383279502884197_dp
     158                 :             :  real(dp), parameter :: two_pi=two*pi
     159                 :             :  real(dp), parameter :: four_pi=four*pi
     160                 :             :  real(dp), parameter :: piinv=one/pi
     161                 :             : !The following are not used
     162                 :             : !real(dp), parameter :: rad_to_deg=180._dp/pi
     163                 :             : !real(dp), parameter :: deg_to_rad=one/rad_to_deg
     164                 :             : !real(dp), parameter :: half_pi=pi*half
     165                 :             : !real(dp), parameter :: third_pi=pi*third
     166                 :             : !real(dp), parameter :: quarter_pi=pi*quarter
     167                 :             : !real(dp), parameter :: two_thirds_pi=two_thirds*pi
     168                 :             : 
     169                 :             : !Real precision
     170                 :             :  real(dp), parameter :: greatest_real = huge(one)
     171                 :             :  real(dp), parameter :: smallest_real = -greatest_real
     172                 :             :  real(dp), parameter :: tol1= 0.1_dp
     173                 :             :  real(dp), parameter :: tol2= 0.01_dp
     174                 :             :  real(dp), parameter :: tol3= 0.001_dp
     175                 :             :  real(dp), parameter :: tol4= 0.0001_dp
     176                 :             :  real(dp), parameter :: tol5= 0.00001_dp
     177                 :             :  real(dp), parameter :: tol6= 0.000001_dp
     178                 :             :  real(dp), parameter :: tol7= 0.0000001_dp
     179                 :             :  real(dp), parameter :: tol8= 0.00000001_dp
     180                 :             :  real(dp), parameter :: tol9= 0.000000001_dp
     181                 :             :  real(dp), parameter :: tol10=0.0000000001_dp
     182                 :             :  real(dp), parameter :: tol11=0.00000000001_dp
     183                 :             :  real(dp), parameter :: tol12=0.000000000001_dp
     184                 :             :  real(dp), parameter :: tol13=0.0000000000001_dp
     185                 :             :  real(dp), parameter :: tol14=0.00000000000001_dp
     186                 :             :  real(dp), parameter :: tol15=0.000000000000001_dp
     187                 :             :  real(dp), parameter :: tol16=0.0000000000000001_dp
     188                 :             :  real(dp), parameter :: tol17=0.00000000000000001_dp
     189                 :             :  real(dp), parameter :: tol18=0.000000000000000001_dp
     190                 :             :  real(dp), parameter :: tol19=0.0000000000000000001_dp
     191                 :             :  real(dp), parameter :: tol20=0.00000000000000000001_dp
     192                 :             :  real(dp), parameter :: tol30=1.0e-30_dp
     193                 :             : 
     194                 :             : !real constants derived from sqrt(n.)
     195                 :             :  real(dp), parameter :: sqrt2=1.4142135623730950488016887242096939_dp
     196                 :             :  real(dp), parameter :: half_sqrt2=0.70710678118654752440084436210484697_dp
     197                 :             :  real(dp), parameter :: sqrt3=1.7320508075688772935274463415058739_dp
     198                 :             :  real(dp), parameter :: half_sqrt3=0.86602540378443864676372317075293693_dp
     199                 :             :  real(dp), parameter :: sqrthalf=0.70710678118654752440084436210484697_dp
     200                 :             : 
     201                 :             : !Conversion factors of common use, not directly related to physical quantities.
     202                 :             :  real(dp), parameter :: b2Mb=one/1024.0_dp**2  ! conversion factor bytes --> Mbytes
     203                 :             :  real(dp), parameter :: b2Gb=b2Mb/1024.0_dp    ! conversion factor bytes --> Gbytes
     204                 :             : 
     205                 :             :  ! This value is used as sentinel to initialize real values that are "undefined" i.e.
     206                 :             :  ! values that cannot be computed or values that do not make any sense in a particular context
     207                 :             :  ! e.g. stress tensor in NSCF calculations. The sentinel is used the yaml routines to print "undef" instead of the
     208                 :             :  ! numerical value.
     209                 :             :  real(dp),parameter :: MAGIC_UNDEF = 9.9999999999D+99
     210                 :             : 
     211                 :             :  ! Max Memory in Mb available for a MPI processor
     212                 :             :  ! This quantity might be used at runtime to determine how to distribute memory.
     213                 :             :  ! The default value (2Gb) can be changed at runtime via the command line interface.
     214                 :             :  real(dp), save, protected :: mem_per_cpu_mb = two * 1024_dp
     215                 :             : 
     216                 :             : !=========================================================
     217                 :             : !First part of physical constant definitions
     218                 :             : 
     219                 :             : ! Previous values from NIST 2006 from http://physics.nist.gov/cuu/Constants/index.html
     220                 :             : 
     221                 :             : !real(dp), parameter :: Bohr_Ang=0.52917720859_dp    ! 1 Bohr, in Angstrom
     222                 :             : !real(dp), parameter :: Ang_Bohr = one / Bohr_Ang  ! 1 Angstrom in Bohr
     223                 :             : !real(dp), parameter :: Bohr_meter=Bohr_Ang * 1.d-10 ! 1 Bohr in meter
     224                 :             : !real(dp), parameter :: Bohr_cm=Bohr_meter * 100_dp ! 1 Bohr in cm
     225                 :             : !real(dp), parameter :: Ha_cmm1=219474.6313705_dp  ! 1 Hartree in cm^-1
     226                 :             : !real(dp), parameter :: Ha_eV=27.21138386_dp ! 1 Hartree in eV
     227                 :             : !real(dp), parameter :: eV_Ha=one/Ha_eV      ! 1 eV in Hartree
     228                 :             : !real(dp), parameter :: Ha_meV=Ha_eV*1000_dp ! 1 Hartree in meV
     229                 :             : !real(dp), parameter :: Ha_K=315774.65_dp ! 1Hartree in Kelvin
     230                 :             : !real(dp), parameter :: Ha_THz=6579.683920722_dp ! 1 Hartree in THz
     231                 :             : !real(dp), parameter :: Ha_s=Ha_THz*1e12*two_pi ! 1 Hartree in s
     232                 :             : !real(dp), parameter :: Ha_J=4.35974394d-18    !1 Hartree in J
     233                 :             : 
     234                 :             : !real(dp), parameter :: e_Cb=1.602176487d-19 ! minus the electron charge in Coulomb
     235                 :             : !real(dp), parameter :: kb_SI=1.380649d-23  ! Boltzmann constant in Joule/K (CODATA 2017 value.)
     236                 :             : !real(dp), parameter :: Avogadro=6.02214179d23 ! per mole
     237                 :             : !real(dp), parameter :: Speed_Light_SI=2.99792458d8 ! speed of light in SI
     238                 :             : 
     239                 :             : ! 09/2025 [SP] update with 2022 NIST values from the same website.
     240                 :             : !         See also P. J. Mohr et al., Review Mod. Phys. 97, 025002 (2025)
     241                 :             : !
     242                 :             :  real(dp), parameter :: Bohr_Ang     = 0.529177210544_dp      ! 1 Bohr, in Angstrom
     243                 :             :  real(dp), parameter :: Ang_Bohr     = one / Bohr_Ang         ! 1 Angstrom in Bohr
     244                 :             :  real(dp), parameter :: Bohr_meter   = Bohr_Ang * 1.d-10      ! 1 Bohr in meter
     245                 :             :  real(dp), parameter :: Bohr_cm      = Bohr_meter * 100_dp    ! 1 Bohr in cm
     246                 :             :  real(dp), parameter :: Ha_eV        = 27.211386245981_dp     ! 1 Hartree in eV
     247                 :             :  real(dp), parameter :: Ha_cmm1      = 219474.63136314_dp     ! 1 Hartree in cm^-1
     248                 :             :  real(dp), parameter :: eV_Ha        = one / Ha_eV            ! 1 eV in Hartree
     249                 :             :  real(dp), parameter :: Ha_meV       = Ha_eV * 1000_dp        ! 1 Hartree in meV
     250                 :             :  real(dp), parameter :: Ha_K         = 315775.02480398_dp     ! 1 Hartree in Kelvin
     251                 :             :  real(dp), parameter :: Ha_THz       = 6579.6839204999_dp     ! 1 Hartree in THz
     252                 :             :  real(dp), parameter :: Ha_s         = Ha_THz * 1e12 * two_pi ! 1 Hartree in s
     253                 :             :  real(dp), parameter :: Ha_J         = 4.3597447222060d-18    ! 1 Hartree in J
     254                 :             : 
     255                 :             :  ! Since 2019, the following constants have been defined and are now exact [SP].
     256                 :             :  real(dp), parameter :: e_Cb         = 1.602176634d-19        ! minus the electron charge in Coulomb
     257                 :             :  real(dp), parameter :: kb_SI        = 1.380649d-23           ! Boltzmann constant in Joule/K
     258                 :             :  real(dp), parameter :: Avogadro     = 6.02214076d23          ! per mole
     259                 :             :  real(dp), parameter :: Speed_Light_SI     = 299792458_dp           ! Speed of light in vacuum (m/s)
     260                 :             :  ! Note: In SI, c is fixed and the fine structure constant (alpha) is measured.
     261                 :             :  !       In a.u., alpha is fixed and c is measured. Be carefull when using them.
     262                 :             :  !       Here we define c.
     263                 :             : 
     264                 :             : !=========================================================
     265                 :             : !Second part of physical constant definitions
     266                 :             : 
     267                 :             : ! Previous values from NIST 2006 from http://physics.nist.gov/cuu/Constants/index.html
     268                 :             : 
     269                 :             : !real(dp), parameter :: kb_HaK=8.617343d-5/Ha_eV ! Boltzmann constant in Ha/K
     270                 :             : !real(dp), parameter :: kb_THzK=kb_HaK*Ha_THz ! Boltzmann constant in THz/K
     271                 :             : !real(dp), parameter :: amu_emass=1.660538782d-27/9.10938215d-31 ! 1 atomic mass unit in electronic mass
     272                 :             : !real(dp), parameter :: HaBohr3_GPa=Ha_eV/Bohr_Ang**3*e_Cb*1.0d+21 ! 1 Ha/Bohr^3 in GPa
     273                 :             : !real(dp), parameter :: Ohmcm=two*pi*Ha_THz*ninth*ten ! 1 Ohm.cm in atomic units
     274                 :             : !!real(dp), parameter :: eps0=8.854187817d-12 ! permittivity of free space in F/m
     275                 :             : !real(dp), parameter :: eps0=one/(four_pi*0.0000001_dp*299792458.0_dp**2)
     276                 :             : !real(dp), parameter :: AmuBohr2_Cm2=e_Cb*1.0d20/(Bohr_Ang*Bohr_Ang)
     277                 :             : 
     278                 :             : ! 09/2025 [SP] update with 2022 NIST values from the same website.
     279                 :             : !         See also P. J. Mohr et al., Review Mod. Phys. 97, 025002 (2025)
     280                 :             : 
     281                 :             :  real(dp), parameter :: kb_HaK       = kb_SI / Ha_J           ! Boltzmann constant in Ha/K
     282                 :             :  real(dp), parameter :: kb_THzK      = kb_HaK * Ha_THz        ! Boltzmann constant in THz/K
     283                 :             :  real(dp), parameter :: amu_emass    = 1.66053906892d-27 / 9.1093837139d-31         ! 1 atomic mass unit in electronic mass
     284                 :             :  real(dp), parameter :: HaBohr3_GPa  = Ha_eV / Bohr_Ang**3 * e_Cb * 1.0d+21         ! 1 Ha/Bohr^3 in GPa
     285                 :             :  real(dp), parameter :: Ohmcm        = two * pi * Ha_THz * ninth * ten              ! 1 Ohm.cm in atomic units
     286                 :             :  real(dp), parameter :: eps0         = one / (four_pi * 0.0000001_dp * Speed_Light_SI**2) ! permittivity of free space in F/m
     287                 :             :  real(dp), parameter :: AmuBohr2_Cm2 = e_Cb * 1.0d20 / (Bohr_Ang * Bohr_Ang)
     288                 :             : 
     289                 :             : !=========================================================
     290                 :             : !Third part of physical constant definitions
     291                 :             : 
     292                 :             : ! Real physical constants
     293                 :             : ! Previous values from NIST 2006 from http://physics.nist.gov/cuu/Constants/index.html
     294                 :             : 
     295                 :             : !real(dp), parameter :: InvFineStruct=137.035999679_dp  ! Inverse of fine structure constant
     296                 :             : !real(dp), parameter :: FineStructureConstant=0.0072973525664_dp ! 2014 CODATA value
     297                 :             : !real(dp), parameter :: FineStructureConstant2=0.000053251354478_dp ! Square of fine structure constant
     298                 :             : !real(dp), parameter :: Speed_Light=Speed_light_SI/2.1876912633d6 ! speed of light in atomic units
     299                 :             : !real(dp), parameter :: Time_Sec=2.418884326505D-17 !  Atomic unit of time in seconds
     300                 :             : 
     301                 :             : ! 09/2025 [SP] update with 2022 NIST values from the same website.
     302                 :             : !         See also P. J. Mohr et al., Review Mod. Phys. 97, 025002 (2025)
     303                 :             : !
     304                 :             : ! Note: In SI, c is fixed and the fine structure constant (alpha) is measured.
     305                 :             : !       In a.u., alpha is fixed and c is measured. Be carefull when used them.
     306                 :             : !       Here we defined c.
     307                 :             : 
     308                 :             :  real(dp), parameter :: InvFineStruct= 137.035999177_dp                   ! Inverse of fine structure constant
     309                 :             :  real(dp), parameter :: FineStructureConstant  = 0.0072973525643_dp       ! Fine structure constant
     310                 :             :  real(dp), parameter :: FineStructureConstant2 = FineStructureConstant**2 ! Square of fine structure constant
     311                 :             : 
     312                 :             : !Works until now
     313                 :             : 
     314                 :             : !The compiler nvhpc has a problem with this line ?!?
     315                 :             :  real(dp), parameter :: Speed_Light        = InvFineStruct                      ! Speed of light in atomic units
     316                 :             : !So, replace with this line with straight value of Speed_Light
     317                 :             : !real(dp), parameter :: Speed_Light= 137.035999177_dp
     318                 :             : 
     319                 :             : !
     320                 :             :  real(dp), parameter :: Time_Sec     = 2.4188843265864D-17                ! Atomic unit of time in seconds
     321                 :             : 
     322                 :             : !=========================================================
     323                 :             : !Fourth part of physical constant definitions
     324                 :             : 
     325                 :             : ! Real physical constants
     326                 :             : ! Previous values from NIST 2006 from http://physics.nist.gov/cuu/Constants/index.html
     327                 :             : 
     328                 :             : ! real(dp), parameter :: BField_Tesla=4.254383d-6 ! Tesla in a.u.
     329                 :             : ! real(dp), parameter :: dipole_moment_debye=0.393430307_dp ! Debye unit in a.u.
     330                 :             : ! real(dp), parameter :: siemens_SI=e_Cb**2 / Ha_J / Time_Sec ! Siemens in SI: A/V = C^2 / (J * s)
     331                 :             : ! real(dp), parameter :: volt_SI=Ha_J/e_Cb ! Volt in SI: J/C
     332                 :             : !!EB suppress *0.5_dp  ! Atomic unit of induction field (in Tesla) * mu_B (in atomic units).
     333                 :             : ! real(dp), parameter :: mu_B_SI=9.274009994D-24   ! Bohr magneton in SI
     334                 :             : ! real(dp), parameter :: mu_B = 0.5_dp             ! Bohr magneton in atomic units
     335                 :             : 
     336                 :             : ! 09/2025 [SP] update with 2022 NIST values from the same website.
     337                 :             : !         See also P. J. Mohr et al., Review Mod. Phys. 97, 025002 (2025)
     338                 :             : !
     339                 :             : ! Note: In SI, c is fixed and the fine structure constant (alpha) is measured.
     340                 :             : !       In a.u., alpha is fixed and c is measured. Be carefull when used them. Here we defined c.
     341                 :             : 
     342                 :             :  real(dp), parameter :: mu_B_SI      = 9.2740100657D-24                   ! Bohr magneton in SI
     343                 :             :  real(dp), parameter :: mu_0_SI      = 1.25663706127d-6  ! Vacuum permeability in atomic units
     344                 :             :  real(dp), parameter :: mu_B         = 0.5_dp                             ! Bohr magneton in atomic units
     345                 :             :  real(dp), parameter :: BField_Tesla = mu_B_SI / (Ha_J * mu_B)            ! Tesla in a.u.
     346                 :             :  real(dp), parameter :: dipole_moment_debye = 0.393430307_dp              ! Debye unit in a.u.
     347                 :             :  real(dp), parameter :: siemens_SI   = e_Cb**2 / Ha_J / Time_Sec          ! Siemens in SI: A/V = C^2 / (J * s)
     348                 :             :  real(dp), parameter :: volt_SI      = Ha_J / e_Cb                        ! Volt in SI: J/C
     349                 :             :  real(dp), parameter :: EFG_SI       = volt_SI / Bohr_meter**2            ! E-field gradient in SI : Volt/m^2
     350                 :             : 
     351                 :             : !End of physical constants
     352                 :             : !=========================================================
     353                 :             : 
     354                 :             : !Complex constants
     355                 :             :  !double precision
     356                 :             :  complex(dp), parameter :: czero = (0._dp,0._dp)
     357                 :             :  complex(dp), parameter :: cone  = (1._dp,0._dp)
     358                 :             :  complex(dp), parameter :: ctwo  = (2._dp,0._dp)
     359                 :             :  complex(dp), parameter :: j_dpc = (0._dp,1.0_dp)
     360                 :             : 
     361                 :             :  ! single-precision
     362                 :             :  complex(sp), parameter :: czero_sp = (0._sp,0._sp)
     363                 :             :  complex(sp), parameter :: cone_sp  = (1._sp,0._sp)
     364                 :             :  complex(sp), parameter :: ctwo_sp  = (2._sp,0._sp)
     365                 :             :  complex(sp), parameter :: j_sp     = (0._sp,1.0_sp)
     366                 :             : 
     367                 :             : !Pauli matrix
     368                 :             :  complex(dp), parameter :: pauli_mat(2,2,0:3) = reshape([cone,czero,czero,cone, &
     369                 :             :                                                          czero,cone,cone,czero,&
     370                 :             :                                                          czero,j_dpc,-j_dpc,czero,&
     371                 :             :                                                          cone,czero,czero,-cone], [2,2,4])
     372                 :             : 
     373                 :             : !Character constants
     374                 :             :  character(len=1), parameter :: ch10 = char(10)
     375                 :             :  character(len=fnlen),parameter :: ABI_NOFILE="__None__"
     376                 :             : 
     377                 :             :  ! File used to dump the error message in m_error.
     378                 :             :  ! Extremely useful when we run on many CPUs since logging, in this case, is automatically disabled
     379                 :             :  ! As a consequence, we get error messages in the main log only if the problem is encountered by the master node!
     380                 :             :  ! Note that the file is removed in xmpi_init (if present).
     381                 :             :  character(len=fnlen),parameter :: ABI_MPIABORTFILE="__ABI_MPIABORTFILE__"
     382                 :             : 
     383                 :             :  ! Error codes used by the bindings.
     384                 :             :  integer, parameter, public :: AB7_NO_ERROR                 =  0
     385                 :             :  integer, parameter, public :: AB7_ERROR_OBJ                =  1
     386                 :             :  integer, parameter, public :: AB7_ERROR_ARG                =  2
     387                 :             :  integer, parameter, public :: AB7_ERROR_INVARS_ATT         =  3
     388                 :             :  integer, parameter, public :: AB7_ERROR_INVARS_ID          =  4
     389                 :             :  integer, parameter, public :: AB7_ERROR_INVARS_SIZE        =  5
     390                 :             :  integer, parameter, public :: AB7_ERROR_SYM_NOT_PRIMITIVE  =  6
     391                 :             :  integer, parameter, public :: AB7_ERROR_SYM_BRAVAIS_XRED   =  7
     392                 :             :  integer, parameter, public :: AB7_ERROR_MIXING_ARG         =  8
     393                 :             :  integer, parameter, public :: AB7_ERROR_MIXING_CONVERGENCE =  9
     394                 :             :  integer, parameter, public :: AB7_ERROR_MIXING_INTERNAL    = 10
     395                 :             :  integer, parameter, public :: AB7_ERROR_MIXING_INC_NNSLOOP = 11
     396                 :             : 
     397                 :             : ! Values of optdriver corresponding to the different run-levels.
     398                 :             :  integer, parameter, public :: RUNL_GSTATE     = 0
     399                 :             :  integer, parameter, public :: RUNL_RESPFN     = 1
     400                 :             :  integer, parameter, public :: RUNL_SCREENING  = 3
     401                 :             :  integer, parameter, public :: RUNL_SIGMA      = 4
     402                 :             :  integer, parameter, public :: RUNL_NONLINEAR  = 5
     403                 :             :  integer, parameter, public :: RUNL_GWR        = 6
     404                 :             :  integer, parameter, public :: RUNL_EPH        = 7
     405                 :             :  integer, parameter, public :: RUNL_WFK        = 8
     406                 :             :  integer, parameter, public :: RUNL_RTTDDFT    = 9
     407                 :             :  integer, parameter, public :: RUNL_GWLS       = 66
     408                 :             :  integer, parameter, public :: RUNL_BSE        = 99
     409                 :             :  integer, parameter, public :: RUNL_LONGWAVE   = 10
     410                 :             : 
     411                 :             :  ! Integer flags defining the task to be performed in wfk_analyze
     412                 :             :  integer,public,parameter :: WFK_TASK_NONE      = 0
     413                 :             :  integer,public,parameter :: WFK_TASK_FULLBZ    = 1
     414                 :             :  integer,public,parameter :: WFK_TASK_CLASSIFY  = 2
     415                 :             :  integer,public,parameter :: WFK_TASK_PAW_AEPSI = 3
     416                 :             :  integer,public,parameter :: WFK_TASK_EINTERP   = 4
     417                 :             :  integer,public,parameter :: WFK_TASK_DDK       = 5
     418                 :             :  integer,public,parameter :: WFK_TASK_DDK_DIAGO = 6
     419                 :             :  integer,public,parameter :: WFK_TASK_OPTICS_FULLBZ = 7
     420                 :             :  integer,public,parameter :: WFK_TASK_KPTS_ERANGE= 8
     421                 :             :  integer,public,parameter :: WFK_TASK_CHECK_SYMTAB = 9
     422                 :             :  integer,public,parameter :: WFK_TASK_WANNIER = 10
     423                 :             :  integer,public,parameter :: WFK_TASK_PSEUDOBANDS = 11
     424                 :             : 
     425                 :             : ! Flags defining the method used for performing IO (input variable iomode)
     426                 :             :  integer, parameter, public :: IO_MODE_FORTRAN_MASTER = -1
     427                 :             :  integer, parameter, public :: IO_MODE_FORTRAN        =  0
     428                 :             :  integer, parameter, public :: IO_MODE_MPI            =  1
     429                 :             :  integer, parameter, public :: IO_MODE_NETCDF         =  2 ! Only for legacy code, should not be used for new implementations.
     430                 :             :  integer, parameter, public :: IO_MODE_ETSF           =  3
     431                 :             : 
     432                 :             : ! FFT libraries (correspond to fftalga = ngfft(7)/100)
     433                 :             :  integer,parameter,public :: FFT_SG     = 1
     434                 :             :  integer,parameter,public :: FFT_FFTW3  = 3
     435                 :             :  integer,parameter,public :: FFT_SG2002 = 4
     436                 :             :  integer,parameter,public :: FFT_DFTI   = 5
     437                 :             : 
     438                 :             : ! Parameters for non-local algorithm (were previously stored in nloalg(3) and nloalg(4)
     439                 :             :   integer,parameter,public :: NLO_MBLKPW = 199
     440                 :             :   integer,parameter,public :: NLO_MINCAT = 10
     441                 :             : 
     442                 :             : ! This is used to compute the maximum index of the perturbation as 2*natom + MPERT_MAX
     443                 :             : ! GA: But this is not actually the maximum perturbation, see m_dfpt_loopert
     444                 :             :   integer,parameter,public :: MPERT_MAX = 11
     445                 :             : 
     446                 :             : ! Parameters for the GPU implementation(s)
     447                 :             :  ! GPU implementation undetermined
     448                 :             :  integer,parameter,public :: ABI_GPU_UNKNOWN  =-1
     449                 :             :  ! Not using any GPU implementation, implies running on CPU
     450                 :             :  integer,parameter,public :: ABI_GPU_DISABLED = 0
     451                 :             :  ! Legacy GPU implementation relying on NVIDIA CUDA kernels, not preferred
     452                 :             :  integer,parameter,public :: ABI_GPU_LEGACY   = 1
     453                 :             :  ! GPU implementation relying on OpenMP v5 "TARGET" construct
     454                 :             :  integer,parameter,public :: ABI_GPU_OPENMP   = 2
     455                 :             :  ! GPU implementation relying on Kokkos + cuda framework
     456                 :             :  integer,parameter,public :: ABI_GPU_KOKKOS   = 3
     457                 :             :  ! Please note that a GPU linalg library supported in gpu_toolbox (ie: CUDA) backs up OpenMP and Kokkos variants.
     458                 :             : 
     459                 :             : !Parameters for LOG/STATUS files treatment
     460                 :             : !This variables tell the code if some lines have to be written in a LOG/STATUS file
     461                 :             :  logical, public, save :: do_write_log   =.true.
     462                 :             :  logical, public, save :: do_write_status=.true.
     463                 :             : ! Max. numbers of CPU core for the writing of LOG/STATUS file for each CPU
     464                 :             : ! (if more than NPROC_NO_EXTRA_LOG cpu core are used, no *_LOG_Pxxx is written;
     465                 :             : !  the same for the *_STATUS_Pxxx file)
     466                 :             :  integer, parameter, public :: NPROC_NO_EXTRA_LOG    = 2  !@WC
     467                 :             :  integer, parameter, public :: NPROC_NO_EXTRA_STATUS = 2  !@WC
     468                 :             : !Name of the file that (if present in current directory)
     469                 :             : !will avoid creation of LOG/STATUS files
     470                 :             :  character(len=fnlen),parameter :: ABI_NO_LOG_FILE="_NOLOG"
     471                 :             : !Name of the file that (if present in current directory)
     472                 :             : !will enforce creation of LOG/STATUS files
     473                 :             :  character(len=fnlen),parameter :: ABI_ENFORCE_LOG_FILE="_LOG"
     474                 :             : !Name of the file that (if present in current directory)
     475                 :             : !will enforce creation of LOG file only for master proc
     476                 :             :  character(len=fnlen),parameter :: ABI_MAIN_LOG_FILE="_MAINLOG"
     477                 :             : 
     478                 :             : ! Arrays
     479                 :             :  integer,parameter :: identity_3d(3,3) = reshape([1,0,0,0,1,0,0,0,1], [3,3])
     480                 :             :  integer,parameter :: inversion_3d(3,3) = reshape([-1,0,0,0,-1,0,0,0,-1], [3,3])
     481                 :             : 
     482                 :             : !A collection of small datatypes for ragged arrays
     483                 :             : !A small datatype for ragged integer 1D-arrays
     484                 :             :  type coeffi1_type
     485                 :             :   integer :: size
     486                 :             :   integer, allocatable :: value(:)
     487                 :             :  end type coeffi1_type
     488                 :             : !A small datatype for ragged integer 2D-arrays
     489                 :             :  type coeffi2_type
     490                 :             :   integer :: size
     491                 :             :   integer, allocatable :: value(:,:)
     492                 :             :  end type coeffi2_type
     493                 :             : !A small datatype for ragged integer 3D-arrays
     494                 :             :  type coeffi3_type
     495                 :             :   integer :: size
     496                 :             :   integer, allocatable :: value(:,:,:)
     497                 :             :  end type coeffi3_type
     498                 :             : !A small datatype for ragged integer 4D-arrays
     499                 :             :  type coeffi4_type
     500                 :             :   integer :: size
     501                 :             :   integer, allocatable :: value(:,:,:,:)
     502                 :             :  end type coeffi4_type
     503                 :             : !A small datatype for ragged integer 5D-arrays
     504                 :             :  type coeffi5_type
     505                 :             :   integer :: size
     506                 :             :   integer, allocatable :: value(:,:,:,:,:)
     507                 :             :  end type coeffi5_type
     508                 :             : !A small datatype for ragged complex 1D-arrays
     509                 :             :  type coeff1c_type
     510                 :             :   complex(dp), allocatable :: value(:)
     511                 :             :  end type coeff1c_type
     512                 :             : !A small datatype for ragged complex 2D-arrays
     513                 :             :  type coeff2c_type
     514                 :             :   complex(dp), allocatable :: value(:,:)
     515                 :             :  end type coeff2c_type
     516                 :             : !A small datatype for ragged complex 3D-arrays
     517                 :             :  type coeff3c_type
     518                 :             :   complex(dp), allocatable :: value(:,:,:)
     519                 :             :  end type coeff3c_type
     520                 :             : !A small datatype for ragged complex 4D-arrays
     521                 :             :  type coeff4c_type
     522                 :             :   complex(dp), allocatable :: value(:,:,:,:)
     523                 :             :  end type coeff4c_type
     524                 :             : !A small datatype for ragged complex 5D-arrays
     525                 :             :  type coeff5c_type
     526                 :             :   complex(dp), allocatable :: value(:,:,:,:,:)
     527                 :             :  end type coeff5c_type
     528                 :             : !A small datatype for ragged real 1D-arrays
     529                 :             :  type coeff1_type
     530                 :             :   real(dp), allocatable :: value(:)
     531                 :             :  end type coeff1_type
     532                 :             : !A small datatype for ragged real 2D-arrays
     533                 :             :  type coeff2_type
     534                 :             :   real(dp), allocatable :: value(:,:)
     535                 :             :  end type coeff2_type
     536                 :             : !A small datatype for ragged real 3D-arrays
     537                 :             :  type coeff3_type
     538                 :             :   real(dp), allocatable :: value(:,:,:)
     539                 :             :  end type coeff3_type
     540                 :             : !A small datatype for ragged real 4D-arrays
     541                 :             :  type coeff4_type
     542                 :             :   real(dp), allocatable :: value(:,:,:,:)
     543                 :             :  end type coeff4_type
     544                 :             : !A small datatype for ragged real 5D-arrays
     545                 :             :  type coeff5_type
     546                 :             :   real(dp), allocatable :: value(:,:,:,:,:)
     547                 :             :  end type coeff5_type
     548                 :             : !A small datatype for ragged real 6D-arrays
     549                 :             :  type coeff6_type
     550                 :             :   real(dp), allocatable :: value(:,:,:,:,:,:)
     551                 :             :  end type coeff6_type
     552                 :             : !A small datatype for ragged real 7D-arrays.
     553                 :             :  type coeff7_type
     554                 :             :   real(dp), allocatable :: value(:,:,:,:,:,:,:)
     555                 :             :  end type coeff7_type
     556                 :             : 
     557                 :             : CONTAINS  !==============================================================================
     558                 :             : !!***
     559                 :             : 
     560                 :             : !!****f* defs_basis/abi_log_status_state
     561                 :             : !! NAME
     562                 :             : !!  abi_log_status_state
     563                 :             : !!
     564                 :             : !! FUNCTION
     565                 :             : !!  Change values of do_write_log and do_write_status flags.
     566                 :             : !!  These flags tell the code to write (or not) a LOG/STATUS file.
     567                 :             : !!
     568                 :             : !! INPUTS
     569                 :             : !!  new_do_write_log=new value for do_write_log
     570                 :             : !!  new_do_write_status=new value for do_write_status
     571                 :             : !!
     572                 :             : !! SOURCE
     573                 :             : 
     574                 :         562 : subroutine abi_log_status_state(new_do_write_log,new_do_write_status)
     575                 :             : 
     576                 :             : !Arguments ------------------------------------
     577                 :             :  logical,optional,intent(in) :: new_do_write_log,new_do_write_status
     578                 :             : !************************************************************************
     579                 :             : 
     580         [ +  + ]:         562 :  if (PRESENT(new_do_write_log))    do_write_log   =new_do_write_log
     581         [ +  + ]:         562 :  if (PRESENT(new_do_write_status)) do_write_status=new_do_write_status
     582                 :             : 
     583                 :         562 : end subroutine abi_log_status_state
     584                 :             : !!***
     585                 :             : 
     586                 :             : !----------------------------------------------------------------------
     587                 :             : 
     588                 :             : !!****f* defs_basis/abi_io_redirect
     589                 :             : !! NAME
     590                 :             : !!  abi_io_redirect
     591                 :             : !!
     592                 :             : !! FUNCTION
     593                 :             : !!  Redirect unit numbers (and|or) change the MPI communicator for the IO (output and log file).
     594                 :             : !!  This routine can be used in client code (e.g. bigdft)
     595                 :             : !!  that wants to call the abinit routines packed in an external library.
     596                 :             : !!
     597                 :             : !! INPUTS
     598                 :             : !!  new_ab_out=new value for output file unit
     599                 :             : !!  new_std_out=new value for standard output unit
     600                 :             : !!  new_io_comm=new value for IO MPI communicator
     601                 :             : !!
     602                 :             : !! SOURCE
     603                 :             : 
     604                 :       25003 : subroutine abi_io_redirect(new_ab_out,new_std_out,new_io_comm)
     605                 :             : 
     606                 :             : !Arguments ------------------------------------
     607                 :             :  integer,optional,intent(in) :: new_std_out,new_ab_out,new_io_comm
     608                 :             : !************************************************************************
     609                 :             : 
     610         [ +  + ]:       25003 :  if (PRESENT(new_ab_out))  ab_out  = new_ab_out
     611         [ +  + ]:       25003 :  if (PRESENT(new_std_out)) std_out = new_std_out
     612         [ +  + ]:       25003 :  if (PRESENT(new_io_comm)) abinit_comm_output = new_io_comm
     613                 :             : 
     614                 :       25003 : end subroutine abi_io_redirect
     615                 :             : !!***
     616                 :             : 
     617                 :             : !----------------------------------------------------------------------
     618                 :             : 
     619                 :             : !!****f* defs_basis/print_kinds
     620                 :             : !! NAME
     621                 :             : !! print_kinds
     622                 :             : !!
     623                 :             : !! FUNCTION
     624                 :             : !! Prints info on the basic data types, e.g. kind, precision...
     625                 :             : !!
     626                 :             : !! INPUTS
     627                 :             : !!   unit = Unit number for output file.
     628                 :             : !!
     629                 :             : !! SOURCE
     630                 :             : 
     631                 :        1153 : subroutine print_kinds(unit)
     632                 :             : 
     633                 :             : !Arguments-------------------------------------
     634                 :             :  integer,optional,intent(in) :: unit
     635                 :             : 
     636                 :             : !Local variables-------------------------------
     637                 :             :  integer :: my_unt
     638                 :             : ! *********************************************************************
     639                 :             : 
     640         [ +  - ]:        1153 :  my_unt=std_out; if (PRESENT(unit)) my_unt = unit
     641                 :             : 
     642                 :        1153 :  write(my_unt,'(a)')' DATA TYPE INFORMATION: '
     643                 :             : 
     644                 :             :  write(my_unt,'(a,/,2(a,i6,/),2(a,e16.8e3,/),a,e16.8e3)')&
     645                 :        1153 :    ' REAL:      Data type name: REAL(DP) ',&
     646                 :        1153 :    '            Kind value: ',KIND(0.0_dp),&
     647                 :        1153 :    '            Precision:  ',PRECISION(0.0_dp),&
     648                 :        1153 :    '            Smallest nonnegligible quantity relative to 1: ',EPSILON(0.0_dp),&
     649                 :        1153 :    '            Smallest positive number:                      ',TINY(0.0_dp),&
     650                 :        2306 :    '            Largest representable number:                  ',HUGE(0.0_dp)
     651                 :             : 
     652                 :             :  write(my_unt,'(a,/,2(a,i0,/),a,i0)')&
     653                 :        1153 :    ' INTEGER:   Data type name: INTEGER(default) ', &
     654                 :        1153 :    '            Kind value: ',KIND(0),              &
     655                 :        1153 :    '            Bit size:   ',BIT_SIZE(0),          &
     656                 :        2306 :    '            Largest representable number: ',HUGE(0)
     657                 :             : 
     658                 :             :  write(my_unt,'(a,/,a,i0)')&
     659                 :        1153 :    ' LOGICAL:   Data type name: LOGICAL ',&
     660                 :        2306 :    '            Kind value: ',KIND(.TRUE.)
     661                 :             : 
     662                 :             :  write(my_unt,'(2a,i0)')&
     663                 :        1153 :   ' CHARACTER: Data type name: CHARACTER ',&
     664                 :        2306 :   '            Kind value: ',KIND('C')
     665                 :             : 
     666                 :        1153 : end subroutine print_kinds
     667                 :             : !!***
     668                 :             : 
     669                 :             : !!****f* defs_basis/str2wfktask
     670                 :             : !! NAME
     671                 :             : !!  str2wfktask
     672                 :             : !!
     673                 :             : !! FUNCTION
     674                 :             : !!  Convert a string into one of the integer flags WFK_TASK_*
     675                 :             : !!  Return WFK_TASK_NONE if string is invalid.
     676                 :             : !!
     677                 :             : !! SOURCE
     678                 :             : 
     679                 :          12 : integer pure function str2wfktask(str) result(wfk_task)
     680                 :             : 
     681                 :             : !Arguments ------------------------------------
     682                 :             :  character(len=*),intent(in) :: str
     683                 :             : !************************************************************************
     684                 :             : 
     685                 :             :  select case (str)
     686                 :             :  case ("wfk_fullbz")
     687                 :             :    wfk_task = WFK_TASK_FULLBZ
     688                 :             :  case ("classify")
     689                 :             :    wfk_task = WFK_TASK_CLASSIFY
     690                 :             :  case ("paw_aepsi")
     691                 :             :    wfk_task = WFK_TASK_PAW_AEPSI
     692                 :             :  case ("wfk_einterp")
     693                 :             :    wfk_task = WFK_TASK_EINTERP
     694                 :             :  case ("wfk_ddk")
     695                 :             :    wfk_task = WFK_TASK_DDK
     696                 :             :  case ("wfk_ddk_diago")
     697                 :             :    wfk_task = WFK_TASK_DDK_DIAGO
     698                 :             :  case ("wfk_kpts_erange")
     699                 :             :    wfk_task = WFK_TASK_KPTS_ERANGE
     700                 :             :  case ("optics_fullbz", "wfk_optics_fullbz")
     701                 :             :    wfk_task = WFK_TASK_OPTICS_FULLBZ
     702                 :             :  case ("check_symtab")
     703                 :             :    wfk_task = WFK_TASK_CHECK_SYMTAB
     704                 :             :  case ("wannier")
     705                 :             :    wfk_task = WFK_TASK_WANNIER
     706                 :             :  case ("pseudobands")
     707                 :             :    wfk_task = WFK_TASK_PSEUDOBANDS
     708                 :             :  case default
     709         [ +  - ]:          12 :    wfk_task = WFK_TASK_NONE
     710                 :             :  end select
     711                 :             : 
     712                 :          12 : end function str2wfktask
     713                 :             : !!***
     714                 :             : 
     715                 :             : !----------------------------------------------------------------------
     716                 :             : 
     717                 :             : !!****f* defs_basis/set_mem_per_cpu_mb
     718                 :             : !! NAME
     719                 :             : !! set_mem_per_cpu_mb
     720                 :             : !!
     721                 :             : !! FUNCTION
     722                 :             : !!  Set the value of global variable `mem_per_cpu_mb`
     723                 :             : !!
     724                 :             : !! SOURCE
     725                 :             : 
     726                 :           0 : subroutine set_mem_per_cpu_mb(mem_mb)
     727                 :             : 
     728                 :             : !Arguments-------------------------------------
     729                 :             :  real(dp),intent(in) :: mem_mb
     730                 :             : ! *********************************************************************
     731                 :             : 
     732                 :             :  !print *, "Setting mem_per_cpu_mb to", mem_mb
     733                 :           0 :  mem_per_cpu_mb = mem_mb
     734                 :             : 
     735                 :           0 : end subroutine set_mem_per_cpu_mb
     736                 :             : !!***
     737                 :             : 
     738                 :             : !----------------------------------------------------------------------
     739                 :             : 
     740   [ #  #  #  #  :           0 : end module defs_basis
          #  #  #  #  #  
                #  #  # ]
     741                 :             : !!***
        

Generated by: LCOV version 2.3-1