Source code for ase.utils.eos

# -*- coding: utf-8 -*-

import numpy as np

from ase.utils.sjeos import EquationOfStateSJEOS

try:
    # ase.utils.eosase2 requires scipy
    import scipy
    from ase.utils.eosase2 import EquationOfStateASE2

[docs] class EquationOfState(EquationOfStateSJEOS, EquationOfStateASE2): """Fit equation of state for bulk systems. The following equation is used:: sjeos (default) A third order inverse polynomial fit 10.1103/PhysRevB.67.026103 2 3 -1/3 E(V) = c + c t + c t + c t , t = V 0 1 2 3 taylor A third order Taylor series expansion about the minimum volume murnaghan PRB 28, 5480 (1983) birch Intermetallic compounds: Principles and Practice, Vol I: Principles. pages 195-210 birchmurnaghan PRB 70, 224107 pouriertarantola PRB 70, 224107 vinet PRB 70, 224107 antonschmidt Intermetallics 11, 23-32 (2003) p3 A third order polynomial fit Use:: eos = EquationOfState(volumes, energies, eos='sjeos') v0, e0, B = eos.fit() eos.plot() """ def __init__(self, volumes, energies, eos='sjeos'): if eos == 'sjeos': EquationOfStateSJEOS.__init__(self, volumes, energies, eos) else: # old ASE2 implementation EquationOfStateASE2.__init__(self, volumes, energies, eos) def fit(self): if self.eos_string == 'sjeos': return EquationOfStateSJEOS.fit(self) else: return EquationOfStateASE2.fit(self) def plot(self, filename=None, show=None): if self.eos_string == 'sjeos': return EquationOfStateSJEOS.plot(self, filename, show) else: return EquationOfStateASE2.plot(self, filename, show)
except ImportError: # ase.utils.sjeos requires only numpy EquationOfState = EquationOfStateSJEOS