Canonical definition

For each cleavage row, the work of separation is the total energy required to take the uncleaved bicrystal precursor and pull it apart along a single cleave plane, normalized by the area of that one plane:

where C_eV/Ų → J/m² = 16.02176565 is the unit-conversion constant (derived directly from 1 eV = 1.602176565 × 10⁻¹⁹ J and 1 Ų = 10⁻²⁰ m², giving 1 eV/Ų = 16.02176565 J/m²).

Sign convention. W_sep > 0 ⇒ energy is required to separate the two half-cells (the normal regime: cleaving a bonded interface costs energy). W_sep is the adhesion energy of the interface, not the surface energy of a free surface — they differ by a factor of two (γ = W_sep / 2 for an ideal symmetric cleave creating two identical free surfaces).

Term-by-term reference

Symbol Meaning Source Units
E_cleaved total energy of the cleaved bicrystal (two half-cells separated by vacuum across one cleave plane); a single structure row with state = 'Cleavage' DFT: structure.dft_energy of the cleavage row · MLIP: mlip_calc.energy for (potential, structure.atoms_hash) eV
E_uncleaved total energy of the uncleaved precursor (same cell, no cleave); resolved from the cleavage row's extra->>'base_job_name' (joined on structure.job_name AND state != 'Cleavage', lowest id tie-break) DFT: structure.dft_energy of the precursor row · MLIP: mlip_calc.energy for the precursor's atoms_hash eV
A_plane area of the single cleavage plane in Ų (the area of ONE free surface, NOT the sum of the two faces created on cleavage) derived: A_plane = (structure.extra->>'area_A2')::float / 2 Ų
C_eV/Ų → J/m² unit-conversion constant 16.02176565 hard-coded as EVA2_TO_JM2 in build_wsep_dfs.py:39 J/m² per eV/Ų
cleave_idx, cleave_z_frac enumerated cleave-plane index within the parent GB and its fractional z-position; identifiers only, not used in the W_sep formula extra->>'cleave_idx', extra->>'cleave_z_frac'

What extra->>'area_A2' actually contains (Phase 1 audit)

Historically the cleavage rows were ingested with extra->>'area_A2' set equal to 2 · A_plane — i.e. the total free-surface area created by the cleave (two faces of area A_plane each). The earlier site formula W_sep = ΔE / (2 · A_cleave) was reading A_cleave = A_plane and dividing by 2·A_cleave — which coincidentally matched ΔE / area_A2, but the published number was therefore ΔE / (2·A_plane) = γ, the surface energy, not the textbook work of separation.

The correction (in build_wsep_dfs.py, current main) is to publish W_sep = ΔE / A_plane. Operationally that is implemented as

W_sep = 2 · (E_cleaved − E_uncleaved) / area_a2 · 16.02176565       [J/m²]
      = (E_cleaved − E_uncleaved) / A_plane · 16.02176565

since area_a2 = 2·A_plane. The pre-computed DFT extra->>'W_sep_J_per_m2' is also multiplied by 2 on read (df["dft_w_sep"] = df["dft_w_sep"] * 2.0) to restore the same convention. Every published wsep_* metric is the doubled / corrected value. A representative row (GRACE-2L-OAM-L, Fe-host, S5-RA001-S210, n_pairs = 7410) shifted from wsep_rmse_jm2 = 2.411321 to 4.822641 and wsep_mae_jm2 = 0.509652 to 1.019304 (exactly 2× as expected); Spearman ρ is unchanged at 0.828861 (scale-invariant).

Pairing the cleaved and uncleaved sides

The cleaved↔uncleaved pairing is carried on the cleavage structure row's extra jsonb: extra->>'base_job_name' is the job_name of the uncleaved precursor (matched on job_name AND state != 'Cleavage'); the deterministic tie-break picks the lowest-id sibling when multiple variants (KP / KS / OMAT) share the same base_job_name. De-duplication on ingest guarantees those sibling rows share an atoms_hash, so any one resolves to the same MLIP energy.

Reference implementation: build_wsep_dfs.py (CLEAVAGE_SQL, the surrogate _W_sep column loop, and the EVA2_TO_JM2 constant).

Why no W_sep_corrected

Like E_seg, W_sep is a difference of total energies between two cells with the same composition. The per-(composition, ISPIN) offset corrections used on the ASSYST single-point track cancel by construction in the formula — there is nothing to correct. We deliberately do NOT emit a W_sep_corrected column.

BFGS-vs-FIRE fallback rule (best-available)

The cleavage corpus rides the same relaxation campaign as the segregation corpus (BFGS, fmax=0.01, max_steps=10000 first; FIRE, fmax=0.01, max_steps=250 for the errored subset). The MLIP relaxation is initialised from the unrelaxed (as-constructed / DFT-input) geometry, not the DFT-relaxed frame. For each (potential, structure_id) the headline metric uses the best-available result:

energy_used = energy_BFGS if status_BFGS == 'done'
              else energy_FIRE if status_FIRE == 'done'
              else NaN  (excluded)

Per-row provenance is preserved via algo_used, n_best_from_bfgs, n_best_from_fire.

A W_sep row is reported only when both the cleaved and uncleaved sides have a done energy under the best-available rule; otherwise that (potential, cleavage_row) is excluded from the rollup.

Aggregation

Per-(potential, host, GB, partition) RMSE/MAE/Spearman is computed as the count-weighted two-step aggregation matching the ASSYST headline pattern (see headline_rmse_provenance memory):

  1. Per (host, GB, partition) bucket: RMSE / MAE / Spearman ρ over (W_sep^MLIP - W_sep^DFT) for the cleavage rows where the MLIP has a best-available done result on both sides of the pair.
  2. Per potential, the top-line W_sep RMSE is the count-weighted mean of (1) across all buckets, weighted by the number of evaluated cleavage rows.

Both W_sep RMSE (J/m²) and W_sep MAE (J/m²) are emitted in the rollup and selectable as the leaderboard headline.

Partitions

partition corpus comment
gbseg-cleavage FeGB / NiGB cleavage pairs (cleaved + uncleaved precursor) the W_sep track

E_seg (the relaxed / unrelaxed sub/int partitions) lives on its own page — see GB segregation.

Snapshot date

Every per-potential summary CSV carries a snapshot_date column. The headline date on the leaderboard is the minimum across all rolled-up potentials — if any potential's rollup is stale, the headline flags it.

For deeper provenance (LSN, exporter git sha, build_wsep_dfs.py commit), see the deep cleavage page, the Provenance page, and the gbseg wiki hub.

Code

Work of separation from the cleaved and uncleaved GB slab energies (as in build_wsep_dfs.py). The MLIP evaluates both slabs; W_sep is the closed form:

EVA2_TO_JM2 = 16.02176565   # eV/Ų → J/m²
# E_cleaved, E_uncleaved: MLIP total energies (eV); area_A2: cleave-plane area (Ų)
W_sep = (E_cleaved - E_uncleaved) / area_A2 * EVA2_TO_JM2   # J/m²