rgpycrumbs.eon.tls_pairs

Two-level-system pairs from an eOn aKMC run, with tunnelling splittings.

Added in version 1.11.0.

A two-level system (TLS) in a glass is a pair of adjacent minima that the system tunnels between at about one kelvin. aKMC already holds the pairs: each row of a state’s processtable is a reactant, a saddle and a product, kept in procdata/. For every pair this writes the asymmetry, the barrier, the mass-weighted distance between the minima, and the one-dimensional WKB tunnelling splitting with the TLS energy sqrt(delta**2 + delta0**2).

Where eOn has run an NEB on the pair, the splitting comes from that band: eOn writes it into the first frame of neb.con (tunnel_splitting, hbar_omega_reactant, …), computed along the mass-weighted band. Without a band, the pair gets a three-point estimate through reactant, saddle and product, labelled three_point: a screen, not a result.

Quantities carry units through pint; the CSV states them in its header.

Attributes

Classes

Pair

One pair of minima and what it would be as a two-level system.

Functions

_atoms(con)

_displacement(→ numpy.ndarray)

Minimum-image displacement from a to b under the cell of a.

_mass_weighted(→ float)

three_point_splitting(→ float)

WKB splitting of a double well through reactant, saddle and product.

_band_values(→ dict[str, float] | None)

The tunnelling values eOn wrote on a band's first frame, if any.

pairs_of_state(→ list[Pair])

_state_dirs(→ list[pathlib.Path])

main(akmc_dir, *, output, neb_root, max_asymmetry, ...)

Write the TLS pairs an aKMC run found, with WKB tunnelling splittings.

Module Contents

rgpycrumbs.eon.tls_pairs.log[source]
rgpycrumbs.eon.tls_pairs.ureg[source]
rgpycrumbs.eon.tls_pairs.Q_[source]
rgpycrumbs.eon.tls_pairs.HBAR[source]
rgpycrumbs.eon.tls_pairs.KB[source]
rgpycrumbs.eon.tls_pairs.MOVED_CUTOFF = 0.1[source]
rgpycrumbs.eon.tls_pairs.FIELDS = ('state', 'process', 'delta_eV', 'barrier_eV', 'distance_mw_amu^0.5_A', 'max_displacement_A',...[source]
class rgpycrumbs.eon.tls_pairs.Pair[source]

One pair of minima and what it would be as a two-level system.

state: str[source]
process: int[source]
delta: pint.Quantity[source]
barrier: pint.Quantity[source]
distance_mw: pint.Quantity[source]
max_displacement: pint.Quantity[source]
moved_atoms: int[source]
delta0: pint.Quantity[source]
tls_energy: pint.Quantity[source]
path: str[source]
property tls_kelvin: pint.Quantity[source]
row() → dict[str, object][source]
rgpycrumbs.eon.tls_pairs._atoms(con: pathlib.Path)[source]
rgpycrumbs.eon.tls_pairs._displacement(a, b) → numpy.ndarray[source]

Minimum-image displacement from a to b under the cell of a.

rgpycrumbs.eon.tls_pairs._mass_weighted(dr: numpy.ndarray, masses: numpy.ndarray) → float[source]
rgpycrumbs.eon.tls_pairs.three_point_splitting(d1: float, d2: float, barrier: float, delta: float) → float[source]

WKB splitting of a double well through reactant, saddle and product.

Each side is a cubic flat at both ends (V (3 t**2 - 2 t**3)), whose curvature at a minimum is 6 V / d**2. The level is the higher of the two harmonic ground states, the prefactor frequency the geometric mean, the same convention eOn’s client uses along a band. Energies in eV, distances in amu**0.5 Angstrom.

rgpycrumbs.eon.tls_pairs._band_values(neb_con: pathlib.Path) → dict[str, float] | None[source]

The tunnelling values eOn wrote on a band’s first frame, if any.

rgpycrumbs.eon.tls_pairs.pairs_of_state(state_dir: pathlib.Path, neb_root: pathlib.Path | None) → list[Pair][source]
rgpycrumbs.eon.tls_pairs._state_dirs(akmc_dir: pathlib.Path) → list[pathlib.Path][source]
rgpycrumbs.eon.tls_pairs.main(akmc_dir, *, output, neb_root, max_asymmetry, max_barrier, max_kelvin)[source]

Write the TLS pairs an aKMC run found, with WKB tunnelling splittings.