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 196155 : 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 196155 : 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 8774 : 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 29839 : 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 196155 : amu=260.0d0 ; rcov=1.42d0/Bohr_Ang ; symbol='Xx'
330 :
331 : end select
332 :
333 196155 : atom%znucl = znucl
334 196155 : atom%amu = amu
335 196155 : atom%rcov = rcov
336 196155 : atom%symbol = symbol
337 :
338 196155 : 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 : !!***
|