File size: 9,511 Bytes
87ba944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ee9206
87ba944
 
 
0ee9206
 
87ba944
 
 
 
 
 
0ee9206
 
 
 
 
 
 
 
 
87ba944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ee9206
87ba944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ee9206
 
 
 
 
 
 
 
 
 
87ba944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ee9206
 
 
 
87ba944
 
 
 
0ee9206
87ba944
13e9de2
 
 
 
 
 
 
 
 
 
 
 
87ba944
 
37966b4
aabbb4a
0ee9206
87ba944
0ee9206
 
87ba944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
---
library_name: aimnet
license: mit
tags:
  - chemistry
  - computational-chemistry
  - reactions
  - transition-states
  - reaction-pathways
  - neb
  - interatomic-potential
  - neural-network-potential
  - pytorch
  - aimnet2
pipeline_tag: other
---

# AIMNet2-rxn

AIMNet2-rxn is a neural network interatomic potential specialized for **generalized organic reaction modeling** — energies, forces, charges, and electrostatic moments along reaction coordinates at near-ωB97M-V/def2-TZVPP accuracy. Trained on ~4.7M reaction-relevant geometries to handle bond breaking/forming, transition states, and minimum-energy pathways out of the box, without system-specific fine-tuning.

## Highlights

- **Reaction-aware:** ~1 kcal mol⁻¹ across IRC profiles, ~1.6 kcal mol⁻¹ RMSD on reaction energies, ~2 kcal mol⁻¹ RMSD on diverse-reaction barrier heights, ~3 kcal mol⁻¹ RMSD on the Grambow benchmark — all without retraining or fine-tuning. (Numbers from the paper; see below.)
- **High-throughput pathway search:** Enables minimum-energy-pathway searches at ~10⁶ reactions/day via batched NEB on a single GPU — roughly 10⁶× the throughput of serial NEB-DFT at the reference level. Per-call speedup is closer to 10³–10⁴×; the 10⁶× figure is end-to-end batched NEB throughput, not per-energy-evaluation.
- **TS- and NEB-ready:** Designed for transition-state optimization and (batched) nudged-elastic-band minimum-energy-pathway searches.
- **Ensemble:** 4 ensemble members for uncertainty estimation.
- **Outputs:** energy, forces (autograd), atomic charges, molecular dipole, molecular quadrupole.

## Element coverage

**H, C, N, O only.** The model was trained on closed-shell organics. Unsupported elements (F, P, S, …) are not validated by the calculator and will silently produce undefined predictions — read `implemented_species` from this repo's `config.json` (`[1, 6, 7, 8]`) and check input atomic numbers yourself before running on novel systems. For broader element coverage on equilibrium structures, use [`isayevlab/aimnet2-wb97m-d3`](https://huggingface.co/isayevlab/aimnet2-wb97m-d3) or related families.

## Energy convention

AIMNet2-rxn outputs are on a **learned per-element shifted electronic-energy scale** (eV). They are designed to be accurate for energy *differences* between geometries that share atomic composition — barrier heights, reaction energies, IRC profiles, conformer energies. They are **not** absolute ωB97M-V/def2-TZVPP electronic energies and **not** formal atomization energies.

Practical implications:
- Methane sits near a few eV on this scale, **not** the −1100 eV scale used by `aimnet2-wb97m-d3` and the other AIMNet2 families. Do **not** mix or compare energies across families.
- Single-point energies in isolation are not physically meaningful. Always interpret as a difference vs. another geometry from this same model.

## Installation

```bash
pip install "aimnet[hf]"
```

## Quick Start

```python
from aimnet.calculators import AIMNet2Calculator

# Load from Hugging Face (downloads and caches automatically)
calc = AIMNet2Calculator("isayevlab/aimnet2-rxn")

# Single-point calculation
results = calc(
    {"coord": coords, "numbers": atomic_numbers, "charge": 0.0},
    forces=True,
)
print(results["energy"])      # Energy in eV (atomization-style scale, see "Energy convention")
print(results["forces"])      # Forces in eV/A
print(results["charges"])     # Partial charges in e
```

### With ASE — minimum energy path via NEB

```python
from aimnet.calculators.aimnet2ase import AIMNet2ASE
from ase.mep import NEB
from ase.optimize import LBFGS

# images: list[ase.Atoms] interpolated between reactant and product
calc_factory = lambda: AIMNet2ASE("isayevlab/aimnet2-rxn")
for img in images:
    img.calc = calc_factory()

neb = NEB(images, climb=True)
LBFGS(neb).run(fmax=0.05)
```

For batched-NEB (BNEB) on millions of pathways, see the AIMNet2-rxn paper for the recommended workflow with `pysisyphus`.

### Transition-state and Hessian workflows

For TS optimization or any workflow that requires a Hessian (e.g. P-RFO, dimer, IRC, vibrational analysis), **set `compile_model=False`** when constructing the calculator:

```python
calc = AIMNet2Calculator("isayevlab/aimnet2-rxn", compile_model=False)
```

`torch.compile` (Dynamo) is known to hang on the double-backward path through GELU activations that Hessian autograd requires. The default avoids the issue, but explicit `compile_model=True` for speed should be reserved for pure energy/force evaluations.

