Branch data 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 : 204861 : 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 : 204861 : 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 : 8809 : 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 : 9224 : 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 : 108 : 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 : 3934 : amu=24.3050d0 ; rcov=1.36d0/Bohr_Ang ; symbol='Mg'
137 : : case(13)
138 : 21459 : amu=26.981539d0 ; rcov=1.18d0/Bohr_Ang ; symbol='Al'
139 : : case(14)
140 : 30774 : amu=28.0855d0 ; rcov=1.11d0/Bohr_Ang ; symbol='Si'
141 : : case(15)
142 : 4958 : 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 : 1317 : 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 : 3473 : 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 : 1488 : 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 : 55 : amu=65.39d0 ; rcov=1.25d0/Bohr_Ang ; symbol='Zn'
175 : : case(31)
176 : 1535 : amu=69.723d0 ; rcov=1.26d0/Bohr_Ang ; symbol='Ga'
177 : : case(32)
178 : 1027 : 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 : 293 : 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 : 119 : 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 : 351 : 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 : 96 : 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 : 1391 : 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 : 4429 : 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 : 2004 : 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 : 120 : 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 [ + + + + : 204861 : amu=260.0d0 ; rcov=1.42d0/Bohr_Ang ; symbol='Xx'
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ - - + -
+ + + + +
- - + + +
- + - - +
+ - - - -
- + + + +
- - + + +
+ - - + +
- - - - -
- - - + -
+ - - - -
- - - - -
- - ]
330 : :
331 : : end select
332 : :
333 : 204861 : atom%znucl = znucl
334 : 204861 : atom%amu = amu
335 : 204861 : atom%rcov = rcov
336 : 204861 : atom%symbol = symbol
337 : :
338 : 204861 : 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 : 9371 : 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 : 9371 : call atomdata_from_znucl(atom, znucl)
617 : 9371 : symbol = atom%symbol
618 : :
619 : 9371 : 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 : 4985 : 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 [ + + ]: 4985 : if(abs(densty)>tol10)then
690 : : length=densty
691 : : else
692 : :
693 : : ! Count the number of core electrons.
694 : 4924 : coreel=znucl-zion
695 : : ! Round the number of valence electrons
696 : 4924 : 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 [ + + ]: 4924 : if (nval==0) then
702 : : length=zero
703 : :
704 : : ! Bare ions : adjusted on 1h and 2he only
705 [ + + ]: 4922 : 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 [ + + ]: 3692 : 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 [ + + ]: 13698 : & .5_dp, .4_dp, .35_dp /)
714 : 1522 : length=.3_dp
715 [ + - ]: 1522 : if(nval<=8)length=data_length(nval)
716 : :
717 : : ! Ne core (1s2 2s2 2p6) : adjusted on 11na, 13al, 14si and 17cl
718 [ + + ]: 2170 : 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 [ + + ]: 18447 : & .9_dp, .8_dp, .7_dp , .7_dp, .7_dp /)
721 : 1677 : length=.6_dp
722 [ + + ]: 1677 : 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 : 4985 : 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 : : !!***
|