Skip to main content

Overview

The EOS task calculates the equation of state (EOS) of a crystal by:
  1. Performing a full cell relaxation via the OPT task.
  2. Generating npoints uniformly strained copies of the relaxed cell.
  3. Relaxing atomic positions (fixed cell) for each strained copy.
  4. Fitting the resulting energy–volume data with the Birch–Murnaghan EOS (via pymatgen).
It is registered as a Prefect task with the name EOS and uses a TASK_SOURCE + INPUTS cache policy.

Function signature

Parameters

ase.Atoms
required
The input atomic structure.
ase.calculators.calculator.BaseCalculator
required
ASE-compatible calculator for energy and force evaluations.
Optimizer | str
default:"BFGSLineSearch"
Optimizer used for both the initial full relaxation and the per-strain position relaxations. See OPT for accepted string values.
dict | None
default:"None"
Extra keyword arguments forwarded to the optimizer constructor.
Filter | str | None
default:"FrechetCell"
Filter applied during the initial full relaxation only. Subsequent per-strain runs use filter=None (positions only). See OPT for accepted string values.
dict | None
default:"None"
Extra keyword arguments forwarded to the filter constructor.
dict | None
default:"None"
Convergence criteria forwarded to optimizer.run(). See OPT for details.
number
default:"0.1"
Maximum absolute volumetric strain applied to each lattice dimension. Linear scale factors span [1 - max_abs_strain, 1 + max_abs_strain]^(1/3).
number
default:"11"
Number of strain points (i.e., structures) used to sample the energy–volume curve.
boolean
default:"true"
When True, all per-strain OPT sub-tasks are submitted concurrently using OPT.submit() and collected with prefect.futures.wait. When False, they run sequentially.
boolean
default:"false"
When True, persists and caches intermediate OPT results so repeated calls with the same inputs skip re-computation. When False, intermediate results are not cached.

Internal OPT chaining

EOS internally calls the OPT task twice per strain point:
  1. Initial relaxation — uses the provided filter to relax both cell and positions.
  2. Per-strain relaxationsfilter=None, so only atomic positions are relaxed at each fixed strained volume.
Both calls respect optimizer, optimizer_kwargs, and criterion. The cache_opt flag controls whether persist_result and refresh_cache are set on the inner OPT calls.

Return value

ase.Atoms
The fully relaxed (equilibrium) structure.
object
Raw energy–volume data used for the fit.
number
Bulk modulus in GPa (b0 converted from eV/ų).
number
Bulk modulus in eV/ų (Birch–Murnaghan b0 parameter).
number
Pressure derivative of the bulk modulus (dimensionless).
number
Equilibrium energy in eV.
number
Equilibrium volume in ų.
If the initial relaxation fails, the function returns a Prefect State object instead of a dict. Always check isinstance(result, dict) before accessing keys.

Example