Patterned Tissue Growth Regulation along Turing Patterns from Gierer-Meinhardt Model
Persistent Identifier
Use this permanent link to cite or share this Morpheus model:
Can morphodynamic feedback generate complex body shapes like that of a long and thin flatworm?
Introduction
During flatworm development and regeneration, morphogens like diffusible Wnt ligands self-organize concentration gradients that contribute to tissue morphogenesis, differentiation and the establishment of the body axes. Kaity et al. have considered planarian regeneration and studied a center-based model coupled to Turing patterns to explore tissue morphogenesis through patterned cell proliferation and cell death with morphodynamic feedback onto the Turing pattern from a Gierer-Meinhardt model. The two CPM-based models here extend spherical tissue models and qualitatively reproduce the published results.
Description
The spatial domain is a 2D square lattice and the initial condition are just two cells.
Here, cells are represented with individual shape (occupying between A00/2 $=20$ and A00*2 $=80$ lattice nodes per cell) and follow CPM dynamics (weak cell-cell adhesion) as opposed to spherical cells with dynamic radii in the reference paper.
The radius growth kinetics of the CPM model has been calibrated to that of the center-based model of the reference paper.
The Gierer-Meinhardt pattern formation model, in the reference paper and the models here, is not the classical coupled PDE system but a cell-cell interaction version of it.
Cells here exchange morphogens m1 and m2 with their neighbors through fluxes proportional to the concentration difference that is measured by the model’s NeighborhoodReporters.
Radius growth (or shrinkage) of each cell depends on neighbor packing and this may differ between the circular cells in the reference paper and the more flexible cells here.
We have therefore inserted a global correction factor to the neighbor count that is varied between 1.2 and 1.5 in the simulations below.
All other parameter values are taken as published.
Results
The reference paper in its Fig. 12 A,B compares tissue morphogenesis for different parameter values $\lambda$, which affects the wavelength of activator stripes in the Turing pattern.
We correspondingly studied two closely related models (see the second XML file patterned_growth_labyrinth.xml in the list of files at the bottom of the page).
We first set $\lambda=0.075$ as in Fig. 12B and the neighborhood correction factor to 1.5 and observed the emergence of filamentous tissue shapes, see Fig. 1 and Movie 1 below.
: [**Kaity *et al.***](#reference), [Fig. 12B](https://www.sciencedirect.com/science/article/pii/S0022519325003388?via%3Dihub#f0060))](/media/model/m5933/patterned_growth_filament_huee582773f042b7219d817b6efd887f0d_900512_310ada5dae49734d0ddf71402e816c9c.png)
m2) with values spanning cyan for m2 $=1$ to dark-blue for m2 $=0$. (CC BY-NC 4.0: Kaity et al., Fig. 12B)
patterned_growth_filament_main.xml
We then reduce $\lambda=0.05$ as in Fig. 12A and the neighborhood correction factor to 1.2 and observe the emergence of compact tissue shapes with labyrinth patterns, see Fig. 2 and Movie 2 below.
: [**Kaity *et al.***](#reference), [Fig. 12A](https://www.sciencedirect.com/science/article/pii/S0022519325003388?via%3Dihub#f0060))](/media/model/m5933/patterned_growth_labyrinth_hu5b227b2f8c808f9a092bcc93d2e63ac1_2180075_34b1cf52ee5cb1a25cc06c0fe3607f81.png)
m2) with values spanning cyan for m2 $=1$ to dark blue for m2 $=0$. (CC BY-NC 4.0: Kaity et al., Fig. 12A)
patterned_growth_labyrinth.xml
Reference
This model reproduces a published result, originally obtained with a different simulator:
B. Kaity, D. Lobo: Emergent stable tissue shapes from the regulatory feedback between morphogens and cell growth. J. Theor. Biol. 620: 112354, 2026.
Model
patterned_growth_filament_main.xml
XML Preview
<?xml version='1.0' encoding='UTF-8'?>
<MorpheusModel version="4">
<Description>
<Details>Model ID: https://identifiers.org/morpheus/M5933
File type: Main model
Software: Morpheus (open source). Download from: https://morpheus.gitlab.io
Full title: Patterned Tissue Growth Regulation along Turing Patterns from Gierer-Meinhardt Model
Authors: B. Kaity, D. Lobo
Submitter: Y. Korotkyi, G. Börner
Curator: J. Bürger Michaelis
Date: 07.05.2026
Reference: This model reproduces a published result, originally obtained with a different simulator:
B. Kaity, D. Lobo: Emergent stable tissue shapes from the regulatory feedback between morphogens and cell growth. J. Theor. Biol. 620: 112354, 2026.
https://doi.org/10.1016/j.jtbi.2025.112354</Details>
<Title>M5933 Patterned Growth Regulation (Filament Shape)</Title>
</Description>
<Space>
<Lattice class="square">
<Neighborhood>
<Order>2</Order>
</Neighborhood>
<Size symbol="size" value="600, 600, 0"/>
<BoundaryConditions>
<Condition type="constant" boundary="x"/>
<Condition type="constant" boundary="-x"/>
<Condition type="constant" boundary="y"/>
<Condition type="constant" boundary="-y"/>
</BoundaryConditions>
</Lattice>
<SpaceSymbol symbol="space"/>
</Space>
<Time>
<StartTime value="0"/>
<StopTime value="10000"/>
<TimeSymbol symbol="time"/>
</Time>
<Analysis>
<ModelGraph include-tags="#untagged" format="dot" reduced="false"/>
<Gnuplotter time-step="20">
<Terminal name="png" size="1600, 1600, 0"/>
<Plot title="Tissue (radius)">
<Cells value="r"/>
</Plot>
<Plot title="Morphogen m1">
<Cells per-frame-range="true" value="m2">
<ColorMap adaptive-range="true">
<Color color="blue" value="0"/>
<Color color="cyan" value="0.1"/>
</ColorMap>
</Cells>
</Plot>
<!-- <Disabled>
<Plot title="Activator m2">
<Cells value="m2"/>
</Plot>
</Disabled>
-->
<Plot title="Inhibitor m3">
<Cells value="m3"/>
</Plot>
<Plot title="Growth rate g">
<Cells value="g"/>
</Plot>
</Gnuplotter>
<Gnuplotter time-step="10">
<Terminal name="png" size="1600, 1600, 0"/>
<!-- <Disabled>
<Plot title="Neighbor count">
<Cells min="0" value="neighbor_count"/>
</Plot>
</Disabled>
-->
<Plot title="Activator m2">
<Cells max="1" min="0" value="m2">
<ColorMap adaptive-range="false">
<Color color="dark-blue" value="0"/>
<Color color="cyan" value="1"/>
</ColorMap>
</Cells>
</Plot>
<!-- <Disabled>
<Plot title="Inhibitor m3">
<Cells value="m3"/>
</Plot>
</Disabled>
-->
<!-- <Disabled>
<Plot title="Growth rate g">
<Cells value="g"/>
</Plot>
</Disabled>
-->
</Gnuplotter>
<Logger time-step="10">
<Input/>
<Output>
<TextOutput file-format="csv"/>
</Output>
<Plots>
<Plot time-step="1000">
<Style style="points"/>
<Terminal terminal="png"/>
<X-axis>
<Symbol symbol-ref="time"/>
</X-axis>
<Y-axis>
<Symbol symbol-ref="celltype.cell.size"/>
</Y-axis>
</Plot>
</Plots>
</Logger>
</Analysis>
<CellTypes>
<CellType name="cell" class="biological">
<VolumeConstraint target="A0" strength="Lam_V"/>
<SurfaceConstraint target="1" strength="Lam_S" mode="aspherity"/>
<!-- Cell radius (state variable, integrated by ODE) -->
<Property symbol="r" name="Cell radius" value="sqrt(A00/pi)"/>
<Function symbol="A0" name="Target area">
<Expression>pi*r^2</Expression>
</Function>
<!-- Morphogen concentrations (one scalar per cell, like the paper) -->
<Property symbol="m2" name="Activator" value="0.5"/>
<Property symbol="m3" name="Inhibitor" value="0.5"/>
<!-- Reaction terms (Eq. 16, Gierer-Meinhardt) -->
<Property symbol="reaction_m2" value="0.0"/>
<Property symbol="reaction_m3" value="0.0"/>
<Equation symbol-ref="reaction_m2">
<Expression>Lambda*(q2 + gamma*m2^2/((m3+epsilon)*(1 + delta*m2^2)) - lambda2*m2 - g*m2)</Expression>
</Equation>
<Equation symbol-ref="reaction_m3">
<Expression>Lambda*(q3 + gamma*m2^2 - lambda3*m3 - g*m3)</Expression>
</Equation>
<!-- Cell-to-cell diffusion (Eq. 9, paper-faithful)
alpha_eff = alpha_paper * (A00/pi) is the unit-converted diffusion constant.
All distances are in pixels; d_eq and d_max are also in pixels. -->
<Property symbol="D_m2" value="0.0"/>
<NeighborhoodReporter time-step="0.1">
<Input scaling="cell" value="if(cell.type == celltype.cell.id
 and sqrt((cell.center.x-local.cell.center.x)^2 + (cell.center.y-local.cell.center.y)^2) < d_max,
 (alpha2_eff/(pi*local.r^2))
 * (d_max - sqrt((cell.center.x-local.cell.center.x)^2 + (cell.center.y-local.cell.center.y)^2)) / (d_max - d_eq)
 * (m2 - local.m2),
 0)"/>
