chemart / brusselator

View on GitHub

Brusselator — The minimal oscillator, and the standard first test for anything that handles reaction networks. Two species are held constant as reservoirs, two are dynamic, and the autocatalytic step 2X + Y -> 3X provides the feedback…

chemistry official · built in application fidelity: book #banzhaf-yamamoto

How it works

The minimal oscillator, and the standard first test for anything that handles reaction networks. Two species are held constant as reservoirs, two are dynamic, and the autocatalytic step 2X + Y -> 3X provides the feedback. Push the parameter b past 1 + a^2 and the steady state loses stability: concentrations stop settling and run around a limit cycle instead. The trimolecular step is chemically unrealistic and deliberately so - it buys analytic tractability.

S
A, B (buffered), X, Y (dynamic), D, E (waste) · explicit
R
A --k1--> X ; B + X --k2--> Y + D ; 2X + Y --k3--> 3X ; X --k4--> E · arity 1, 2, 3
A
ode, ssa · A and B held constant by buffering

Parameters

namedefaultmeaning
a
float · population
1.0 [A], held constant
[0, ∞]
b
float · population
3.0 [B], held constant; sustained oscillations require b > 1 + a^2 when all k_i = 1
[0, ∞]
k1
float · kinetic
1.0 A -> X
[0, ∞]
k2
float · kinetic
1.0 B + X -> Y + D
[0, ∞]
k3
float · kinetic
1.0 2X + Y -> 3X
[0, ∞]
k4
float · kinetic
1.0 X -> E
[0, ∞]

Brusselator

One of the artificial chemistries of Banzhaf & Yamamoto, Artificial Chemistries (MIT Press, 2015), §17.4.2, 19.3; ARMS 9.4; first proposed by Prigogine & Lefever, 1968.

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/brusselator", seed=0)   # same as "brusselator"
print(net.summary())

What to look for

  • limit-cycle oscillations for b > 1 + a^2 (all k_i = 1); damped oscillations to (X, Y) = (a, b/a) below

Implementation decisions

  • Buffered species A and B are listed in extras.buffered: their concentrations stay at a and b although the reactions consume them. Initial X, Y, D, E are 0, as in figure 17.6.

Banzhaf & Yamamoto, Artificial Chemistries (2015), §17.4.2, 19.3; ARMS 9.4

Preview at default parameters

6 species · 4 reactions · status complete · seed 1

A -> X  [mass-action k=1.0]
B + X -> Y + D  [mass-action k=1.0]
2 X + Y -> 3 X  [mass-action k=1.0]
X -> E  [mass-action k=1.0]

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