## Ensemble Members

This repo contains 4 ensemble members (`ensemble_0.safetensors` through `ensemble_3.safetensors`). The default loads member 0. For uncertainty estimation, load all 4 and average predictions.

| File | Description |
|------|-------------|
| `ensemble_0.safetensors` | Ensemble member 0 (default) |
| `ensemble_1.safetensors` | Ensemble member 1 |
| `ensemble_2.safetensors` | Ensemble member 2 |
| `ensemble_3.safetensors` | Ensemble member 3 |
| `config.json` | Shared model configuration and metadata |

## Model Details

- **Architecture:** AIMNet2 (Atomic Environment Vectors + message-passing MLPs) with `dipole` and `quadrupole` heads
- **Cutoff radius:** 5.0 Å
- **DFT reference:** **ωB97M-V / def2-TZVPP** (range-separated hybrid meta-GGA with VV10 nonlocal correlation; Mardirossian & Head-Gordon, *J. Chem. Phys.* 144, 214110, 2016)
- **Dispersion:** Supplied by ωB97M-V's VV10 nonlocal correlation kernel, included in every training-set energy and force. No separate D3/D4 correction is added at inference (`needs_dispersion: false` in `config.json`); doing so would double-count the dispersion already baked into the reference data. AIMNet2's external D3 path remains available for other family members whose reference functional does not carry its own dispersion (e.g. `aimnet2-wb97m-d3`).
- **Coulomb:** Short-range embedded (≤4.6 Å) + external long-range (≥4.6 Å, applied by the calculator via `LRCoulomb`). The 4.6 Å crossover is **physically frozen** — it is the SR/LR cancellation point used during training. Do not alter `coulomb_sr_rc` at inference.
- **Training set:** 4,685,165 geometries combining the AIMNet2 base set with the RGD-1 reaction database, all recomputed at ωB97M-V/def2-TZVPP
- **Format:** safetensors (converted from JIT TorchScript via reconstructed YAML)

## Intended use

Mechanism enumeration, transition-state searches, NEB / BNEB, reaction-coordinate energy profiles, high-throughput reactivity screening on closed-shell organic systems.

## Calculator-enforced safeguards (with `aimnet>=NEXT_VERSION`)

The calculator validates inputs and refuses to silently produce undefined output:

- **Element scope** — passing atomic numbers outside `[1, 6, 7, 8]` raises `ValueError` (bypass with `validate_species=False`).
- **Net charge**`charge != 0` raises `ValueError` (zwitterions are OK as long as the net charge is zero; for net-charged species use [`isayevlab/aimnet2-wb97m-d3`](https://huggingface.co/isayevlab/aimnet2-wb97m-d3)).
- **Hessian + `torch.compile`** — combining both raises `RuntimeError` (Dynamo and GELU double-backward hang); reconstruct the calculator with `compile_model=False` for TS / IRC / vibrational analysis.
- **Coulomb cutoff**`set_lrcoulomb_method(...)` warns if you change the SR/LR crossover from 4.6 Å (physically frozen during training).
- **Cross-family mixing** — constructing calculators from two AIMNet2 families in one process emits a one-time `UserWarning` about energy-scale incompatibility.

`afv.weight` rows for elements outside `[1, 6, 7, 8]` are NaN-padded at the safetensors level, so even with `validate_species=False` the model produces NaN (not plausible-looking nonsense) for unsupported elements. Two layers of defense.

## Limitations

- **Element scope:** H, C, N, O only — passing other elements is not validated by the calculator and yields undefined output.
- **Closed-shell only:** Open-shell species (radicals, doublets) are not handled by AIMNet2-rxn. For open-shell reactions and radical chemistry, use [`isayevlab/aimnet2-nse`](https://huggingface.co/isayevlab/aimnet2-nse) — a fully reactive model with parametrization focused on open-shell systems and radicals.
- **Net-charged species (anions, cations):** Out of scope for this release; future work per the paper. **Net-neutral zwitterions are within the training distribution and supported** — local charge separation in a globally neutral molecule (e.g. amino acid neutral forms, proton-transfer intermediates) is a deliberate part of training.
- **Transition metals & heteroatoms beyond H/C/N/O:** Not supported.
- **Equilibrium MD on large organics:** While accurate near equilibrium, the wb97m-d3 family is generally preferred when reaction information is not needed.
- **Hessian/TS workflows under `torch.compile`:** Set `compile_model=False` (see Quick Start). `torch.compile` and Hessian autograd through GELU activations are known to interact poorly.

## Citation

```bibtex
@misc{anstine2025aimnet2rxn,
  title  = {AIMNet2-rxn: A Machine Learned Potential for Generalized Reaction Modeling on a Millions-of-Pathways Scale},
  author = {Anstine, Dylan M. and Zhao, Qiyuan and Zubatiuk, Roman and Zhang, Shuhao and Singla, Veerupaksh and Nikitin, Filipp and Savoie, Brett M. and Isayev, Olexandr},
  year   = {2025},
  doi    = {10.26434/chemrxiv-2025-hpdmg},
  note   = {ChemRxiv preprint}
}
```

## License

MIT License