Statistiques
| Révision :

root / ase / gui / bulk_modulus.py @ 19

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
"""