Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

FIRE vs MACE-MP0

The FIRE relaxation and the MACE-MP0 potential are the two relaxers used in the example galleries. They sit at opposite ends of a cost–accuracy trade-off, and the goal of the ongoing calibration work is to make FIRE’s spring weights — derived from a single reference .cif — reproduce MACE-relaxed structures as closely as the harmonic form allows.

The two energy models

FIRE spring networkMACE-MP0
functional formharmonic bond + angle springs, analytic repulsion wallslearned equivariant message-passing network
body order2-body (bonds, repulsion) + 3-body (angles), fixed4-body messages per layer × 2 layers; effectively many-body
interaction rangefirst shell (bonds/angles), 1.5r1.5\,r^\star (push)6 Å per layer, 12 Å receptive field
parameters fromone reference crystal (.cif) + 3 user weights~1.5 M DFT configurations (MPtrj + Alexandria)
bond topologyexplicit K-nearest graph, rebuilt every 10 stepsnone — smooth cutoff functions
energy scalearbitrary (spring units); only ratios mattereV, transferable across materials
forcesanalytic per termautograd of the network
updatesimplified FIRE integratorLBFGS (or Langevin MD for liquid)
cost / step at 40³ Å~0.05–0.1 s~4–13 s (8-thread CPU)
practical size limit200³ Å+~40³ Å on CPU

What the spring network can and cannot match

Because every FIRE term is harmonic about a single target, the model can in principle reproduce:

It cannot match:

Calibrating FIRE weights from a single .cif against MACE

The spring targets (rr^\star, ϕ\phi^\star, hard-core radii) already come from the reference crystal. CoordinationShellTarget.calibrate_to_mace measures the stiffnesses from MACE’s curvature around that same crystal, so both models share one input file:

shell = am.CoordinationShellTarget.from_atoms(ref_atoms, phi_num_bins=90)
shell = shell.calibrate_to_mace()        # optional; needs mace-torch

The calibration runs in seconds per material (the reference cell is tiny) and fills in:

Because atomode’s force definitions make bond_weightkbondk_\text{bond} (energy/Ų) and angle_weightkanglek_\text{angle} (energy/rad²), the calibrated ratio plugs in directly. Measured with medium-mpa-0:

materialk_bond (eV/Ų)k_angle (eV/rad²)angle/bondpreset ratio
Si5.820.33.5~0.45
SiO₂ (Si–O)26.314.2 / 34.00.92~0.8
Cu1.80.60.340
SrTiO₃ (Ti–O)1.720.9 / 70.3~0.7

The Si row is the headline: MACE says silicon’s angle springs are ~7× stiffer relative to its bond springs than the hand-tuned presets use. Validation protocol: relax identical Voronoi starts with calibrated FIRE and with MACE; compare bond/angle distribution widths and g₂/g₃, and score the FIRE-relaxed structure with a MACE single point. The per-atom energy gap to the MACE-relaxed structure is the figure of merit.

Validated outcome (Si nanocrystalline, 40³ Å). Transplanting the literal stiffness ratio into the quench over-constrains angles (angle σ collapses to 12.9° vs MACE’s 16.2°) and widens the energy gap; a thermal distribution’s width is not set by curvature alone, and the fixed-step integrator under-resolves the stiffened modes. What does transfer:

FIRE configurationgap to MACE-relaxed (eV/atom)
hand-tuned weights+0.105
+ literal MACE stiffness ratio+0.179
+ Morse anharmonicity, MACE wall, per-pair k at the hand-tuned effective scale+0.081

The winning configuration — used by the Fast FIRE Refinement examples — keeps the proven effective force scale and takes the calibration’s Morse anharmonicity, per-pair stiffness ratios between different species pairs, and hard-core wall.

Composite targets (sp²/sp³ carbon) are calibrated per sub-target before from_targets composes them. Consuming the per-pair stiffnesses and Morse parameters inside shell_relax is the next implementation step.

See also