Turing Patterns with Noise

Open in Morpheus

Persistent Identifier

Use this permanent link to cite or share this Morpheus model:


Pattern formation is robust to noise.

Introduction

Morpheus can also simulate ODE and PDE models with noise. One example (in the GUI menu ExamplesODELateralSignaling.xml) with coupled noisy ODE systems is explained in M0004. To illustrate pattern formation in a noisy PDE system, we here revisit the example M0014 (in the GUI menu ExamplesPDETuringPatterns.xml).

Model Description

We have extended the deterministic PDE model M0014 which was originally published in Miyazawa et al. by adding Gaussian white (in space and time) noise to both PDEs. The solver was switched to Euler-Maruyama as needed for stochastic ODE or PDE models. As in the original publication, the pattern’s dependency on parameter values is scanned in a single simulation run by $x$- and $y$-dependent parameter values $A(y)$ and $C(x)$ across the 2D lattice.

Results

Without noise

Setting the parameter noise $= 0$, the initial heterogeneities lead to some frustrated arrangements where a stripe extends into the domain of dot-patterns or dots are found in the central labyrinth domain.

Simulation result for field `u` at `time` $=100$ without noise, white denotes zero and black above 1.
Simulation result for field u at time $=100$ without noise, white denotes zero and black above 1.

These mixed stripe-dot arrangements are expected to resolve very slowly (beyond the runtime of this movie).

With noise

When adding little noise, then the above frustrated arrangements resolve faster (not shown).

With high noise level (noise $= 0.2$), we observe that the same patterns emerge robustly in the same domains as without noise.

Moreover, continuously perturbing the fluxes keeps the state away from the homogeneous solution also in outside the Turing instability domain (towards the homogeneous white and black corners). There, the state relaxes back to the homogeneous state and gets pushed away again in a manner that the slowest-decaying spatial models dominate and are visible as apparent continuation of the Turing patterns (hexagonal array of dots) beyond the Turing instability border. These are known as noise-induced patterns.

Simulation result for field `u` at `time` $= 100$ with `noise` $ = 0.2$, again white denotes zero and black above 1.
Simulation result for field u at time $= 100$ with noise $ = 0.2$, again white denotes zero and black above 1.

Reference

S. Miyazawa, M. Okamoto and S. Kondo: Blending of animal colour patterns by hybridization. Nature Communications 1: 66, 2010.

Model

Get this model via:

  • Morpheus-Link or
  •  Download: model.xml
  • XML Preview

    <MorpheusModel version="4">
        <Description>
            <Title>Example-TuringNoisy</Title>
            <Details>Extended model TuringPatterns (see https://morpheus.gitlab.io/model/m0014) by adding Gaussian noise to both PDEs. Solver was switched to Euler-Maruyama. We observe that the patterns emerge robustly under noisy conditions over the whole parameter plane (scanned by x- and y-dependent parameter values). 
    
    Also, continuously perturbed states outside the Turing instability domain try to relax back to the homogeneous state in a way that the slowest-decaying spatial models continue the Turing patterns (hexagonal array of dots) beyond the Turing instability border - known as noise-induced patterns.
    
    The original (deterministic) model was published in:
    Miyazawa, Okamoto and Kondo (2010). Blending of animal colour patterns by hybridization. Nature Communications 1, 66.
    https://doi.org/10.1038/ncomms1071
    </Details>
        </Description>
        <Global>
            <Field symbol="u" value="4.1+rand_uni(0,1)">
                <Diffusion rate="1"/>
            </Field>
            <Field symbol="v" value="4.84+rand_uni(0,1)">
                <Diffusion rate="20"/>
            </Field>
            <System time-step="0.25" name="Miyazawa" solver="Euler-Maruyama [stochastic, O(1)]">
                <Function symbol="A">
                    <Expression>0.07 + ((0.07 * l.y)/ s.y)</Expression>
                </Function>
                <Constant symbol="B" value="0.08"/>
                <Function symbol="C">
                    <Expression>-0.1 + ((0.5 * l.x)/ s.x)</Expression>
                </Function>
                <Constant symbol="D" value="0.03"/>
                <Constant symbol="E" value="0.10"/>
                <Constant symbol="F" value="0.12"/>
                <Constant symbol="G" value="0.06"/>
                <Constant symbol="R" value="20.0"/>
                <Constant symbol="synU_max" value="0.23"/>
                <Constant symbol="synV_max" value="0.50"/>
                <Function symbol="s_u">
                    <Expression>max( 0, min( synU_max, A()*u-B*v+C()))</Expression>
                </Function>
                <Function symbol="s_v">
                    <Expression>max( 0, min( synV_max, E*u - F))</Expression>
                </Function>
                <Constant symbol="noise" value="0.2"/>
                <DiffEqn symbol-ref="u">
                    <Expression>R*(s_u() - D*u + rand_norm(0.0,noise))</Expression>
                </DiffEqn>
                <DiffEqn symbol-ref="v">
                    <Expression>R*(s_v() - G*v + rand_norm(0.0,noise))</Expression>
                </DiffEqn>
            </System>
        </Global>
        <Space>
            <Lattice class="square">
                <Size symbol="s" value="512, 512, 0"/>
                <NodeLength value="1"/>
                <BoundaryConditions>
                    <Condition type="noflux" boundary="x"/>
                    <Condition type="noflux" boundary="y"/>
                </BoundaryConditions>
                <Neighborhood>
                    <Order>1</Order>
                </Neighborhood>
            </Lattice>
            <SpaceSymbol symbol="l"/>
        </Space>
        <Time>
            <StartTime value="0"/>
            <StopTime value="100"/>
            <RandomSeed value="0"/>
            <TimeSymbol symbol="time"/>
        </Time>
        <Analysis>
            <Gnuplotter time-step="2" decorate="false">
                <Terminal name="png" persist="true"/>
                <Plot>
                    <Field symbol-ref="u">
                        <ColorMap>
                            <Color color="black" value="1"/>
                            <Color color="white" value="0.0"/>
                        </ColorMap>
                    </Field>
                </Plot>
            </Gnuplotter>
            <Logger time-step="0.0">
                <Input>
                    <Symbol symbol-ref="u"/>
                </Input>
                <Output>
                    <TextOutput file-format="csv"/>
                </Output>
                <Restriction>
                    <Slice axis="x" value="s.x/2"/>
                </Restriction>
                <Plots>
                    <Plot title="slice at half of x extension" time-step="-1">
                        <Style style="lines" line-width="3.0"/>
                        <Terminal terminal="png"/>
                        <X-axis>
                            <Symbol symbol-ref="l.y"/>
                        </X-axis>
                        <Y-axis>
                            <Symbol symbol-ref="u"/>
                        </Y-axis>
                        <Color-bar>
                            <Symbol symbol-ref="v"/>
                        </Color-bar>
                    </Plot>
                </Plots>
            </Logger>
            <Logger time-step="2">
                <Input>
                    <Symbol symbol-ref="u"/>
                </Input>
                <Output>
                    <TextOutput file-format="csv"/>
                </Output>
                <Plots>
                    <SurfacePlot time-step="2">
                        <Color-bar minimum="0" maximum="9">
                            <Symbol symbol-ref="u"/>
                        </Color-bar>
                        <Terminal terminal="png"/>
                    </SurfacePlot>
                </Plots>
            </Logger>
            <ModelGraph include-tags="#untagged" format="svg" reduced="false"/>
        </Analysis>
    </MorpheusModel>
    
    

    Model Graph
    Model Graph

    Downloads

    Files associated with this model:

    Previous