LCOV - code coverage report
Current view: top level - shared/common/src/32_util - m_atomdata.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 75.0 % 172 129
Test Date: 2026-09-20 18:56:22 Functions: 71.4 % 7 5

            Line data    Source code
       1              : !!****m* ABINIT/m_atomdata
       2              : !! NAME
       3              : !!  m_atomdata
       4              : !!
       5              : !! FUNCTION
       6              : !!   Atomic data
       7              : !!
       8              : !! COPYRIGHT
       9              : !!  Copyright (C) 2000-2026 ABINIT group (XG, MJV, MT, MG)
      10              : !!  This file is distributed under the terms of the
      11              : !!  GNU General Public License, see ~abinit/COPYING
      12              : !!  or http://www.gnu.org/copyleft/gpl.txt .
      13              : !!
      14              : !! TODO
      15              : !!  * Use module global lookup table.
      16              : !!
      17              : !! SOURCE
      18              : 
      19              : #if defined HAVE_CONFIG_H
      20              : #include "config.h"
      21              : #endif
      22              : 
      23              : #include "abi_common.h"
      24              : 
      25              : module m_atomdata
      26              : 
      27              :  use defs_basis
      28              :  use m_errors
      29              :  use m_abicore
      30              : 
      31              :  use m_fstrings, only : sjoin
      32              : 
      33              :  implicit none
      34              : 
      35              :  private
      36              : 
      37              : ! Utilities
      38              :  public :: symbol2znucl      ! Symbol --> znucl
      39              :  public :: znucl2symbol      ! znucl --> symbol
      40              :  public :: atom_length       ! Return atomic decay length for one given type of atom.
      41              :  public :: atom_gauss        ! Approximate the atomic density with a gaussian (used to initialize densities)
      42              : !!***
      43              : 
      44              : !----------------------------------------------------------------------
      45              : 
      46              : !!****t* m_atomdata/atomdata_t
      47              : !! NAME
      48              : !! atomdata_t
      49              : !!
      50              : !! FUNCTION
      51              : !!  Record with the atomic data (symbol, covalent radius, atomic mass) for a given atomic specie
      52              : !!
      53              : !! SOURCE
      54              : 
      55              :  type,public :: atomdata_t
      56              :    real(dp) :: znucl          ! Atomic number (real to treat alchemy)
      57              :    real(dp) :: amu            ! Atomic mass
      58              :    real(dp) :: rcov           ! Covalent radius
      59              :    character(len=2) :: symbol ! Atomic symbol
      60              :  end type atomdata_t
      61              : 
      62              : 
      63              :  public :: atomdata_from_znucl   ! Return atomic data from znucl
      64              :  public :: atomdata_from_symbol  ! Return atomic data from symbol
      65              : !!***
      66              : 
      67              : ! *************************************************************************
      68              : 
      69              : contains
      70              : 
      71              : !!****f* ABINIT/atomdata_from_znucl
      72              : !! NAME
      73              : !! atomdata_from_znucl
      74              : !!
      75              : !! FUNCTION
      76              : !! Return atomic data : symbol, covalent radius, atomic mass
      77              : !! Atomic masses are those recommended by the commission on Atomic Weights and
      78              : !! Isotopic Abundances, Inorganic Chemistry Division, IUPAC, in
      79              : !! Pure Appl. Chem. 60, 841 (1988) [[cite:IUPAC1988]]. For Tc, Pm, Po to Ac, Pa and beyond U,
      80              : !! none of the isotopes has a half-life greater than 3.0d10 years, and
      81              : !! the values provided here do not come from that source.
      82              : !!
      83              : !! INPUTS
      84              : !! znucl=atomic number (a real(dp) number ! the nearest integer is selected in the routine ...)
      85              : !!
      86              : !! OUTPUT
      87              : !! amu=atomic mass (Masses beyond element 103 are fixed at 260)
      88              : !! rcov=covalent radius   (Elements beyond 86 have an estimated covalent radius)
      89              : !! character(len=2) symbol=atomic symbol
      90              : !!
      91              : !! SOURCE
      92              : 
      93       196163 : subroutine atomdata_from_znucl(atom,znucl)
      94              : 
      95              : !Arguments ------------------------------------
      96              : !scalars
      97              :  real(dp),intent(in) :: znucl
      98              :  type(atomdata_t),intent(out) :: atom
      99              : 
     100              : !Local variables-------------------------------
     101              : !scalars
     102              :  integer :: nucl
     103              :  real(dp) :: amu,rcov
     104              :  character(len=2) :: symbol
     105              : 
     106              : ! *************************************************************************
     107              : 
     108       196163 :  nucl=nint(znucl)
     109          323 :  select case (nucl)
     110              :    case(0)
     111          323 :      amu=one         ; rcov=one/Bohr_Ang    ; symbol='no'
     112              :    case(1)
     113        85164 :      amu=1.00794d0   ; rcov=0.32d0/Bohr_Ang ; symbol=' H'
     114              :    case(2)
     115         2063 :      amu=4.002602d0  ; rcov=0.93d0/Bohr_Ang ; symbol='He'
     116              :    case(3)
     117         1703 :      amu=6.941d0     ; rcov=1.23d0/Bohr_Ang ; symbol='Li'
     118              :    case(4)
     119          754 :      amu=9.012182d0  ; rcov=0.90d0/Bohr_Ang ; symbol='Be'
     120              :    case(5)
     121         6097 :      amu=10.811d0    ; rcov=0.80d0/Bohr_Ang ; symbol=' B'
     122              :    case(6)
     123         8781 :      amu=12.011d0    ; rcov=0.77d0/Bohr_Ang ; symbol=' C'
     124              :    case(7)
     125         1263 :      amu=14.00674d0  ; rcov=0.74d0/Bohr_Ang ; symbol=' N'
     126              :    case(8)
     127         8388 :      amu=15.9994d0   ; rcov=0.73d0/Bohr_Ang ; symbol=' O'
     128              :    case(9)
     129          901 :      amu=18.9984032d0; rcov=0.72d0/Bohr_Ang ; symbol=' F'
     130              : 
     131              :    case(10)
     132           83 :      amu=20.1797d0   ; rcov=0.71d0/Bohr_Ang ; symbol='Ne'
     133              :    case(11)
     134          973 :      amu=22.989768d0 ; rcov=1.54d0/Bohr_Ang ; symbol='Na'
     135              :    case(12)
     136         3614 :      amu=24.3050d0   ; rcov=1.36d0/Bohr_Ang ; symbol='Mg'
     137              :    case(13)
     138        20414 :      amu=26.981539d0 ; rcov=1.18d0/Bohr_Ang ; symbol='Al'
     139              :    case(14)
     140        29840 :      amu=28.0855d0   ; rcov=1.11d0/Bohr_Ang ; symbol='Si'
     141              :    case(15)
     142         4381 :      amu=30.973762d0 ; rcov=1.06d0/Bohr_Ang ; symbol=' P'
     143              :    case(16)
     144          130 :      amu=32.066d0    ; rcov=1.02d0/Bohr_Ang ; symbol=' S'
     145              :    case(17)
     146          285 :      amu=35.4527d0   ; rcov=0.99d0/Bohr_Ang ; symbol='Cl'
     147              :    case(18)
     148          319 :      amu=39.948d0    ; rcov=0.98d0/Bohr_Ang ; symbol='Ar'
     149              :    case(19)
     150           56 :      amu=39.0983d0   ; rcov=2.03d0/Bohr_Ang ; symbol=' K'
     151              : 
     152              :    case(20)
     153          247 :      amu=40.078d0    ; rcov=1.74d0/Bohr_Ang ; symbol='Ca'
     154              :    case(21)
     155           53 :      amu=44.955910d0 ; rcov=1.44d0/Bohr_Ang ; symbol='Sc'
     156              :    case(22)
     157          677 :      amu=47.88d0     ; rcov=1.32d0/Bohr_Ang ; symbol='Ti'
     158              :    case(23)
     159          313 :      amu=50.9415d0   ; rcov=1.22d0/Bohr_Ang ; symbol=' V'
     160              :    case(24)
     161          297 :      amu=51.9961d0   ; rcov=1.18d0/Bohr_Ang ; symbol='Cr'
     162              :    case(25)
     163          335 :      amu=54.93805d0  ; rcov=1.17d0/Bohr_Ang ; symbol='Mn'
     164              :    case(26)
     165         2915 :      amu=55.847d0    ; rcov=1.17d0/Bohr_Ang ; symbol='Fe'
     166              :    case(27)
     167           28 :      amu=58.93320d0  ; rcov=1.16d0/Bohr_Ang ; symbol='Co'
     168              :    case(28)
     169         1464 :      amu=58.69d0     ; rcov=1.15d0/Bohr_Ang ; symbol='Ni'
     170              :    case(29)
     171          145 :      amu=63.546d0    ; rcov=1.17d0/Bohr_Ang ; symbol='Cu'
     172              : 
     173              :    case(30)
     174           36 :      amu=65.39d0     ; rcov=1.25d0/Bohr_Ang ; symbol='Zn'
     175              :    case(31)
     176         1521 :      amu=69.723d0    ; rcov=1.26d0/Bohr_Ang ; symbol='Ga'
     177              :    case(32)
     178          771 :      amu=72.61d0     ; rcov=1.22d0/Bohr_Ang ; symbol='Ge'
     179              :    case(33)
     180         3406 :      amu=74.92159d0  ; rcov=1.20d0/Bohr_Ang ; symbol='As'
     181              :    case(34)
     182           28 :      amu=78.96d0     ; rcov=1.16d0/Bohr_Ang ; symbol='Se'
     183              :    case(35)
     184           19 :      amu=79.904d0    ; rcov=1.14d0/Bohr_Ang ; symbol='Br'
     185              :    case(36)
     186           10 :      amu=83.80d0     ; rcov=1.12d0/Bohr_Ang ; symbol='Kr'
     187              :    case(37)
     188           15 :      amu=85.4678d0   ; rcov=2.16d0/Bohr_Ang ; symbol='Rb'
     189              :    case(38)
     190          285 :      amu=87.62d0     ; rcov=1.91d0/Bohr_Ang ; symbol='Sr'
     191              :    case(39)
     192            8 :      amu=88.90585d0  ; rcov=1.62d0/Bohr_Ang ; symbol=' Y'
     193              : 
     194              :    case(40)
     195           71 :      amu=91.224d0    ; rcov=1.45d0/Bohr_Ang ; symbol='Zr'
     196              :    case(41)
     197          334 :      amu=92.90638d0  ; rcov=1.34d0/Bohr_Ang ; symbol='Nb'
     198              :    case(42)
     199         1011 :      amu=95.94d0     ; rcov=1.30d0/Bohr_Ang ; symbol='Mo'
     200              :    case(43)
     201            3 :      amu=98.9062d0   ; rcov=1.27d0/Bohr_Ang ; symbol='Tc'
     202              :    case(44)
     203          111 :      amu=101.07d0    ; rcov=1.25d0/Bohr_Ang ; symbol='Ru'
     204              :    case(45)
     205            0 :      amu=102.9055d0  ; rcov=1.25d0/Bohr_Ang ; symbol='Rh'
     206              :    case(46)
     207            0 :      amu=106.42d0    ; rcov=1.28d0/Bohr_Ang ; symbol='Pd'
     208              :    case(47)
     209           14 :      amu=107.8682d0  ; rcov=1.34d0/Bohr_Ang ; symbol='Ag'
     210              :    case(48)
     211            0 :      amu=112.411d0   ; rcov=1.48d0/Bohr_Ang ; symbol='Cd'
     212              :    case(49)
     213           62 :      amu=114.82d0    ; rcov=1.44d0/Bohr_Ang ; symbol='In'
     214              : 
     215              :    case(50)
     216          243 :      amu=118.710d0   ; rcov=1.41d0/Bohr_Ang ; symbol='Sn'
     217              :    case(51)
     218           54 :      amu=121.753d0   ; rcov=1.40d0/Bohr_Ang ; symbol='Sb'
     219              :    case(52)
     220           95 :      amu=127.60d0    ; rcov=1.36d0/Bohr_Ang ; symbol='Te'
     221              :    case(53)
     222          474 :      amu=126.90447d0 ; rcov=1.33d0/Bohr_Ang ; symbol=' I'
     223              :    case(54)
     224            0 :      amu=131.29d0    ; rcov=1.31d0/Bohr_Ang ; symbol='Xe'
     225              :    case(55)
     226            0 :      amu=132.90543d0 ; rcov=2.35d0/Bohr_Ang ; symbol='Cs'
     227              :    case(56)
     228          150 :      amu=137.327d0   ; rcov=1.98d0/Bohr_Ang ; symbol='Ba'
     229              :    case(57)
     230           16 :      amu=138.9055d0  ; rcov=1.69d0/Bohr_Ang ; symbol='La'
     231              :    case(58)
     232           72 :      amu=140.115d0   ; rcov=1.65d0/Bohr_Ang ; symbol='Ce'
     233              :    case(59)
     234            0 :      amu=140.90765d0 ; rcov=1.65d0/Bohr_Ang ; symbol='Pr'
     235              : 
     236              :    case(60)
     237           10 :      amu=144.24d0    ; rcov=1.64d0/Bohr_Ang ; symbol='Nd'
     238              :    case(61)
     239            0 :      amu=147.91d0    ; rcov=1.64d0/Bohr_Ang ; symbol='Pm'
     240              :    case(62)
     241            0 :      amu=150.36d0    ; rcov=1.62d0/Bohr_Ang ; symbol='Sm'
     242              :    case(63)
     243           64 :      amu=151.965d0   ; rcov=1.85d0/Bohr_Ang ; symbol='Eu'
     244              :    case(64)
     245           45 :      amu=157.25d0    ; rcov=1.61d0/Bohr_Ang ; symbol='Gd'
     246              :    case(65)
     247            0 :      amu=158.92534d0 ; rcov=1.59d0/Bohr_Ang ; symbol='Tb'
     248              :    case(66)
     249            0 :      amu=162.50d0    ; rcov=1.59d0/Bohr_Ang ; symbol='Dy'
     250              :    case(67)
     251            0 :      amu=164.93032d0 ; rcov=1.57d0/Bohr_Ang ; symbol='Ho'
     252              :    case(68)
     253            0 :      amu=167.26d0    ; rcov=1.57d0/Bohr_Ang ; symbol='Er'
     254              :    case(69)
     255            0 :      amu=168.93421d0 ; rcov=1.56d0/Bohr_Ang ; symbol='Tm'
     256              : 
     257              :    case(70)
     258           59 :      amu=173.04d0    ; rcov=1.70d0/Bohr_Ang ; symbol='Yb'
     259              :    case(71)
     260           18 :      amu=174.967d0   ; rcov=1.56d0/Bohr_Ang ; symbol='Lu'
     261              :    case(72)
     262            7 :      amu=178.49d0    ; rcov=1.44d0/Bohr_Ang ; symbol='Hf'
     263              :    case(73)
     264           78 :      amu=180.9479d0  ; rcov=1.34d0/Bohr_Ang ; symbol='Ta'
     265              :    case(74)
     266            0 :      amu=183.85d0    ; rcov=1.30d0/Bohr_Ang ; symbol=' W'
     267              :    case(75)
     268            0 :      amu=186.207d0   ; rcov=1.28d0/Bohr_Ang ; symbol='Re'
     269              :    case(76)
     270           10 :      amu=190.2d0     ; rcov=1.26d0/Bohr_Ang ; symbol='Os'
     271              :    case(77)
     272           31 :      amu=192.22d0    ; rcov=1.27d0/Bohr_Ang ; symbol='Ir'
     273              :    case(78)
     274           58 :      amu=195.08d0    ; rcov=1.30d0/Bohr_Ang ; symbol='Pt'
     275              :    case(79)
     276          623 :      amu=196.96654d0 ; rcov=1.34d0/Bohr_Ang ; symbol='Au'
     277              : 
     278              :    case(80)
     279            0 :      amu=200.59d0    ; rcov=1.49d0/Bohr_Ang ; symbol='Hg'
     280              :    case(81)
     281            0 :      amu=204.3833d0  ; rcov=1.48d0/Bohr_Ang ; symbol='Tl'
     282              :    case(82)
     283          150 :      amu=207.2d0     ; rcov=1.47d0/Bohr_Ang ; symbol='Pb'
     284              :    case(83)
     285         4173 :      amu=208.98037d0 ; rcov=1.46d0/Bohr_Ang ; symbol='Bi'
     286              :    case(84)
     287            0 :      amu=209.0d0     ; rcov=1.46d0/Bohr_Ang ; symbol='Po'
     288              :    case(85)
     289            0 :      amu=210.0d0     ; rcov=1.45d0/Bohr_Ang ; symbol='At'
     290              :    case(86)
     291            0 :      amu=222.0d0     ; rcov=1.45d0/Bohr_Ang ; symbol='Rn'
     292              :    case(87)
     293            0 :      amu=223.0d0     ; rcov=2.50d0/Bohr_Ang ; symbol='Fr'
     294              :    case(88)
     295            0 :      amu=226.0254d0  ; rcov=2.10d0/Bohr_Ang ; symbol='Ra'
     296              :    case(89)
     297            0 :      amu=230.0d0     ; rcov=1.85d0/Bohr_Ang ; symbol='Ac'
     298              : 
     299              :    case(90)
     300            0 :      amu=232.0381d0  ; rcov=1.65d0/Bohr_Ang ; symbol='Th'
     301              :    case(91)
     302            0 :      amu=231.0359d0  ; rcov=1.50d0/Bohr_Ang ; symbol='Pa'
     303              :    case(92)
     304           20 :      amu=238.0289d0  ; rcov=1.42d0/Bohr_Ang ; symbol=' U'
     305              :    case(93)
     306            0 :      amu=237.0482d0  ; rcov=1.42d0/Bohr_Ang ; symbol='Np'
     307              :    case(94)
     308            2 :      amu=242.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Pu'
     309              :    case(95)
     310            0 :      amu=243.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Am'
     311              :    case(96)
     312            0 :      amu=247.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Cm'
     313              :    case(97)
     314            0 :      amu=247.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Bk'
     315              :    case(98)
     316            0 :      amu=249.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Cf'
     317              :    case(99)
     318            0 :      amu=254.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Es'
     319              : 
     320              :    case(100)
     321            0 :      amu=253.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Fm'
     322              :    case(101)
     323            0 :      amu=256.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Md'
     324              :    case(102)
     325            0 :      amu=254.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='No'
     326              :    case(103)
     327            0 :      amu=257.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Lr'
     328              :    case(104:)
     329       196163 :      amu=260.0d0     ; rcov=1.42d0/Bohr_Ang ; symbol='Xx'
     330              : 
     331              :  end select
     332              : 
     333       196163 :  atom%znucl = znucl
     334       196163 :  atom%amu = amu
     335       196163 :  atom%rcov = rcov
     336       196163 :  atom%symbol = symbol
     337              : 
     338       196163 : end subroutine atomdata_from_znucl
     339              : !!***
     340              : 
     341              : !!****f* m_atomdata/atomdata_from_symbol
     342              : !! NAME
     343              : !! atomdata_from_symbol
     344              : !!
     345              : !! FUNCTION
     346              : !!
     347              : !! INPUTS
     348              : !!
     349              : !! OUTPUT
     350              : !!
     351              : !! SOURCE
     352              : 
     353          178 : subroutine atomdata_from_symbol(atom, symbol)
     354              : 
     355              : !Arguments ------------------------------------
     356              : !scalars
     357              :  character(len=*),intent(in) :: symbol
     358              :  type(atomdata_t),intent(out) :: atom
     359              : 
     360              : !Local variables-------------------------------
     361              : !scalars
     362              :  real(dp) :: znucl,amu,rcov
     363              : 
     364              : ! *************************************************************************
     365              : 
     366              :  select case (symbol)
     367              :  case('no')
     368              :    amu=     one         ; rcov=one/Bohr_Ang    ; znucl=0
     369              :  case(' H', 'H ')
     370              :    amu=     1.00794d0   ; rcov=0.32d0/Bohr_Ang ; znucl=1
     371              :  case('He')
     372              :    amu=     4.002602d0  ; rcov=0.93d0/Bohr_Ang ; znucl=2
     373              :  case('Li')
     374              :    amu=     6.941d0     ; rcov=1.23d0/Bohr_Ang ; znucl=3
     375              :  case('Be')
     376              :    amu=     9.012182d0  ; rcov=0.90d0/Bohr_Ang ; znucl=4
     377              :  case(' B', 'B ')
     378              :    amu=     10.811d0    ; rcov=0.80d0/Bohr_Ang ; znucl=5
     379              :  case(' C', 'C ')
     380              :    amu=     12.011d0    ; rcov=0.77d0/Bohr_Ang ; znucl=6
     381              :  case(' N', 'N ')
     382              :    amu=     14.00674d0  ; rcov=0.74d0/Bohr_Ang ; znucl=7
     383              :  case(' O', 'O ')
     384              :    amu=     15.9994d0   ; rcov=0.73d0/Bohr_Ang ; znucl=8
     385              :  case(' F', 'F ')
     386              :    amu=     18.9984032d0; rcov=0.72d0/Bohr_Ang ; znucl=9
     387              :  case('Ne')
     388              :    amu=     20.1797d0   ; rcov=0.71d0/Bohr_Ang ; znucl=10
     389              :  case('Na')
     390              :    amu=    22.989768d0 ; rcov=1.54d0/Bohr_Ang ; znucl= 11
     391              :  case('Mg')
     392              :    amu=     24.3050d0   ; rcov=1.36d0/Bohr_Ang ; znucl=12
     393              :  case('Al')
     394              :    amu=     26.981539d0 ; rcov=1.18d0/Bohr_Ang ; znucl=13
     395              :  case('Si')
     396              :    amu=     28.0855d0   ; rcov=1.11d0/Bohr_Ang ; znucl=14
     397              :  case(' P', 'P ')
     398              :    amu=     30.973762d0 ; rcov=1.06d0/Bohr_Ang ; znucl=15
     399              :  case(' S', 'S ')
     400              :    amu=     32.066d0    ; rcov=1.02d0/Bohr_Ang ; znucl=16
     401              :  case('Cl')
     402              :    amu=     35.4527d0   ; rcov=0.99d0/Bohr_Ang ; znucl=17
     403              :  case('Ar')
     404              :    amu=     39.948d0    ; rcov=0.98d0/Bohr_Ang ; znucl=18
     405              :  case(' K', 'K ')
     406              :    amu=     39.0983d0   ; rcov=2.03d0/Bohr_Ang ; znucl=19
     407              :  case('Ca')
     408              :    amu=     40.078d0    ; rcov=1.74d0/Bohr_Ang ; znucl=20
     409              :  case('Sc')
     410              :    amu=     44.955910d0 ; rcov=1.44d0/Bohr_Ang ; znucl=21
     411              :  case('Ti')
     412              :    amu=     47.88d0     ; rcov=1.32d0/Bohr_Ang ; znucl=22
     413              :  case(' V', 'V ')
     414              :    amu=     50.9415d0   ; rcov=1.22d0/Bohr_Ang ; znucl=23
     415              :  case('Cr')
     416              :    amu=     51.9961d0   ; rcov=1.18d0/Bohr_Ang ; znucl=24
     417              :  case('Mn')
     418              :    amu=     54.93805d0  ; rcov=1.17d0/Bohr_Ang ; znucl=25
     419              :  case('Fe')
     420              :    amu=     55.847d0    ; rcov=1.17d0/Bohr_Ang ; znucl=26
     421              :  case('Co')
     422              :    amu=     58.93320d0  ; rcov=1.16d0/Bohr_Ang ; znucl=27
     423              :  case('Ni')
     424              :    amu=     58.69d0     ; rcov=1.15d0/Bohr_Ang ; znucl=28
     425              :  case('Cu')
     426              :    amu=     63.546d0    ; rcov=1.17d0/Bohr_Ang ; znucl=29
     427              :  case('Zn')
     428              :    amu=     65.39d0     ; rcov=1.25d0/Bohr_Ang ; znucl=30
     429              :  case('Ga')
     430              :    amu=     69.723d0    ; rcov=1.26d0/Bohr_Ang ; znucl=31
     431              :  case('Ge')
     432              :    amu=     72.61d0     ; rcov=1.22d0/Bohr_Ang ; znucl=32
     433              :  case('As')
     434              :    amu=     74.92159d0  ; rcov=1.20d0/Bohr_Ang ; znucl=33
     435              :  case('Se')
     436              :    amu=     78.96d0     ; rcov=1.16d0/Bohr_Ang ; znucl=34
     437              :  case('Br')
     438              :    amu=     79.904d0    ; rcov=1.14d0/Bohr_Ang ; znucl=35
     439              :  case('Kr')
     440              :    amu=     83.80d0     ; rcov=1.12d0/Bohr_Ang ; znucl=36
     441              :  case('Rb')
     442              :    amu=     85.4678d0   ; rcov=2.16d0/Bohr_Ang ; znucl=37
     443              :  case('Sr')
     444              :    amu=     87.62d0     ; rcov=1.91d0/Bohr_Ang ; znucl=38
     445              :  case(' Y', 'Y ')
     446              :    amu=     88.90585d0  ; rcov=1.62d0/Bohr_Ang ; znucl=39
     447              :  case('Zr')
     448              :    amu=     91.224d0    ; rcov=1.45d0/Bohr_Ang ; znucl=40
     449              :  case('Nb')
     450              :    amu=     92.90638d0  ; rcov=1.34d0/Bohr_Ang ; znucl=41
     451              :  case('Mo')
     452              :    amu=     95.94d0     ; rcov=1.30d0/Bohr_Ang ; znucl=42
     453              :  case('Tc')
     454              :    amu=     98.9062d0   ; rcov=1.27d0/Bohr_Ang ; znucl=43
     455              :  case('Ru')
     456              :    amu=     101.07d0    ; rcov=1.25d0/Bohr_Ang ; znucl=44
     457              :  case('Rh')
     458              :    amu=     102.9055d0  ; rcov=1.25d0/Bohr_Ang ; znucl=45
     459              :  case('Pd')
     460              :    amu=     106.42d0    ; rcov=1.28d0/Bohr_Ang ; znucl=46
     461              :  case('Ag')
     462              :    amu=     107.8682d0  ; rcov=1.34d0/Bohr_Ang ; znucl=47
     463              :  case('Cd')
     464              :    amu=     112.411d0   ; rcov=1.48d0/Bohr_Ang ; znucl=48
     465              :  case('In')
     466              :    amu=     114.82d0    ; rcov=1.44d0/Bohr_Ang ; znucl=49
     467              :  case('Sn')
     468              :    amu=     118.710d0   ; rcov=1.41d0/Bohr_Ang ; znucl=50
     469              :  case('Sb')
     470              :    amu=     121.753d0   ; rcov=1.40d0/Bohr_Ang ; znucl=51
     471              :  case('Te')
     472              :    amu=     127.60d0    ; rcov=1.36d0/Bohr_Ang ; znucl=52
     473              :  case(' I', 'I ')
     474              :    amu=     126.90447d0 ; rcov=1.33d0/Bohr_Ang ; znucl=53
     475              :  case('Xe')
     476              :    amu=     131.29d0    ; rcov=1.31d0/Bohr_Ang ; znucl=54
     477              :  case('Cs')
     478              :    amu=     132.90543d0 ; rcov=2.35d0/Bohr_Ang ; znucl=55
     479              :  case('Ba')
     480              :    amu=     137.327d0   ; rcov=1.98d0/Bohr_Ang ; znucl=56
     481              :  case('La')
     482              :    amu=     138.9055d0  ; rcov=1.69d0/Bohr_Ang ; znucl=57
     483              :  case('Ce')
     484              :    amu=     140.115d0   ; rcov=1.65d0/Bohr_Ang ; znucl=58
     485              :  case('Pr')
     486              :    amu=     140.90765d0 ; rcov=1.65d0/Bohr_Ang ; znucl=59
     487              :  case('Nd')
     488              :    amu=     144.24d0    ; rcov=1.64d0/Bohr_Ang ; znucl=60
     489              :  case('Pm')
     490              :    amu=     147.91d0    ; rcov=1.64d0/Bohr_Ang ; znucl=61
     491              :  case('Sm')
     492              :    amu=     150.36d0    ; rcov=1.62d0/Bohr_Ang ; znucl=62
     493              :  case('Eu')
     494              :    amu=     151.965d0   ; rcov=1.85d0/Bohr_Ang ; znucl=63
     495              :  case('Gd')
     496              :    amu=     157.25d0    ; rcov=1.61d0/Bohr_Ang ; znucl=64
     497              :  case('Tb')
     498              :    amu=     158.92534d0 ; rcov=1.59d0/Bohr_Ang ; znucl=65
     499              :  case('Dy')
     500              :    amu=     162.50d0    ; rcov=1.59d0/Bohr_Ang ; znucl=66
     501              :  case('Ho')
     502              :    amu=     164.93032d0 ; rcov=1.57d0/Bohr_Ang ; znucl=67
     503              :  case('Er')
     504              :    amu=     167.26d0    ; rcov=1.57d0/Bohr_Ang ; znucl=68
     505              :  case('Tm')
     506              :    amu=     168.93421d0 ; rcov=1.56d0/Bohr_Ang ; znucl=69
     507              :  case('Yb')
     508              :    amu=     173.04d0    ; rcov=1.70d0/Bohr_Ang ; znucl=70
     509              :  case('Lu')
     510              :    amu=     174.967d0   ; rcov=1.56d0/Bohr_Ang ; znucl=71
     511              :  case('Hf')
     512              :    amu=     178.49d0    ; rcov=1.44d0/Bohr_Ang ; znucl=72
     513              :  case('Ta')
     514              :    amu=     180.9479d0  ; rcov=1.34d0/Bohr_Ang ; znucl=73
     515              :  case(' W', 'W ')
     516              :    amu=     183.85d0    ; rcov=1.30d0/Bohr_Ang ; znucl=74
     517              :  case('Re')
     518              :    amu=     186.207d0   ; rcov=1.28d0/Bohr_Ang ; znucl=75
     519              :  case('Os')
     520              :    amu=     190.2d0     ; rcov=1.26d0/Bohr_Ang ; znucl=76
     521              :  case('Ir')
     522              :    amu=     192.22d0    ; rcov=1.27d0/Bohr_Ang ; znucl=77
     523              :  case('Pt')
     524              :    amu=     195.08d0    ; rcov=1.30d0/Bohr_Ang ; znucl=78
     525              :  case('Au')
     526              :    amu=     196.96654d0 ; rcov=1.34d0/Bohr_Ang ; znucl=79
     527              :  case('Hg')
     528              :    amu=     200.59d0    ; rcov=1.49d0/Bohr_Ang ; znucl=80
     529              :  case('Tl')
     530              :    amu=     204.3833d0  ; rcov=1.48d0/Bohr_Ang ; znucl=81
     531              :  case('Pb')
     532              :    amu=     207.2d0     ; rcov=1.47d0/Bohr_Ang ; znucl=82
     533              :  case('Bi')
     534              :    amu=     208.98037d0 ; rcov=1.46d0/Bohr_Ang ; znucl=83
     535              :  case('Po')
     536              :    amu=     209.0d0     ; rcov=1.46d0/Bohr_Ang ; znucl=84
     537              :  case('At')
     538              :    amu=     210.0d0     ; rcov=1.45d0/Bohr_Ang ; znucl=85
     539              :  case('Rn')
     540              :    amu=     222.0d0     ; rcov=1.45d0/Bohr_Ang ; znucl=86
     541              :  case('Fr')
     542              :    amu=     223.0d0     ; rcov=2.50d0/Bohr_Ang ; znucl=87
     543              :  case('Ra')
     544              :    amu=     226.0254d0  ; rcov=2.10d0/Bohr_Ang ; znucl=88
     545              :  case('Ac')
     546              :    amu=     230.0d0     ; rcov=1.85d0/Bohr_Ang ; znucl=89
     547              :  case('Th')
     548              :    amu=     232.0381d0  ; rcov=1.65d0/Bohr_Ang ; znucl=90
     549              :  case('Pa')
     550              :    amu=     231.0359d0  ; rcov=1.50d0/Bohr_Ang ; znucl=91
     551              :  case(' U', 'U ')
     552              :    amu=     238.0289d0  ; rcov=1.42d0/Bohr_Ang ; znucl=92
     553              :  case('Np')
     554              :    amu=     237.0482d0  ; rcov=1.42d0/Bohr_Ang ; znucl=93
     555              :  case('Pu')
     556              :    amu=     242.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=94
     557              :  case('Am')
     558              :    amu=     243.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=95
     559              :  case('Cm')
     560              :    amu=     247.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=96
     561              :  case('Bk')
     562              :    amu=     247.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=97
     563              :  case('Cf')
     564              :    amu=     249.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=98
     565              :  case('Es')
     566              :    amu=     254.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=89
     567              :  case('Fm')
     568              :    amu=     253.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=100
     569              :  case('Md')
     570              :    amu=     256.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=101
     571              :  case('No')
     572              :    amu=     254.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=102
     573              :  case('Lr')
     574              :    amu=     257.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=103
     575              :  case('Xx')
     576            0 :    amu=     260.0d0     ; rcov=1.42d0/Bohr_Ang ; znucl=104
     577              :  case default
     578            0 :    ABI_ERROR(sjoin("Unknown element symbol: `",trim(symbol), "`"))
     579              :  end select
     580              : 
     581          178 :  atom%znucl = znucl
     582          178 :  atom%amu = amu
     583          178 :  atom%rcov = rcov
     584          178 :  atom%symbol = symbol
     585              : 
     586          178 : end subroutine atomdata_from_symbol
     587              : !!***
     588              : 
     589              : !----------------------------------------------------------------------
     590              : 
     591              : !!****f* m_atomdata/znucl2symbol
     592              : !! NAME
     593              : !!
     594              : !! FUNCTION
     595              : !!   Return the symbol from znucl
     596              : !!
     597              : !! INPUTS
     598              : !! znucl=atomic number
     599              : !!
     600              : !! OUTPUT
     601              : !!
     602              : !! SOURCE
     603              : 
     604         2076 : function znucl2symbol(znucl) result(symbol)
     605              : 
     606              : !Arguments ------------------------------------
     607              : !scalars
     608              :  real(dp),intent(in) :: znucl
     609              :  character(len=2) :: symbol
     610              : 
     611              : !Local variables
     612              :  type(atomdata_t) :: atom
     613              : 
     614              : ! *************************************************************************
     615              : 
     616         2076 :  call atomdata_from_znucl(atom, znucl)
     617         2076 :  symbol = atom%symbol
     618              : 
     619         2076 : end function znucl2symbol
     620              : !!***
     621              : 
     622              : !----------------------------------------------------------------------
     623              : 
     624              : !!****f* m_atomdata/symbol2znucl
     625              : !! NAME
     626              : !!
     627              : !! FUNCTION
     628              : !!   Return znucl from the symbol
     629              : !!
     630              : !! OUTPUT
     631              : !!
     632              : !! SOURCE
     633              : 
     634          150 : function symbol2znucl(symbol) result(znucl)
     635              : 
     636              : !Arguments ------------------------------------
     637              : !scalars
     638              :  real(dp) :: znucl
     639              :  character(len=*),intent(in) :: symbol
     640              : 
     641              : !Local variables
     642              :  type(atomdata_t) :: atom
     643              : 
     644              : ! *************************************************************************
     645              : 
     646          150 :  call atomdata_from_symbol(atom, symbol)
     647          150 :  znucl = atom%znucl
     648              : 
     649          150 : end function symbol2znucl
     650              : !!***
     651              : 
     652              : !!****f* m_atomdata/atom_length
     653              : !! NAME
     654              : !! atom_length
     655              : !!
     656              : !! FUNCTION
     657              : !! Return atomic decay length for one given type of atom.
     658              : !! This length is used to generate an approximate atomic gaussian density
     659              : !! in reciprocal space:   n^AT(G)=exp[-(2pi.length.G)^2]
     660              : !!
     661              : !! INPUTS
     662              : !! densty=parameter for initialisation of the density of this atom type
     663              : !!        if densty>0, returned decay length if densty !
     664              : !! zion=charge on current type of atom (real number)
     665              : !! znucl=atomic number, for current type of atom
     666              : !!
     667              : !! OUTPUT
     668              : !! length=decay lenth
     669              : !!
     670              : !! SOURCE
     671              : 
     672         4981 : function atom_length(densty,zion,znucl) result(length)
     673              : 
     674              : !Arguments ------------------------------------
     675              : !scalars
     676              :  real(dp),intent(in) :: densty,zion,znucl
     677              :  real(dp) :: length
     678              : 
     679              : !Local variables-------------------------------
     680              : !scalars
     681              :  integer :: nval
     682              :  real(dp) :: coreel
     683              : !arrays
     684              :  real(dp) :: data_length(16)
     685              : 
     686              : ! *************************************************************************
     687              : 
     688              : !Either use the input value, or the default value, tabulated now.
     689         4981 :  if(abs(densty)>tol10)then
     690              :    length=densty
     691              :  else
     692              : 
     693              : !  Count the number of core electrons.
     694         4920 :    coreel=znucl-zion
     695              : !  Round the number of valence electrons
     696         4920 :    nval=nint(zion)
     697              : 
     698              : !  For each set of core electron numbers, there are different decay lengths,
     699              : !  they start from nval=1, and proceed by group of 5, until a default is used
     700              : 
     701         4920 :    if (nval==0) then
     702              :      length=zero
     703              : 
     704              : !    Bare ions : adjusted on 1h and 2he only
     705         4918 :    else if(coreel<0.5)then
     706         6150 :      data_length(1:4)=(/ .6_dp,.4_dp,.3_dp,.25_dp /)
     707         1230 :      length=.2_dp
     708         1230 :      if(nval<=4)length=data_length(nval)
     709              : 
     710              : !    1s2 core : adjusted on 3li, 6c, 7n, and 8o
     711         3688 :    else if(coreel<2.5)then
     712              :      data_length(1:8)=(/ 1.8_dp,1.4_dp,1.0_dp ,.7_dp,.6_dp,&
     713        13680 : &     .5_dp, .4_dp, .35_dp /)
     714         1520 :      length=.3_dp
     715         1520 :      if(nval<=8)length=data_length(nval)
     716              : 
     717              : !    Ne core (1s2 2s2 2p6) : adjusted on 11na, 13al, 14si and 17cl
     718         2168 :    else if(coreel<10.5)then
     719              :      data_length(1:10)=(/ 2.0_dp,1.6_dp,1.25_dp,1.1_dp,1.0_dp,&
     720        18425 : &     .9_dp, .8_dp, .7_dp , .7_dp, .7_dp  /)
     721         1675 :      length=.6_dp
     722         1675 :      if(nval<=10)length=data_length(nval)
     723              : 
     724              : !    Mg core (1s2 2s2 2p6 3s2) : adjusted on 19k, and on coreel==10
     725          493 :    else if(coreel<12.5)then
     726              :      data_length(1:10)=(/ 1.9_dp,1.5_dp,1.15_dp,1.0_dp,0.9_dp,&
     727           22 : &     .8_dp, .7_dp, .6_dp , .6_dp, .6_dp  /)
     728            2 :      length=.5_dp
     729            2 :      if(nval<=10)length=data_length(nval)
     730              : 
     731              : !    Ar core (Ne + 3s2 3p6) : adjusted on 20ca, 25mn and 30zn
     732          491 :    else if(coreel<18.5)then
     733              :      data_length(1:12)=(/ 2.0_dp ,1.8_dp ,1.5_dp,1.2_dp ,1.0_dp,&
     734              : &     .9_dp , .85_dp, .8_dp, .75_dp, .7_dp,&
     735          806 : &     .65_dp, .65_dp /)
     736           62 :      length=.6_dp
     737           62 :      if(nval<=12)length=data_length(nval)
     738              : 
     739              : !    Full 3rd shell core (Ar + 3d10) : adjusted on 31ga, 34se and 38sr
     740          429 :    else if(coreel<28.5)then
     741              :      data_length(1:14)=(/ 1.5_dp ,1.25_dp,1.15_dp,1.05_dp,1.00_dp,&
     742              : &     .95_dp, .95_dp, .9_dp , .9_dp , .85_dp,&
     743         2295 : &     .85_dp, .80_dp, .8_dp , .75_dp         /)
     744          153 :      length=.7_dp
     745          153 :      if(nval<=14)length=data_length(nval)
     746              : 
     747              : !    Krypton core (Ar + 3d10 4s2 4p6) : adjusted on 39y, 42mo and 48cd
     748          276 :    else if(coreel<36.5)then
     749              :      data_length(1:12)=(/ 2.0_dp ,2.00_dp,1.60_dp,1.40_dp,1.25_dp,&
     750              : &     1.10_dp,1.00_dp, .95_dp, .90_dp, .85_dp,&
     751          221 : &     .80_dp, .75_dp /)
     752           17 :      length=.7_dp
     753           17 :      if(nval<=12)length=data_length(nval)
     754              : 
     755              : !    For the remaining elements, consider a function of nval only
     756              :    else
     757              :      data_length(1:12)=(/ 2.0_dp ,2.00_dp,1.55_dp,1.25_dp,1.15_dp,&
     758              : &     1.10_dp,1.05_dp,1.0_dp , .95_dp , .9_dp,&
     759         3367 : &     .85_dp, .85_dp /)
     760          259 :      length=.8_dp
     761          259 :      if(nval<=12)length=data_length(nval)
     762              : 
     763              :    end if
     764              : 
     765              :  end if  ! End the choice between default and no-default
     766              : 
     767              : !DEBUG
     768              : !Here, use the previous default
     769              : !length=1.2_dp
     770              : !ENDDEBUG
     771              : 
     772         4981 : end function atom_length
     773              : !!***
     774              : 
     775              : !!****f* m_atomdata/atom_gauss
     776              : !! NAME
     777              : !! atom_gauss
     778              : !!
     779              : !! FUNCTION
     780              : !! Approximate the atomic density with a gaussian. Used to approximate densities with
     781              : !! atomic-like quantities if the pseudopotential does not provide the valence charge density.
     782              : !!
     783              : !! INPUTS
     784              : !! ntypat=Number of type of atoms.
     785              : !! densty(ntypat,3)=parameter for initialisation of the density of this atom type
     786              : !!                  if densty>0, returned decay length if densty!
     787              : !! ziontypat(ntypat)=charge on current type of atom (real number)
     788              : !! znucltypat=atomic number, for current type of atom
     789              : !!
     790              : !! OUTPUT
     791              : !! gauss(2,ntypat)=Gaussian parameters.
     792              : !!
     793              : !! SOURCE
     794              : 
     795            0 : subroutine atom_gauss(ntypat, densty, ziontypat, znucltypat, gauss)
     796              : 
     797              : !Arguments ------------------------------------
     798              : !scalars
     799              :  integer,intent(in) :: ntypat
     800              : !arrays
     801              :  real(dp),intent(in) :: densty(ntypat,4),ziontypat(ntypat),znucltypat(ntypat)
     802              :  real(dp),intent(out) :: gauss(2,ntypat)
     803              : 
     804              : !Local variables-------------------------------
     805              : !scalars
     806              :  integer :: itypat
     807              : 
     808              : ! *************************************************************************
     809              : 
     810            0 :  do itypat=1,ntypat
     811            0 :    gauss(1,itypat) = ziontypat(itypat)
     812            0 :    gauss(2,itypat) = atom_length(densty(itypat,1), ziontypat(itypat), znucltypat(itypat))
     813              :  end do
     814              : 
     815            0 : end subroutine atom_gauss
     816              : !!***
     817              : 
     818            0 : end module m_atomdata
     819              : !!***
        

Generated by: LCOV version 2.3-1