[ANN] ReactionDiffusion.jl v1.0.0 - Simulation and visualization for 1D reaction-diffusion systems

image
I’d like to announce a brand new version of ReactionDiffusion.jl, a general purpose toolkit for anyone interested in modelling reaction-diffusion systems on a 1D domain. This release builds on the design of its predecessor but has been rewritten to make use of high-performance solvers and interactive plotting tools.

Typical usage

  1. Define a reaction network using the friendly DSL provided by Catalyst.jl:
reaction = @reaction_network begin
    γ*a + γ*U^2*V,  ∅ --> U
    γ,              U --> ∅
    γ*b,            ∅ --> V
    γ*U^2,          V --> ∅
end
  1. Add some diffusion coefficients:
diffusion = @diffusion_system L begin
    Dᵤ, U
    Dᵥ, V
end

model = Model(reaction,diffusion)
  1. Explore the parameter space using the interactive visualisation tool. Slide parameters around and watch the patterns change in real-time.
params = dict(a = 0.2, b = 2.0, γ = 1.0, Dᵤ = 1.0, Dᵥ = 50.0, L=100.0)
num_verts=64 # Balance performance against your tolerance for ugly jagged plots.
dt=0.04 # The GUI currently struggles if dt isn't small enough to avoid any instabilities.
interactive_plot(model, params; normalise=true, num_verts, dt)

20260825-1811-42.2419634

  1. Run a parallelised ensemble simulation over an interesting subset of parameter space:
params = product(a = range(0.0,1.0,20), b = range(0.0,5.0,20), γ = [1.0], Dᵤ = [1.0], Dᵥ = [50.0], L=[50.0])
turing_params=filter_turing(model,params) # Select only parameter sets which give rise to Turing instabilities.
sol = simulate(model, turing_params)

Features

  • Intuitive model specification thanks to the Catalyst.jl chemical modelling language.
  • High-performance solver design based on pseudo-spectral discretisation and exponential-time differencing methods provided by OrdinaryDiffEqExponentialRK.jl.
  • Interactive animated plotting interface show how the system responds to changes to parameter values in real time.
  • Automatically identify Turing instabilities.
  • Convenient wrapper for running simulations, both individually and in ensemble via SciML’s EnsembleProblem.

Coming soon

  • Black box parameter optimisation.
  • Benchmark tools
  • Make it go even faster!

Enjoy making Turing patterns!
Bug reports are very welcome.

2 Likes