Simulate pattern formation in 1D
Having now screened through parameter sets, we can now pick a single one and simulate the corresponding PDE. The simulation is performed on a 1D domain with reflective boundary conditions.
We first select the parameter values from turing_params
; here we choose the 1000th parameter set found.
param1 = get_params(model, turing_params[1000])
Optionally, we can manually change the parameters too:
param1.reaction["n1"] = 10
The size of the 1D domain over which the simulation is performed is chosen according to the turing_params.wavelength
value by default, although you can change this manually too:
param1.domain_size = 100
To simulate the script, you then simply run:
sol = simulate(model,param1)
Note: as with all Julia functions, there is a significant compilation time associated with the first time you run this function. This overhead time will not be present if you re-run the simulation e.g., for different parameters
The resulting PDE dynamics are represented by the solution object sol
from DifferentialEquations.jl. To visualize the results, you can use a variety of plotting packages (e.g., Makie.jl, Plots.jl). We provide simple helper functions for the Plots.jl package.
To visualize the final pattern (once steady state has been reached), use: endpoint()
using Plots
plot(endpoint(),model,sol)
To visualize intermediate timepoints (e.g., for making a movie of the dynamics), use timepoint()
, e.g.,:
@gif for t in 0.0:0.01:1
plot(timepoint(),model,sol,t)
end fps=20
Here, for example, plot(timepoint(),model,sol,0.1)
plots the solution at a time that is 10% through the simulation.