peritheos 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- peritheos/__init__.py +3 -0
- peritheos/constants.py +22 -0
- peritheos/eos/__init__.py +234 -0
- peritheos/eos/_reference/__init__.py +0 -0
- peritheos/eos/_reference/sokolova2016.py +527 -0
- peritheos/eos/rt/__init__.py +7 -0
- peritheos/eos/rt/bm.py +281 -0
- peritheos/eos/rt/holzapfel.py +196 -0
- peritheos/eos/rt/vinet.py +86 -0
- peritheos/eos/thermal/__init__.py +5 -0
- peritheos/eos/thermal/sokolova2016.py +242 -0
- peritheos/utils.py +118 -0
- peritheos-0.1.0.dist-info/METADATA +145 -0
- peritheos-0.1.0.dist-info/RECORD +17 -0
- peritheos-0.1.0.dist-info/WHEEL +5 -0
- peritheos-0.1.0.dist-info/licenses/LICENSE +21 -0
- peritheos-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Original thermal pressure equation of states formalisms from Sokolova et al. 2016.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def P_thermal(
|
|
9
|
+
n,
|
|
10
|
+
z,
|
|
11
|
+
Vo,
|
|
12
|
+
Ko,
|
|
13
|
+
kk,
|
|
14
|
+
Tr,
|
|
15
|
+
x,
|
|
16
|
+
expp,
|
|
17
|
+
V,
|
|
18
|
+
QBo,
|
|
19
|
+
d,
|
|
20
|
+
mb,
|
|
21
|
+
QB1o,
|
|
22
|
+
d1,
|
|
23
|
+
mb1,
|
|
24
|
+
QE1o,
|
|
25
|
+
mE1,
|
|
26
|
+
QE2o,
|
|
27
|
+
mE2,
|
|
28
|
+
TK,
|
|
29
|
+
gamVo,
|
|
30
|
+
beta,
|
|
31
|
+
gb,
|
|
32
|
+
ao,
|
|
33
|
+
m,
|
|
34
|
+
mm,
|
|
35
|
+
ae,
|
|
36
|
+
):
|
|
37
|
+
"""
|
|
38
|
+
Original thermal pressure equation from sokolova et al. 2016.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
n : float
|
|
43
|
+
Number of atoms in the chemical formula
|
|
44
|
+
z : float
|
|
45
|
+
Atomic number of the chemical formula unit
|
|
46
|
+
Vo : float
|
|
47
|
+
Reference volume in [JBar^-1] (same as [cm^3/mol]/10)
|
|
48
|
+
Ko : float
|
|
49
|
+
Bulk modulus at reference volume [kbar]
|
|
50
|
+
kk : float
|
|
51
|
+
Bulk modulus derivative at reference volume
|
|
52
|
+
Tr : float
|
|
53
|
+
Reference temperature in [K] for the EOS (typically 298.15 K)
|
|
54
|
+
x : float
|
|
55
|
+
Fractional volume (V/Vo)
|
|
56
|
+
expp : float
|
|
57
|
+
unused in function
|
|
58
|
+
V : float
|
|
59
|
+
Volume in [JBar^-1] (same as [cm^3/mol]/10)
|
|
60
|
+
QBo : float
|
|
61
|
+
should be 1
|
|
62
|
+
d : float
|
|
63
|
+
should be 1
|
|
64
|
+
mb : float
|
|
65
|
+
should be 0
|
|
66
|
+
QB1o : float
|
|
67
|
+
should be 1
|
|
68
|
+
d1 : float
|
|
69
|
+
should be 1
|
|
70
|
+
mb1 : float
|
|
71
|
+
should be 0
|
|
72
|
+
QE1o : float
|
|
73
|
+
Einstein characteristic temperature, Theta_1 in [K]
|
|
74
|
+
mE1 : float
|
|
75
|
+
The first Einstein number
|
|
76
|
+
QE2o : float
|
|
77
|
+
Einstain characteristic temperature, Theta_02 in [K]
|
|
78
|
+
mE2 : float
|
|
79
|
+
The second Einstein number
|
|
80
|
+
TK : float
|
|
81
|
+
Temperature in [K]
|
|
82
|
+
gamVo : float
|
|
83
|
+
Additive normalizing constant for the Gruneisen parameter, (given as delta in Sokolova et al. 2016)
|
|
84
|
+
beta : float
|
|
85
|
+
Should be 0
|
|
86
|
+
gb : float
|
|
87
|
+
Generalized Gruneisen parameter, given as t in Sokolova et al. 2016
|
|
88
|
+
ao : float
|
|
89
|
+
Intrinsic anharmonicity parameter (10e-6 [K]), given as a_0 in Sokolova et al. 2016
|
|
90
|
+
m : float
|
|
91
|
+
Anharmonic analogue of the Grüneisen parameter
|
|
92
|
+
mm : float
|
|
93
|
+
Electronic analogue of the Grüneisen parameter, given as g in Sokolova et al. 2016
|
|
94
|
+
ae : float
|
|
95
|
+
Free electrons parameter (10e-6 [K]), given as e_0 in Sokolova et al. 2016
|
|
96
|
+
|
|
97
|
+
Returns
|
|
98
|
+
-------
|
|
99
|
+
Pth : float
|
|
100
|
+
Thermal pressure in [bar]
|
|
101
|
+
"""
|
|
102
|
+
R = 8.31451
|
|
103
|
+
|
|
104
|
+
fw = -np.log(3 * Ko / 10 / (1003.6 * (z * n / (Vo * 10)) ** (5 / 3)))
|
|
105
|
+
ff = x ** (1 / 3)
|
|
106
|
+
aa = 1.5 * (kk - 3) - fw
|
|
107
|
+
Px = (
|
|
108
|
+
3
|
|
109
|
+
* Ko
|
|
110
|
+
* 1000
|
|
111
|
+
* np.exp(fw * (1 - ff))
|
|
112
|
+
* (1 / ff**5 - 1 / ff**4)
|
|
113
|
+
* (1 + aa * ff - aa * ff**2)
|
|
114
|
+
)
|
|
115
|
+
KT = (
|
|
116
|
+
Ko
|
|
117
|
+
* 1000
|
|
118
|
+
/ ff**6
|
|
119
|
+
* np.exp(fw * (1 - ff))
|
|
120
|
+
* (
|
|
121
|
+
(-5 / ff**2 + 4 / ff) * (1 + aa * ff - aa * ff**2)
|
|
122
|
+
+ (1 / ff - 1) * (1 + aa * ff - aa * ff**2) * (-fw)
|
|
123
|
+
+ (1 / ff - 1) * (aa - 2 * aa * ff)
|
|
124
|
+
)
|
|
125
|
+
* (-x)
|
|
126
|
+
)
|
|
127
|
+
ex = (
|
|
128
|
+
3
|
|
129
|
+
/ ff**4
|
|
130
|
+
* Ko
|
|
131
|
+
* 1000
|
|
132
|
+
* np.exp(fw * (1 - ff))
|
|
133
|
+
* (
|
|
134
|
+
(-5 / ff**2 + 4 / ff) * (1 + aa * ff - aa * ff**2)
|
|
135
|
+
- (1 / ff - 1) * (1 + aa * ff - aa * ff**2) * fw
|
|
136
|
+
+ (1 / ff - 1) * (aa - 2 * aa * ff)
|
|
137
|
+
)
|
|
138
|
+
)
|
|
139
|
+
ex1 = (
|
|
140
|
+
1
|
|
141
|
+
/ ff**3
|
|
142
|
+
* Ko
|
|
143
|
+
* 1000
|
|
144
|
+
* np.exp(fw * (1 - ff))
|
|
145
|
+
* fw
|
|
146
|
+
* (
|
|
147
|
+
(-5 / ff**2 + 4 / ff) * (1 + aa * ff - aa * ff**2)
|
|
148
|
+
- (1 / ff - 1) * (1 + aa * ff - aa * ff**2) * fw
|
|
149
|
+
+ (1 / ff - 1) * (aa - 2 * aa * ff)
|
|
150
|
+
)
|
|
151
|
+
)
|
|
152
|
+
ex2 = (
|
|
153
|
+
Ko
|
|
154
|
+
* 1000
|
|
155
|
+
* np.exp(fw * (1 - ff))
|
|
156
|
+
* (
|
|
157
|
+
(10 / ff**3 - 4 / ff**2) * (1 + aa * ff - aa * ff**2)
|
|
158
|
+
+ (-5 / ff**2 + 4 / ff) * (aa - 2 * aa * ff)
|
|
159
|
+
+ fw / ff**2 * (1 + aa * ff - aa * ff**2)
|
|
160
|
+
- (1 / ff - 1) * (aa - 2 * aa * ff) * fw
|
|
161
|
+
- (aa - 2 * aa * ff) / ff**2
|
|
162
|
+
- 2 * aa * (1 / ff - 1)
|
|
163
|
+
)
|
|
164
|
+
/ ff**3
|
|
165
|
+
)
|
|
166
|
+
kkx = (ex + ex1 - ex2) / (-KT / ff) / 3
|
|
167
|
+
|
|
168
|
+
gt = gb - beta * x ** (1 / 3)
|
|
169
|
+
gtx = -beta / 3 * x ** (-2 / 3)
|
|
170
|
+
gamV = (-3 * KT + 2 * Px * gt + 9 * KT * kkx - 6 * gt * KT) / 6 / (
|
|
171
|
+
3 * KT - 2 * Px * gt
|
|
172
|
+
) + gamVo
|
|
173
|
+
ff2 = (x + 0.00001) ** (1 / 3)
|
|
174
|
+
KT2 = (
|
|
175
|
+
Ko
|
|
176
|
+
* 1000
|
|
177
|
+
/ ff2**6
|
|
178
|
+
* np.exp(fw * (1 - ff2))
|
|
179
|
+
* (
|
|
180
|
+
(-5 / ff2**2 + 4 / ff2) * (1 + aa * ff2 - aa * ff2**2)
|
|
181
|
+
+ (1 / ff2 - 1) * (1 + aa * ff2 - aa * ff2**2) * (-fw)
|
|
182
|
+
+ (1 / ff2 - 1) * (aa - 2 * aa * ff2)
|
|
183
|
+
)
|
|
184
|
+
* (-(x + 0.00001))
|
|
185
|
+
)
|
|
186
|
+
ex = (
|
|
187
|
+
3
|
|
188
|
+
/ ff2**4
|
|
189
|
+
* Ko
|
|
190
|
+
* 1000
|
|
191
|
+
* np.exp(fw * (1 - ff2))
|
|
192
|
+
* (
|
|
193
|
+
(-5 / ff2**2 + 4 / ff2) * (1 + aa * ff2 - aa * ff2**2)
|
|
194
|
+
- (1 / ff2 - 1) * (1 + aa * ff2 - aa * ff2**2) * fw
|
|
195
|
+
+ (1 / ff2 - 1) * (aa - 2 * aa * ff2)
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
ex1 = (
|
|
199
|
+
1
|
|
200
|
+
/ ff2**3
|
|
201
|
+
* Ko
|
|
202
|
+
* 1000
|
|
203
|
+
* np.exp(fw * (1 - ff2))
|
|
204
|
+
* fw
|
|
205
|
+
* (
|
|
206
|
+
(-5 / ff2**2 + 4 / ff2) * (1 + aa * ff2 - aa * ff2**2)
|
|
207
|
+
- (1 / ff2 - 1) * (1 + aa * ff2 - aa * ff2**2) * fw
|
|
208
|
+
+ (1 / ff2 - 1) * (aa - 2 * aa * ff2)
|
|
209
|
+
)
|
|
210
|
+
)
|
|
211
|
+
ex2 = (
|
|
212
|
+
Ko
|
|
213
|
+
* 1000
|
|
214
|
+
* np.exp(fw * (1 - ff2))
|
|
215
|
+
* (
|
|
216
|
+
(10 / ff2**3 - 4 / ff2**2) * (1 + aa * ff2 - aa * ff2**2)
|
|
217
|
+
+ (-5 / ff2**2 + 4 / ff2) * (aa - 2 * aa * ff2)
|
|
218
|
+
+ fw / ff2**2 * (1 + aa * ff2 - aa * ff2**2)
|
|
219
|
+
- (1 / ff2 - 1) * (aa - 2 * aa * ff2) * fw
|
|
220
|
+
- (aa - 2 * aa * ff2) / ff2**2
|
|
221
|
+
- 2 * aa * (1 / ff2 - 1)
|
|
222
|
+
)
|
|
223
|
+
/ ff2**3
|
|
224
|
+
)
|
|
225
|
+
kkx2 = (ex + ex1 - ex2) / (-KT2 / ff2) / 3
|
|
226
|
+
ff1 = (x - 0.00001) ** (1 / 3)
|
|
227
|
+
KT1 = (
|
|
228
|
+
Ko
|
|
229
|
+
* 1000
|
|
230
|
+
/ ff1**6
|
|
231
|
+
* np.exp(fw * (1 - ff1))
|
|
232
|
+
* (
|
|
233
|
+
(-5 / ff1**2 + 4 / ff1) * (1 + aa * ff1 - aa * ff1**2)
|
|
234
|
+
+ (1 / ff1 - 1) * (1 + aa * ff1 - aa * ff1**2) * (-fw)
|
|
235
|
+
+ (1 / ff1 - 1) * (aa - 2 * aa * ff1)
|
|
236
|
+
)
|
|
237
|
+
* (-(x - 0.00001))
|
|
238
|
+
)
|
|
239
|
+
ex = (
|
|
240
|
+
3
|
|
241
|
+
/ ff1**4
|
|
242
|
+
* Ko
|
|
243
|
+
* 1000
|
|
244
|
+
* np.exp(fw * (1 - ff1))
|
|
245
|
+
* (
|
|
246
|
+
(-5 / ff1**2 + 4 / ff1) * (1 + aa * ff1 - aa * ff1**2)
|
|
247
|
+
- (1 / ff1 - 1) * (1 + aa * ff1 - aa * ff1**2) * fw
|
|
248
|
+
+ (1 / ff1 - 1) * (aa - 2 * aa * ff1)
|
|
249
|
+
)
|
|
250
|
+
)
|
|
251
|
+
ex1 = (
|
|
252
|
+
1
|
|
253
|
+
/ ff1**3
|
|
254
|
+
* Ko
|
|
255
|
+
* 1000
|
|
256
|
+
* np.exp(fw * (1 - ff1))
|
|
257
|
+
* fw
|
|
258
|
+
* (
|
|
259
|
+
(-5 / ff1**2 + 4 / ff1) * (1 + aa * ff1 - aa * ff1**2)
|
|
260
|
+
- (1 / ff1 - 1) * (1 + aa * ff1 - aa * ff1**2) * fw
|
|
261
|
+
+ (1 / ff1 - 1) * (aa - 2 * aa * ff1)
|
|
262
|
+
)
|
|
263
|
+
)
|
|
264
|
+
ex2 = (
|
|
265
|
+
Ko
|
|
266
|
+
* 1000
|
|
267
|
+
* np.exp(fw * (1 - ff1))
|
|
268
|
+
* (
|
|
269
|
+
(10 / ff1**3 - 4 / ff1**2) * (1 + aa * ff1 - aa * ff1**2)
|
|
270
|
+
+ (-5 / ff1**2 + 4 / ff1) * (aa - 2 * aa * ff1)
|
|
271
|
+
+ fw / ff1**2 * (1 + aa * ff1 - aa * ff1**2)
|
|
272
|
+
- (1 / ff1 - 1) * (aa - 2 * aa * ff1) * fw
|
|
273
|
+
- (aa - 2 * aa * ff1) / ff1**2
|
|
274
|
+
- 2 * aa * (1 / ff1 - 1)
|
|
275
|
+
)
|
|
276
|
+
/ ff1**3
|
|
277
|
+
)
|
|
278
|
+
kkx1 = (ex + ex1 - ex2) / (-KT1 / ff1) / 3
|
|
279
|
+
|
|
280
|
+
dkkdx = (kkx2 - kkx1) / (0.00002)
|
|
281
|
+
|
|
282
|
+
qV = (
|
|
283
|
+
-1
|
|
284
|
+
/ 2
|
|
285
|
+
* (
|
|
286
|
+
-6 * KT * kkx**2 * Px * gt / x
|
|
287
|
+
+ 6 * KT * dkkdx * Px * gt
|
|
288
|
+
+ 6 * KT * kkx * KT * gt / x
|
|
289
|
+
- 6 * KT * kkx * Px * gtx
|
|
290
|
+
+ 4 * gt**2 * KT * kkx * Px / x
|
|
291
|
+
- 4 * gt**2 * KT**2 / x
|
|
292
|
+
- 9 * KT**2 * dkkdx
|
|
293
|
+
+ 6 * gtx * KT**2
|
|
294
|
+
)
|
|
295
|
+
/ (3 * KT - 2 * Px * gt) ** 2
|
|
296
|
+
* x
|
|
297
|
+
/ gamV
|
|
298
|
+
)
|
|
299
|
+
a = ao / 1000000 * x**m
|
|
300
|
+
|
|
301
|
+
QB = QBo * expp
|
|
302
|
+
QB1 = QB1o * expp
|
|
303
|
+
QE1 = QE1o * expp
|
|
304
|
+
QE2 = QE2o * expp
|
|
305
|
+
|
|
306
|
+
ggr = d * np.log(1 + QB / Tr / d)
|
|
307
|
+
br = 1 / (np.exp(ggr) - 1)
|
|
308
|
+
ex1r = np.exp(QB / Tr)
|
|
309
|
+
PBr = (
|
|
310
|
+
mb * R * ((QB * (d - 1) / 2 / d + Tr * QB * d * br / (Tr * d + QB)) * gamV / V)
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
gg = d * np.log(1 + QB / TK / d)
|
|
314
|
+
b = 1 / (np.exp(gg) - 1)
|
|
315
|
+
ex1 = np.exp(QB / TK)
|
|
316
|
+
PB = mb * R * ((QB * (d - 1) / 2 / d + TK * QB * d * b / (TK * d + QB)) * gamV / V)
|
|
317
|
+
|
|
318
|
+
gg1r = d1 * np.log(1 + QB1 / Tr / d1)
|
|
319
|
+
b1r = 1 / (np.exp(gg1r) - 1)
|
|
320
|
+
ex2r = np.exp(QB1 / Tr)
|
|
321
|
+
PB1r = (
|
|
322
|
+
mb1
|
|
323
|
+
* R
|
|
324
|
+
* ((QB1 * (d1 - 1) / 2 / d1 + Tr * QB1 * d1 * b1r / (Tr * d1 + QB1)) * gamV / V)
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
gg1 = d1 * np.log(1 + QB1 / TK / d1)
|
|
328
|
+
b1 = 1 / (np.exp(gg1) - 1)
|
|
329
|
+
ex2 = np.exp(QB1 / TK)
|
|
330
|
+
PB1 = (
|
|
331
|
+
mb1
|
|
332
|
+
* R
|
|
333
|
+
* ((QB1 * (d1 - 1) / 2 / d1 + TK * QB1 * d1 * b1 / (TK * d1 + QB1)) * gamV / V)
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
e1 = np.exp(QE1 / TK)
|
|
337
|
+
PE1 = mE1 * R * ((QE1 / 2 + QE1 / (e1 - 1)) * gamV / V)
|
|
338
|
+
|
|
339
|
+
e2 = np.exp(QE2 / TK)
|
|
340
|
+
PE2 = mE2 * R * ((QE2 / 2 + QE2 / (e2 - 1)) * gamV / V)
|
|
341
|
+
|
|
342
|
+
e1r = np.exp(QE1 / Tr)
|
|
343
|
+
PE1r = mE1 * R * ((QE1 / 2 + QE1 / (e1r - 1)) * gamV / V)
|
|
344
|
+
|
|
345
|
+
e2r = np.exp(QE2 / Tr)
|
|
346
|
+
PE2r = mE2 * R * ((QE2 / 2 + QE2 / (e2r - 1)) * gamV / V)
|
|
347
|
+
Pea = 3 / 2 * n * R * ao / 1000000 * x ** (m) * (m) / V * (TK**2 - Tr**2)
|
|
348
|
+
Pee = 3 / 2 * n * R * ae / 1000000 * x ** (mm) * (mm) / V * (TK**2 - Tr**2)
|
|
349
|
+
|
|
350
|
+
Pth = PB + PB1 + PE1 + PE2 - PBr - PB1r - PE1r - PE2r + Pee + Pea
|
|
351
|
+
return Pth
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def I_gamV(z, n, b, Vo, Ko, kk, gamVo, gb, beta, e=0.001):
|
|
355
|
+
"""
|
|
356
|
+
Integral of the Gruneisen parameter over the volume.
|
|
357
|
+
|
|
358
|
+
Parameters
|
|
359
|
+
----------
|
|
360
|
+
z : float
|
|
361
|
+
Atomic number of the chemical formula unit
|
|
362
|
+
n : float
|
|
363
|
+
Number of atoms in the chemical formula
|
|
364
|
+
b : float
|
|
365
|
+
Fractional volume (V/V0)
|
|
366
|
+
Vo : float
|
|
367
|
+
Reference volume in [JBar^-1] (same as [cm^3/mol]/10)
|
|
368
|
+
Ko : float
|
|
369
|
+
Bulk modulus at reference volume [kbar]
|
|
370
|
+
kk : float
|
|
371
|
+
Bulk modulus derivative at reference volume
|
|
372
|
+
gamVo : float
|
|
373
|
+
Additive normalizing constant for the Gruneisen parameter, (given as delta in Sokolova et al. 2016)
|
|
374
|
+
gb : float
|
|
375
|
+
Generalized Gruneisen parameter, given as t in Sokolova et al. 2016
|
|
376
|
+
beta : float
|
|
377
|
+
Anharmonic analogue of the Grüneisen parameter
|
|
378
|
+
e : float
|
|
379
|
+
Tolerance for the integration
|
|
380
|
+
|
|
381
|
+
Returns
|
|
382
|
+
-------
|
|
383
|
+
I_gamV : float
|
|
384
|
+
Integral of the Gruneisen parameter over the volume
|
|
385
|
+
|
|
386
|
+
"""
|
|
387
|
+
# check whether b is greater than 1
|
|
388
|
+
a = min(b, 1)
|
|
389
|
+
b = max(b, 1)
|
|
390
|
+
|
|
391
|
+
# calculate the integral using the trapezoidal rule
|
|
392
|
+
s2 = 1
|
|
393
|
+
h = b - a
|
|
394
|
+
S = f_gamV(a, n, z, Vo, Ko, kk, gamVo, gb, beta) + f_gamV(
|
|
395
|
+
b, n, z, Vo, Ko, kk, gamVo, gb, beta
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
while True:
|
|
399
|
+
s3 = s2
|
|
400
|
+
h /= 2
|
|
401
|
+
s1 = 0
|
|
402
|
+
x = a + h
|
|
403
|
+
|
|
404
|
+
while x < b:
|
|
405
|
+
s1 += 2 * f_gamV(x, n, z, Vo, Ko, kk, gamVo, gb, beta)
|
|
406
|
+
x += 2 * h
|
|
407
|
+
|
|
408
|
+
S += s1
|
|
409
|
+
s2 = (S + s1) * h / 3
|
|
410
|
+
error = abs(s3 - s2) / 15
|
|
411
|
+
|
|
412
|
+
if error < e:
|
|
413
|
+
break
|
|
414
|
+
|
|
415
|
+
return -s2 if b > 1 else s2
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def f_gamV(x, n, z, Vo, Ko, kk, gamVo, gb, beta):
|
|
419
|
+
"""
|
|
420
|
+
Helper function to calculate the Gruneisen parameter at a given temperature and pressure.
|
|
421
|
+
|
|
422
|
+
Parameters
|
|
423
|
+
----------
|
|
424
|
+
x : float
|
|
425
|
+
Fractional volume (V/Vo)
|
|
426
|
+
n : float
|
|
427
|
+
Number of atoms in the chemical formula
|
|
428
|
+
z : float
|
|
429
|
+
Atomic number of the chemical formula unit
|
|
430
|
+
Vo : float
|
|
431
|
+
Reference volume in [JBar^-1] (same as [cm^3/mol]/10)
|
|
432
|
+
Ko : float
|
|
433
|
+
Bulk modulus at reference volume [kbar]
|
|
434
|
+
kk : float
|
|
435
|
+
Bulk modulus derivative at reference volume
|
|
436
|
+
gamVo : float
|
|
437
|
+
Additive normalizing constant for the Gruneisen parameter, (given as delta in Sokolova et al. 2016)
|
|
438
|
+
gb : float
|
|
439
|
+
Generalized Gruneisen parameter, given as t in Sokolova et al. 2016
|
|
440
|
+
beta : float
|
|
441
|
+
Anharmonic analogue of the Grüneisen parameter
|
|
442
|
+
|
|
443
|
+
Returns
|
|
444
|
+
-------
|
|
445
|
+
f_gamV_value : float
|
|
446
|
+
Gruneisen parameter at a given temperature and pressure
|
|
447
|
+
"""
|
|
448
|
+
fw = -np.log(3 * Ko / 10 / (1003.6 * (z * n / (Vo * 10)) ** (5 / 3)))
|
|
449
|
+
ff = x ** (1 / 3)
|
|
450
|
+
aa = 1.5 * (kk - 3) - fw
|
|
451
|
+
|
|
452
|
+
KT = (
|
|
453
|
+
Ko
|
|
454
|
+
* 1000
|
|
455
|
+
/ ff**6
|
|
456
|
+
* np.exp(fw * (1 - ff))
|
|
457
|
+
* (
|
|
458
|
+
(-5 / ff**2 + 4 / ff) * (1 + aa * ff - aa * ff**2)
|
|
459
|
+
+ (1 / ff - 1) * (1 + aa * ff - aa * ff**2) * (-fw)
|
|
460
|
+
+ (1 / ff - 1) * (aa - 2 * aa * ff)
|
|
461
|
+
)
|
|
462
|
+
* (-x)
|
|
463
|
+
)
|
|
464
|
+
|
|
465
|
+
Px = (
|
|
466
|
+
3
|
|
467
|
+
* Ko
|
|
468
|
+
* 1000
|
|
469
|
+
* np.exp(fw * (1 - ff))
|
|
470
|
+
* (1 / ff**5 - 1 / ff**4)
|
|
471
|
+
* (1 + aa * ff - aa * ff**2)
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
ex = (
|
|
475
|
+
3
|
|
476
|
+
/ ff**4
|
|
477
|
+
* Ko
|
|
478
|
+
* 1000
|
|
479
|
+
* np.exp(fw * (1 - ff))
|
|
480
|
+
* (
|
|
481
|
+
(-5 / ff**2 + 4 / ff) * (1 + aa * ff - aa * ff**2)
|
|
482
|
+
- (1 / ff - 1) * (1 + aa * ff - aa * ff**2) * fw
|
|
483
|
+
+ (1 / ff - 1) * (aa - 2 * aa * ff)
|
|
484
|
+
)
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
ex1 = (
|
|
488
|
+
1
|
|
489
|
+
/ ff**3
|
|
490
|
+
* Ko
|
|
491
|
+
* 1000
|
|
492
|
+
* np.exp(fw * (1 - ff))
|
|
493
|
+
* fw
|
|
494
|
+
* (
|
|
495
|
+
(-5 / ff**2 + 4 / ff) * (1 + aa * ff - aa * ff**2)
|
|
496
|
+
- (1 / ff - 1) * (1 + aa * ff - aa * ff**2) * fw
|
|
497
|
+
+ (1 / ff - 1) * (aa - 2 * aa * ff)
|
|
498
|
+
)
|
|
499
|
+
)
|
|
500
|
+
|
|
501
|
+
ex2 = (
|
|
502
|
+
Ko
|
|
503
|
+
* 1000
|
|
504
|
+
* np.exp(fw * (1 - ff))
|
|
505
|
+
* (
|
|
506
|
+
(10 / ff**3 - 4 / ff**2) * (1 + aa * ff - aa * ff**2)
|
|
507
|
+
+ (-5 / ff**2 + 4 / ff) * (aa - 2 * aa * ff)
|
|
508
|
+
+ fw / ff**2 * (1 + aa * ff - aa * ff**2)
|
|
509
|
+
- (1 / ff - 1) * (aa - 2 * aa * ff) * fw
|
|
510
|
+
- (aa - 2 * aa * ff) / ff**2
|
|
511
|
+
- 2 * aa * (1 / ff - 1)
|
|
512
|
+
)
|
|
513
|
+
/ ff**3
|
|
514
|
+
)
|
|
515
|
+
|
|
516
|
+
kkx = (ex + ex1 - ex2) / (-KT / ff) / 3
|
|
517
|
+
|
|
518
|
+
gt = gb - beta * x ** (1 / 3)
|
|
519
|
+
gtx = -beta / 3 * x ** (-2 / 3)
|
|
520
|
+
|
|
521
|
+
f_gamV_value = (
|
|
522
|
+
gamVo
|
|
523
|
+
+ (-3 * KT + 2 * Px * gt + 9 * KT * kkx - 6 * gt * KT)
|
|
524
|
+
/ (6 * (3 * KT - 2 * Px * gt))
|
|
525
|
+
) / x
|
|
526
|
+
|
|
527
|
+
return f_gamV_value
|