<Output symbol-ref="D_m2" mapping="sum"/>
</NeighborhoodReporter>
<Property symbol="D_m3" value="0.0"/>
<NeighborhoodReporter time-step="0.1">
<Input scaling="cell" value="if(cell.type == celltype.cell.id
 and sqrt((cell.center.x-local.cell.center.x)^2 + (cell.center.y-local.cell.center.y)^2) < d_max,
 (alpha3_eff/(pi*local.r^2))
 * (d_max - sqrt((cell.center.x-local.cell.center.x)^2 + (cell.center.y-local.cell.center.y)^2)) / (d_max - d_eq)
 * (m3 - local.m3),
 0)"/>
<Output symbol-ref="D_m3" mapping="sum"/>
</NeighborhoodReporter>
<!-- Combined reaction-diffusion ODE system -->
<System time-step="0.001" solver="Euler [fixed, O(1)]">
<DiffEqn symbol-ref="m2">
<Expression>reaction_m2 + D_m2</Expression>
</DiffEqn>
<DiffEqn symbol-ref="m3">
<Expression>reaction_m3 + D_m3</Expression>
</DiffEqn>
</System>
<!-- Growth rate (Eq. 10): activator m2 acts as the growth morphogen -->
<Function symbol="g">
<Expression>((g_max-g_min)*m2^h/(s^h+m2^h)+g_min)*(c^h/(c^h+(neighbor_count*1.5)^h))</Expression>
</Function>
<!-- Cell radius growth (Eq. 11): dr/dt = g*r/2 -->
<System time-step="1.0" name="Cell growth" solver="Euler [fixed, O(1)]">
<DiffEqn symbol-ref="r">
<Expression>g*r/2</Expression>
</DiffEqn>
</System>
<!-- Mitosis when cell volume reaches 2*A00 -->
<CellDivision division-plane="random">
<Condition>cell.volume >= 2*A00</Condition>
<Triggers>
<Rule symbol-ref="r">
<Expression>sqrt(cell.volume/pi)</Expression>
</Rule>
</Triggers>
</CellDivision>
<!-- Apoptosis when cell shrinks below half target -->
<CellDeath>
<Condition>cell.volume <= A00/2</Condition>
</CellDeath>
<!-- Neighbor count for crowding inhibition -->
<Property symbol="neighbor_count" value="0.0"/>
<NeighborhoodReporter time-step="0.1">
<Input scaling="cell" value="if(cell.type == celltype.cell.id
 and sqrt((cell.center.x-local.cell.center.x)^2 + (cell.center.y-local.cell.center.y)^2) < d_max,
 1,
 0)"/>
