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.