Official PyTorch implementation of MatRIS (Materials Representation and Interaction Simulation), a pretrained interatomic potential for materials simulation.
Oct 2026
- Optimized kernels and
torch.compilesupport (~5× faster inference). - TorchSim integration.
- New models: OMat24 and the MatPES PBE/r2SCAN family.
- Python ≥ 3.12, PyTorch ≥ 2.11
- NumPy, ASE, pymatgen, nvalchemi-toolkit-ops, Ninja
We offer seven pretrained models:
| Model key | Checkpoint | Dataset | Target |
|---|---|---|---|
matris_10m_omat |
Download | OMat24 | efs |
matris_10m_oam |
Download | OMat24 → sAlex + MPtrj | efsm |
matris_10m_mp |
Download | MPtrj | efsm |
matris_4m_matpes_pbev1 |
Download | MatPES-PBE (2025.1) | efs |
matris_4m_matpes_pbev2 |
Download | MatPES-PBE (2025.2) | efs |
matris_4m_matpes_r2scanv1 |
Download | MatPES-r2SCAN (2025.1) | efs |
matris_4m_matpes_r2scanv2 |
Download | MatPES-r2SCAN (2025.2) | efs |
If you need other models, feel free to contact me.
There are some examples how to use MatRIS, including calculator, geometry optimization, molecular dynamics and TorchSim.
from ase.build import bulk
import torch
from matris.applications.base import MatRISCalculator
device = "cuda" if torch.cuda.is_available() else "cpu"
calc = MatRISCalculator(
model="matris_10m_oam", # model name or checkpoint path
task="efsm",
device=device,
mode="fast", # optimized kernel + compile; "torch" for eager mode
activation_checkpoint=True, # set True for adaptive memory-saving recomputation
tf32=False, # set True to allow TF32 in interaction blocks (~1.5x faster)
)
atoms = bulk("Cu", cubic=True)
atoms.calc = calc
energy = atoms.get_potential_energy() # total energy, eV
forces = atoms.get_forces() # eV/A
stress = atoms.get_stress() # eV/A^3, ASE convention
magmoms = atoms.get_magnetic_moments() # muBfrom ase.build import bulk
import torch
from matris.applications.relax import StructOptimizer
device = "cuda" if torch.cuda.is_available() else "cpu"
optimizer = StructOptimizer(
model="matris_10m_oam",
task="efsm",
optimizer="FIRE",
device=device,
mode="fast",
activation_checkpoint=False,
tf32=False,
)
atoms = bulk("Cu", cubic=True)
result = optimizer.relax(
atoms=atoms,
verbose=True,
steps=500,
fmax=0.05,
relax_cell=True,
ase_filter="FrechetCellFilter",
)
final_structure = result["final_structure"]
trajectory = result["trajectory"]from ase.build import bulk
from matris.applications import MolecularDynamics
atoms = bulk("Cu", cubic=True)
md = MolecularDynamics(
atoms=atoms,
model="matris_10m_oam",
ensemble="nvt",
temperature=300,
starting_temperature=300,
timestep=1,
trajectory="md_out.traj",
logfile="md_out.log",
loginterval=100,
task="efsm",
device="cuda",
mode="fast",
activation_checkpoint=False,
tf32=True,
)
md.run(1000)md.set_atoms(new_atoms) restarts the integrator and step count for a new system,
retains the calculator, and appends trajectory output. Reattach custom ASE
observers to md.dyn after replacing atoms.
Install torch-sim-atomistic, then use pretrained names or local weights:
import torch
import torch_sim as ts
from ase.build import bulk
from matris.applications.torchsim import MatRISTorchSimModel
model = MatRISTorchSimModel(
model="matris_10m_oam",
target="efsm", # OAM/MP: efsm; OMat/MatPES: efs
device="cuda",
mode="fast",
activation_checkpoint=True,
tf32=False,
)
state = ts.io.atoms_to_state(
[bulk("Si", "diamond", a=5.43)], device=model.device, dtype=torch.float32,
)
results = model(state) # energy (eV), forces (eV/Å), stress (eV/ų), magmoms (μB)
state = ts.integrate(
state, model, integrator=ts.Integrator.nvt_langevin,
n_steps=100, temperature=300, timestep=0.001, # ps
)If you use MatRIS in your work, please cite:
@inproceedings{
zhou2026matris,
title={Mat{RIS}: Toward Reliable and Efficient Pretrained Machine Learning Interatomic Potentials},
author={Yuanchang Zhou and Siyu Hu and Xiangyu Zhang and Hongyu Wang and Guangming Tan and Weile Jia},
booktitle={The Fourteenth International Conference on Learning Representations},
year={2026},
url={https://openreview.net/forum?id=5xBT5Ziute}
}MatRIS is licensed under the BSD-3-Clause License. See LICENSE for details.