root / ase / gui / bulk_modulus.py @ 4
Historique | Voir | Annoter | Télécharger (1,02 ko)
| 1 | 1 | tkerber | # -*- coding: utf-8 -*-
|
|---|---|---|---|
| 2 | 1 | tkerber | from math import sqrt |
| 3 | 1 | tkerber | |
| 4 | 1 | tkerber | import numpy as np |
| 5 | 1 | tkerber | |
| 6 | 1 | tkerber | from ase.units import kJ |
| 7 | 1 | tkerber | from ase.utils.eos import EquationOfState |
| 8 | 1 | tkerber | |
| 9 | 1 | tkerber | |
| 10 | 1 | tkerber | def BulkModulus(images): |
| 11 | 1 | tkerber | v = np.array([abs(np.linalg.det(A)) for A in images.A]) |
| 12 | 1 | tkerber | #import matplotlib.pyplot as plt
|
| 13 | 1 | tkerber | import pylab as plt |
| 14 | 1 | tkerber | plt.ion() |
| 15 | 1 | tkerber | EquationOfState(v, images.E).plot() |
| 16 | 1 | tkerber | |
| 17 | 1 | tkerber | """
|
| 18 | 1 | tkerber | fit = np.poly1d(np.polyfit(v**-(1.0 / 3), images.E, 3))
|
| 19 | 1 | tkerber | fit1 = np.polyder(fit, 1)
|
| 20 | 1 | tkerber | fit2 = np.polyder(fit1, 1)
|
| 21 | 1 | tkerber | for t in np.roots(fit1):
|
| 22 | 1 | tkerber | if t > 0 and fit2(t) > 0:
|
| 23 | 1 | tkerber | break
|
| 24 | 1 | tkerber | v0 = t**-3
|
| 25 | 1 | tkerber | e0 = fit(t)
|
| 26 | 1 | tkerber | B = t**5 * fit2(t) / 9 / kJ * 1.0e24 # Gpa
|
| 27 | 1 | tkerber |
|
| 28 | 1 | tkerber | import pylab
|
| 29 | 1 | tkerber | import matplotlib
|
| 30 | 1 | tkerber | #matplotlib.use('GTK')
|
| 31 | 1 | tkerber |
|
| 32 | 1 | tkerber | pylab.ion()
|
| 33 | 1 | tkerber | x = 3.95
|
| 34 | 1 | tkerber | pylab.figure(figsize=(x * 2.5**0.5, x))
|
| 35 | 1 | tkerber |
|
| 36 | 1 | tkerber | pylab.plot(v, images.E, 'o')
|
| 37 | 1 | tkerber |
|
| 38 | 1 | tkerber | x = np.linspace(min(v), max(v), 100)
|
| 39 | 1 | tkerber | pylab.plot(x, fit(x**-(1.0 / 3)), '-r')
|
| 40 | 1 | tkerber | pylab.xlabel(u'volume [Å^3]')
|
| 41 | 1 | tkerber | pylab.ylabel(u'energy [eV]')
|
| 42 | 1 | tkerber | pylab.title(u'E: %.3f eV, V: %.3f Å^3, B: %.3f GPa' % (e0, v0, B))
|
| 43 | 1 | tkerber | pylab.show()
|
| 44 | 1 | tkerber | """ |