index | modules | gitlab | page source

# Equation of state

The `EquationOfState` class can be used to find equilibrium volume, energy, and bulk modulus for solids:

class ase.eos.EquationOfState(volumes, energies, eos='sj')

  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='murnaghan')
      v0, e0, B = eos.fit()
      eos.plot(show=True)

  fit(warn=True)

    Calculate volume, energy, and bulk modulus.

    Returns the optimal volume, the minimum energy, and the bulk modulus. Notice that the ASE units for the bulk modulus is eV/Angstrom^3 - to get the value in GPa, do this:

        v0, e0, B = eos.fit()
        print(B / kJ * 1.0e24, 'GPa')

  plot(filename=None, show=False, ax=None)

    Plot fitted energy curve.

    Uses Matplotlib to plot the energy curve. Use show=True to show the figure and filename=’abc.png’ or filename=’abc.eps’ to save the figure to a file.

Convenient helper function:

ase.eos.calculate_eos(atoms, npoints=5, eps=0.04, trajectory=None, callback=None)

  Calculate equation-of-state.

  atoms: Atoms object

    System to calculate EOS for. Must have a calculator attached.

  npoints: int

    Number of points.

  eps: float

    Variation in volume from v0*(1-eps) to v0*(1+eps).

  trajectory: Trjectory object or str

    Write configurations to a trajectory file.

  callback: function

    Called after every energy calculation.

      >>> from ase.build import bulk
      >>> from ase.calculators.emt import EMT
      >>> a = bulk('Cu', 'fcc', a=3.6)
      >>> a.calc = EMT()
      >>> eos = calculate_eos(a, trajectory='Cu.traj')
      >>> v, e, B = eos.fit()
      >>> a = (4 * v)**(1 / 3.0)
      >>> print('{0:.6f}'.format(a))
      3.589825

See also

The Equation of state (EOS) tutorial.