-
Notifications
You must be signed in to change notification settings - Fork 1
/
atommass.f90
222 lines (218 loc) · 6.3 KB
/
atommass.f90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! CARACAL - Ring polymer molecular dynamics and rate constant calculations
! on black-box generated potential energy surfaces
!
! Copyright (c) 2023 by Julien Steffen ([email protected])
! Stefan Grimme ([email protected]) (QMDFF code)
!
! Permission is hereby granted, free of charge, to any person obtaining a
! copy of this software and associated documentation files (the "Software"),
! to deal in the Software without restriction, including without limitation
! the rights to use, copy, modify, merge, publish, distribute, sublicense,
! and/or sell copies of the Software, and to permit persons to whom the
! Software is furnished to do so, subject to the following conditions:
!
! The above copyright notice and this permission notice shall be included in
! all copies or substantial portions of the Software.
!
! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
! THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
! FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
! DEALINGS IN THE SOFTWARE.
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! ###############################################################
! ## ##
! ## subroutine atommass -- initialize atomic masses ##
! ## ##
! ###############################################################
!
! Normally the atomic masses needed for dynamics are read in
! from the ffield file.
! But in the case of EVB-QMDFF no masses are specified in the ffield
! so they need to defined here in this file.
! The masses from H up to Rn are availiable
! They are taken from "Das große Tafelwerk, 1. Auflage 2003"
!
! part of EVB
!
subroutine atommass(i)
use general
use evb_mod
implicit none
integer::i
character(len=2)::adum
!
! initialize the element-masses
! Convert all letters to upcase letters in order to avoid
! errors with atom symbols!
!
adum=name(i)
call upcase(adum)
if (adum .eq. "H") then
mass(i)=1.00782503207d0
else if (adum .eq. "D") then
mass(i)=2.0141017778d0
else if (adum .eq. "HE") then
mass(i)=4.00260d0
else if (adum .eq. "LI") then
mass(i)=6.94000d0
else if (adum .eq. "BE") then
mass(i)=9.01218d0
else if (adum .eq. "B") then
mass(i)=10.81000d0
else if (adum .eq. "C") then
mass(i)=12.00000d0
else if (adum .eq. "N") then
mass(i)=14.0030740048d0
else if (adum .eq. "O") then
mass(i)=15.99491461956d0
else if (adum .eq. "F") then
mass(i)=18.99840d0
else if (adum .eq. "NE") then
mass(i)=20.18d0
else if (adum .eq. "NA") then
mass(i)=23.0d0
else if (adum .eq. "MG") then
mass(i)=24.31d0
else if (adum .eq. "AL") then
mass(i)=26.98d0
else if (adum .eq. "SI") then
mass(i)=28.09d0
else if (adum .eq. "P") then
mass(i)=30.97d0
else if (adum .eq. "S") then
mass(i)=32.06000d0
else if (adum .eq. "CL") then
mass(i)=34.96885268d0
else if (adum .eq. "AR") then
mass(i)=39.95d0
else if (adum .eq. "K") then
mass(i)=39.1d0
else if (adum .eq. "CA") then
mass(i)=40.08d0
else if (adum .eq. "SC") then
mass(i)=44.96d0
else if (adum .eq. "TI") then
mass(i)=47.88d0
else if (adum .eq. "V") then
mass(i)=50.94d0
else if (adum .eq. "CR") then
mass(i)=52.0d0
else if (adum .eq. "MN") then
mass(i)=54.94d0
else if (adum .eq. "FE") then
mass(i)=55.85d0
else if (adum .eq. "CO") then
mass(i)=58.93d0
else if (adum .eq. "NI") then
mass(i)=58.69d0
else if (adum .eq. "CU") then
mass(i)=63.55d0
else if (adum .eq. "ZN") then
mass(i)=65.39d0
else if (adum .eq. "GA") then
mass(i)=69.72d0
else if (adum .eq. "GE") then
mass(i)=72.61d0
else if (adum .eq. "AS") then
mass(i)=74.92d0
else if (adum .eq. "SE") then
mass(i)=78.96d0
else if (adum .eq. "BR") then
mass(i)=78.9183371d0
else if (adum .eq. "KR") then
mass(i)=83.80d0
else if (adum .eq. "RB") then
mass(i)=85.47d0
else if (adum .eq. "SR") then
mass(i)=87.62d0
else if (adum .eq. "Y") then
mass(i)=88.91d0
else if (adum .eq. "ZR") then
mass(i)=91.22d0
else if (adum .eq. "NB") then
mass(i)=92.91d0
else if (adum .eq. "MO") then
mass(i)=95.94d0
else if (adum .eq. "TC") then
mass(i)=98d0
else if (adum .eq. "RU") then
mass(i)=101.07d0
else if (adum .eq. "RH") then
mass(i)=102.91d0
else if (adum .eq. "PD") then
mass(i)=106.42d0
else if (adum .eq. "AG") then
mass(i)=107.87d0
else if (adum .eq. "CD") then
mass(i)=112.41d0
else if (adum .eq. "IN") then
mass(i)=114.82d0
else if (adum .eq. "SN") then
mass(i)=118.71d0
else if (adum .eq. "SB") then
mass(i)=121.76d0
else if (adum .eq. "TE") then
mass(i)=127.60d0
else if (adum .eq. "I") then
mass(i)=125.90d0
else if (adum .eq. "XE") then
mass(i)=131.29d0
else if (adum .eq. "CS") then
mass(i)=132.91d0
else if (adum .eq. "BA") then
mass(i)=137.33d0
else if (adum .eq. "LA") then
mass(i)=138.91d0
else if (adum .eq. "HF") then
mass(i)=178.49d0
else if (adum .eq. "TA") then
mass(i)=180.95d0
else if (adum .eq. "W") then
mass(i)=183.95d0
else if (adum .eq. "RE") then
mass(i)=186.21d0
else if (adum .eq. "OS") then
mass(i)=190.23d0
else if (adum .eq. "IR") then
mass(i)=192.22d0
else if (adum .eq. "PT") then
mass(i)=195.08d0
else if (adum .eq. "AU") then
mass(i)=196.97d0
else if (adum .eq. "HG") then
mass(i)=200.59d0
else if (adum .eq. "TL") then
mass(i)=204.38d0
else if (adum .eq. "PB") then
mass(i)=207.2d0
else if (adum .eq. "BI") then
mass(i)=208.98d0
else if (adum .eq. "PO") then
mass(i)=209d0
else if (adum .eq. "AT") then
mass(i)=210d0
else if (adum .eq. "RN") then
mass(i)=222d0
end if
!
! If masses shall be changed manually
!
if (change_mass) then
if (adum .eq. elem_mass) then
mass(i)=newmass
end if
end if
if (use_rpmd) then
mass(i)=mass(i)/emass
! test for RPMDrate
! mass(i)=mass(i)*0.001d0/6.02214179d+23/9.1093826e-31
end if
return
end subroutine atommass