<Output symbol-ref="neighbor_count" mapping="sum"/>
</NeighborhoodReporter>
</CellType>
<CellType name="Medium" class="medium">
<Constant symbol="m2" value="0.0"/>
<Constant symbol="m3" value="0.0"/>
<Constant symbol="g" value="0.0"/>
<Constant symbol="r" value="0.0"/>
</CellType>
</CellTypes>
<CPM>
<Interaction>
<Contact type2="cell" type1="cell" value="-0.05"/>
</Interaction>
<ShapeSurface scaling="norm">
<Neighborhood>
<Order>optimal</Order>
</Neighborhood>
</ShapeSurface>
<MonteCarloSampler stepper="edgelist">
<MCSDuration value="0.1"/>
<MetropolisKinetics temperature="0.01"/>
<Neighborhood>
<Order>optimal</Order>
</Neighborhood>
</MonteCarloSampler>
</CPM>
<CellPopulations>
<Population type="cell" name="Initial cell" size="0">
<InitCellObjects mode="distance">
<Arrangement repetitions="2, 1, 0" displacements="2*sqrt(A00/pi), 2*sqrt(A00/pi), 0">
<Sphere center="size.x/2, size.y/2, 0" radius="sqrt(A00/pi)"/>
</Arrangement>
</InitCellObjects>
</Population>
</CellPopulations>
<Global>
<!-- ============== GEOMETRY ============== -->
<Constant symbol="A00" value="40"/>
<!-- target cell area in pixels -->
<Constant symbol="Lam_V" name="Volume strength" value="0.1"/>
<Constant symbol="Lam_S" name="Surface strength" value="0.1"/>
<!-- Interaction distances (in pixels)
Paper convention: d_eq = 2*r, d_max = 1.5*d_eq = 3*r -->
<Constant symbol="d_eq" value="2*sqrt(A00/pi)"/>
<Constant symbol="d_max" value="3*sqrt(A00/pi)"/>
<!-- ============== UNIT CONVERSION ============== -->
<!-- Paper's alpha is in [cell_radius²/time]; convert to [pixel²/time]
by multiplying by (pixels per cell_radius)² = A00/pi = r² -->
<Constant symbol="alpha2_paper" value="0.1"/>
<Constant symbol="alpha3_paper" value="2.0"/>
<Constant symbol="alpha2_eff" value="alpha2_paper * A00/pi"/>
<Constant symbol="alpha3_eff" value="alpha3_paper * A00/pi"/>
<!-- ============== TURING (GIERER-MEINHARDT) ============== -->
<Constant symbol="q2" value="0"/>
<!-- basal activator production -->
<Constant symbol="q3" value="0"/>
<!-- basal inhibitor production -->
<Constant symbol="lambda2" value="1.2"/>
<!-- activator decay -->
<Constant symbol="lambda3" value="1.0"/>
<!-- inhibitor decay -->
<Constant symbol="gamma" value="1.0"/>
<!-- coupling -->
<Constant symbol="delta" value="0.4"/>
<!-- activator saturation -->
<Constant symbol="Lambda" value="0.075"/>
<!-- scaling factor (Fig. 12B = filament) -->
<Constant symbol="epsilon" value="1e-6"/>
<!-- divide-by-zero guard -->
<!-- ============== GROWTH ============== -->
<Constant symbol="g_min" value="-0.01"/>
<Constant symbol="g_max" value="0.01"/>
<Constant symbol="s" value="0.5*pi/A00"/>
<!-- Fig. 12 threshold -->
<Constant symbol="c" value="6"/>
<!-- crowding threshold -->
<Constant symbol="h" value="8"/>
<!-- Hill coefficient -->
</Global>
</MorpheusModel>
Downloads
Files associated with this model: