chemart / oregonator

View on GitHub

Oregonator (Belousov-Zhabotinsky) — The reduced model of the Belousov-Zhabotinsky reaction - a real chemical oscillator, not an invented one. Five reactions couple an autocatalytic species, an inhibitor and an oxidised metal ion, with two reactants buffere…

chemistry official · built in wet fidelity: book+decisions #banzhaf-yamamoto

How it works

The reduced model of the Belousov-Zhabotinsky reaction - a real chemical oscillator, not an invented one. Five reactions couple an autocatalytic species, an inhibitor and an oxidised metal ion, with two reactants buffered; the autocatalysis fires, exhausts itself, regenerates the inhibitor and waits. Add diffusion and it becomes an excitable medium supporting target patterns and spiral waves, which is the basis of reaction-diffusion computing.

S
A, B (buffered reactants), X (autocatalyst, HBrO2), Y (inhibitor, Br-), Z (oxidised metal ion, e.g. Ce(IV)), P, Q (products) · explicit
R
A + Y --k1--> X ; X + Y --k2--> P ; B + X --k3--> 2X + Z ; 2X --k4--> Q ; Z --k5--> f Y · arity 1, 2
A
ode, lattice-2d · A and B buffered; reaction-diffusion on a grid for spatial patterns

Parameters

namedefaultmeaning
k1
float · kinetic
1.0 A + Y -> X
[0, ∞]
k2
float · kinetic
10.0 X + Y -> P
[0, ∞]
k3
float · kinetic
10.0 B + X -> 2X + Z
[0, ∞]
k4
float · kinetic
2.5 2X -> Q
[0, ∞]
k5
float · kinetic
1.0 Z -> f Y
[0, ∞]
f
float · kinetic
1.0 stoichiometric factor of inhibitor regeneration; the key bifurcation parameter
[0, ∞]
A
float · population
1.0 buffered concentration of A
[0, ∞]
B
float · population
1.0 buffered concentration of B
[0, ∞]
D
dict · spatial
{"X": 1.0, "Y": 1.0, "Z": 1.0} diffusion coefficient per species for the reaction-diffusion setting
lattice
enum · spatial
"hexagonal" grid used for reaction-diffusion (the book's patterns use a hexagonal grid)
square | hexagonal

Oregonator (Belousov-Zhabotinsky)

One of the artificial chemistries of Banzhaf & Yamamoto, Artificial Chemistries (MIT Press, 2015), §19.3.3; first proposed by Field & Noyes, 1974.

Its generator ships with the chemart library, so loading it runs no code from the hub and needs no trust_remote_code.

import chemart

net = chemart.generate_network("chemart/oregonator", seed=0)   # same as "oregonator"
print(net.summary())

What to look for

  • target patterns and spiral waves
  • excitable medium supporting reaction-diffusion computing (logic gates, image processing, maze solving)

Implementation decisions

  • Rate constants are the book's (figure 19.20). f, the buffered concentrations A and B, and the diffusion coefficients are not given; defaults are f = 1, A = B = 1, D = 1.
  • A real f cannot be an integer stoichiometric coefficient. Z -> f Y is emitted as Z -> floor(f) Y at rate k5 (1 - frac(f)) plus Z -> (floor(f)+1) Y at rate k5 frac(f), which gives exactly the same rate equations.
  • Space is recorded in extras.space (lattice, diffusion); A and B are listed in extras.buffered.

Banzhaf & Yamamoto, Artificial Chemistries (2015), §19.3.3

Preview at default parameters

7 species · 5 reactions · status complete · seed 1

A + Y -> X  [mass-action k=1.0]
X + Y -> P  [mass-action k=10.0]
B + X -> 2 X + Z  [mass-action k=10.0]
2 X -> Q  [mass-action k=2.5]
Z -> Y  [mass-action k=1.0]

Generated by the uploader with chemart push; the hub never runs uploaded code.