<?xml version='1.0' encoding='UTF-8'?>
<MorpheusModel version="4">
    <Description>
        <Details>Model ID:	https://identifiers.org/morpheus/M5932
  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
Comment:	Reproduction of Figure 9 from Kaity et al.
	Turing-driven stable circular tissue shape.
	Schnakenberg activator-inhibitor system regulates cell growth.
	Two-stage development: low s (proliferation), then high s (steady state).
	Length^2 conversion: L2 = A00/pi applied to alpha, q, s (all length^2-bearing quantities).</Details>
        <Title>M5932 Schnakenberg Equilibrium and Regeneration</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="20000"/>
        <TimeSymbol symbol="time"/>
        <RandomSeed value="1234"/>
    </Time>
    <Analysis>
        <ModelGraph include-tags="#untagged" format="dot" reduced="false"/>
        <Gnuplotter time-step="50">
            <Terminal name="png" size="1600, 1600, 0"/>
            <Plot title="Tissue (radius)">
                <Cells value="r">
                    <ColorMap>
                        <Color color="blue" value="0"/>
                        <Color color="green" value="0.1"/>
                    </ColorMap>
                </Cells>
            </Plot>
            <Plot title="Activator m2">
                <Cells value="m2">
                    <ColorMap>
                        <Color color="blue" value="0"/>
                        <Color color="green" value="0.1"/>
                    </ColorMap>
                </Cells>
            </Plot>
            <Plot title="Inhibitor m3">
                <Cells value="m3">
                    <ColorMap>
                        <Color color="blue" value="0"/>
                        <Color color="green" value="0.1"/>
                    </ColorMap>
                </Cells>
            </Plot>
            <Plot title="Growth rate g">
                <Cells value="g">
                    <ColorMap>
                        <Color color="blue" value="0"/>
                        <Color color="green" value="0.1"/>
                    </ColorMap>
                </Cells>
            </Plot>
        </Gnuplotter>
        <!--    <Disabled>
        <Logger time-step="50">
            <Input/>
            <Plots>
                <Plot>
                    <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>
            <Output>
                <TextOutput/>
            </Output>
        </Logger>
    </Disabled>
-->
        <Gnuplotter time-step="50">
            <Terminal name="png"/>
            <Plot title="Activator m2">
                <Cells value="m2">
                    <ColorMap>
                        <Color color="blue" value="0"/>
                        <Color color="green" value="0.1"/>
                    </ColorMap>
                </Cells>
            </Plot>
        </Gnuplotter>
    </Analysis>
    <Global>
        <Constant symbol="A00" value="40"/>
        <Constant symbol="Lam_V" name="Volume strength" value="0.1"/>
        <Constant symbol="Lam_S" name="Surface strength" value="0.1"/>
        <Constant symbol="d_eq" value="2*sqrt(A00/pi)"/>
        <Constant symbol="d_max" value="3*sqrt(A00/pi)"/>
        <Constant symbol="L2" value="(A00/pi)"/>
        <Constant symbol="alpha2_paper" value="2"/>
        <Constant symbol="alpha3_paper" value="40"/>
        <Constant symbol="alpha2_eff" value="alpha2_paper * L2"/>
        <Constant symbol="alpha3_eff" value="alpha3_paper * L2"/>
        <Constant symbol="q2" value="0.1"/>
        <Constant symbol="q3" value="0.9"/>
        <Constant symbol="lambda2" value="1.0"/>
        <Constant symbol="lambda3" value="0.1"/>
        <Constant symbol="gamma" value="1.0"/>
        <Constant symbol="Lambda" value="0.1"/>
        <Constant symbol="g_min" value="-0.01"/>
        <Constant symbol="g_max" value="0.01"/>
        <Constant symbol="s_dev" value="0.1"/>
        <Constant symbol="s_steady" value="0.4"/>
        <Constant symbol="t_dev" value="1500"/>
        <Function symbol="s">
            <Expression>if(time &lt; t_dev, s_dev, s_steady)</Expression>
        </Function>
        <Constant symbol="c" value="6"/>
        <Constant symbol="h" value="8"/>
        <Constant symbol="neighbor_correction" value="1.5"/>
    </Global>
    <CellTypes>
        <CellType name="cell" class="biological">
            <VolumeConstraint target="A0" strength="Lam_V"/>
            <SurfaceConstraint target="1" strength="Lam_S" mode="aspherity"/>
            <Property symbol="r" name="Cell radius" value="sqrt(A00/pi)"/>
            <Function symbol="A0" name="Target area">
                <Expression>pi*r^2</Expression>
            </Function>
            <Property symbol="m2" name="Activator" value="0.5 / L2"/>
            <Property symbol="m3" name="Inhibitor" value="0.5 / L2"/>
            <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 - lambda2*m2 - g*m2)</Expression>
            </Equation>
            <Equation symbol-ref="reaction_m3">
                <Expression>Lambda*(q3 - gamma*m2^2*m3 - lambda3*m3 - g*m3)</Expression>
            </Equation>
            <Property symbol="D_m2" value="0.0"/>
            <NeighborhoodReporter>
                <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) &lt; 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>
                <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) &lt; 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>
            <System time-step="0.001" solver="Dormand-Prince [adaptive, O(5)]">
                <DiffEqn symbol-ref="m2">
                    <Expression>reaction_m2 + D_m2</Expression>
                </DiffEqn>
                <DiffEqn symbol-ref="m3">
                    <Expression>reaction_m3 + D_m3</Expression>
                </DiffEqn>
            </System>
            <Function symbol="g">
                <Expression>((g_max-g_min)*m2^h/(s^h+m2^h)+g_min)*(c^h/(c^h+(neighbor_count*neighbor_correction)^h))</Expression>
            </Function>
            <System time-step="0.001" name="Cell growth" solver="Euler [fixed, O(1)]">
                <DiffEqn symbol-ref="r">
                    <Expression>g*r/2</Expression>
                </DiffEqn>
            </System>
            <CellDivision division-plane="random">
                <Condition>cell.volume >= 2*A00</Condition>
                <Triggers>
                    <Rule symbol-ref="r">
                        <Expression>sqrt(cell.volume/pi)</Expression>
                    </Rule>
                </Triggers>
            </CellDivision>
            <CellDeath>
                <Condition>cell.volume &lt;= A00/2</Condition>
            </CellDeath>
            <Property symbol="neighbor_count" value="0.0"/>
            <NeighborhoodReporter time-step="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) &lt; d_max, 1, 0)"/>
                <Output symbol-ref="neighbor_count" mapping="sum"/>
            </NeighborhoodReporter>
            <CellDeath>
                <Condition>time==10000 and cell.center.x>(size.x*0.6)</Condition>
            </CellDeath>
        </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="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="1, 1, 0" displacements="2*sqrt(A00/pi), 0, 0">
                    <Sphere center="size.x/2, size.y/2, 0" radius="sqrt(A00/pi)"/>
                </Arrangement>
            </InitCellObjects>
        </Population>
    </CellPopulations>
</MorpheusModel>
