rate-foundry

KMC integration

The catalog is KMC-agnostic. A rate is a process name, a barrier, an attempt frequency, and provenance. Any KMC code maps those onto its own input.

Generic mapping

import ratefoundry as rf

rate = rf.lookup("Cu/Cu(100)", "chgnet", "adatom_hop")
fields = rate.to_dict()
print(fields)
k = rate.at(300.0)
# Hand either (barrier_eV, attempt_frequency_Hz) or k to your code:
#   - codes with Arrhenius inputs take barrier_eV and attempt_frequency_Hz
#   - codes with fixed rates take k = rate.at(T)
assert k > 0

A complete plain-Python residence-time example is in the repository: examples/generic_kmc.py.

kmos binding

For kmos, the client emits project source with named parameters (one barrier and one attempt frequency per record) and one process per hop direction, so you edit physics in one place:

import ratefoundry as rf

recs = rf.rates("Cu/Cu(100)", process="adatom_hop", model="chgnet")
print(recs.to_kmos())
assert "add_process" in recs.to_kmos()

Adjust the site, layer and species names to your kmos project (to_kmos(site=..., layer=..., moving_species=..., empty_species=...)). An end-to-end proof (proofs/kmos_cu100.py) drives a real kmos lattice with catalog rates and matches the reference island-density curves.

Other codes

Other KMC codes (SPPARKS, Zacros, kMCpy) use the generic mapping directly. Dedicated bindings are added per code family when requested.