In [1]:
from jLM.units import *
from jLM.RDME import Sim as RDMESim
from jLM.RegionBuilder import RegionBuilder
In [2]:
outputFile = "minde.lm"
In [3]:
latticeSpacing = nm(16)
In [4]:
m_size = micron(1.024, 1.024, 4.096)
lx, ly, lz = [int(round(cDim / latticeSpacing)) for cDim in m_size]
In [5]:
# Create our simulation object
sim = RDMESim("Minde Example",
              outputFile,
              [lx, ly, lz],
              latticeSpacing,
              "default",
              "Byte",
              microsecond(50))
In [6]:
length            = micron(4)
diameter          = micron(1)
membraneThickness = nm(32)
In [7]:
inner_len = int(round((length - (2 * membraneThickness)) / latticeSpacing))
inner_d   = int(round((diameter - (2 * membraneThickness)) / latticeSpacing))
outer_len = int(round(length / latticeSpacing))
outer_d   = int(round(diameter / latticeSpacing))
In [8]:
B = RegionBuilder(sim)
default   = B.box(lx, ly, lz)
cytoplasm = B.capsule(inner_len, inner_d)
outer     = B.capsule(outer_len, outer_d)
membrane  = (~cytoplasm) & outer
In [9]:
B.compose(
    (sim.region('default'),   default),
    (sim.region('cytoplasm'), cytoplasm),
    (sim.region('membrane'),  membrane)
)
In [10]:
with sim.construct():
    sim.species('minDatp', texRepr = 'minDatp', annotation = "Species minDatp")
    sim.species('minDadp', texRepr = 'minDadp', annotation = "Species minDadp")
    sim.species('minE',    texRepr = 'minE',    annotation = "Species minE")
    sim.species('minDm',   texRepr = 'minDm',   annotation = "Species minDm")
    sim.species('minDEm',  texRepr = 'minDEm',  annotation = "Species minDEm")
New Species
Index Name Annotation
1 minDatp Species minDatp
2 minDadp Species minDadp
3 minE Species minE
4 minDm Species minDm
5 minDEm Species minDEm
In [11]:
with sim.construct():
    sim.diffusionConst("d1Rate", 2.5e-12, texRepr = r'd1_{Rate}', annotation = 'Default Diffusion Rate1')
    sim.diffusionConst("d2Rate", 1e-14,   texRepr = r'd2_{Rate}', annotation = 'Default Diffusion Rate2')
New diffusion constants
Index Name Value Annotation
0 $$d1_{Rate}$$ 2.500 × 10-12 m2⋅s-1  Default Diffusion Rate1
1 $$d2_{Rate}$$ 1.000 × 10-14 m2⋅s-1  Default Diffusion Rate2
In [12]:
dc  = sim.dc
reg = sim.reg

with sim.construct():
    sim.transitionRate(None, None,          None,          sim.diffusionZero)
    sim.transitionRate(None, reg.cytoplasm, reg.cytoplasm, dc.d1Rate)
New diffusion constants
Index Name Value
2 $$D_\varnothing$$ 0.000 m2⋅s-1 
In [13]:
with sim.construct():
    sim.rateConst('Rate1', 0.5,    order = 1, annotation = "Rate1")
    sim.rateConst('Rate2', 1e-12,  order = 1, annotation = "Rate2")
    sim.rateConst('Rate3', 9e6,    order = 2, annotation = "Rate3")
    sim.rateConst('Rate4', 5.56e7, order = 2, annotation = "Rate4")
    sim.rateConst('Rate5', 0.7,    order = 1, annotation = "Rate5")
New reaction rates
Index Name Value Annotation
0 $$k_{\mathrm{Rate1}}$$ 0.500 s-1  Rate1
1 $$k_{\mathrm{Rate2}}$$ 1.000 × 10-12 s-1  Rate2
2 $$k_{\mathrm{Rate3}}$$ 9.000 × 106 M-1⋅s-1  Rate3
3 $$k_{\mathrm{Rate4}}$$ 5.560 × 107 M-1⋅s-1  Rate4
4 $$k_{\mathrm{Rate5}}$$ 0.700 s-1  Rate5
In [14]:
sp = sim.sp
rc = sim.rc
In [15]:
with sim.construct():
    sim.reaction([sp.minDadp], [sp.minDatp], rc.Rate1, annotation = "Reaction1", regions = [reg.cytoplasm])
New reactions
Index Reaction Rate Regions Annotation
0 $$minDadp\overset{k_{\mathrm{Rate1}}}{\longrightarrow}minDatp$$ 0.500 s-1  cytoplasm Reaction1
In [16]:
with sim.construct():
    sim.transitionRate(None,      reg.membrane, reg.membrane, dc.d1Rate)
    sim.transitionRate(sp.minDm,  reg.membrane, reg.membrane, dc.d2Rate)
    sim.transitionRate(sp.minDEm, reg.membrane, reg.membrane, dc.d2Rate)
In [17]:
with sim.construct():
    sim.reaction([sp.minDatp],           [sp.minDm],            rc.Rate2, annotation = "Reaction2", regions = [reg.membrane])
    sim.reaction([sp.minDatp, sp.minDm], [sp.minDm, sp.minDm],  rc.Rate3, annotation = "Reaction3", regions = [reg.membrane])
    sim.reaction([sp.minDm, sp.minE],    [sp.minDEm],           rc.Rate4, annotation = "Reaction4", regions = [reg.membrane])
    sim.reaction([sp.minDEm],            [sp.minE, sp.minDadp], rc.Rate5, annotation = "Reaction5", regions = [reg.membrane])
New reactions
Index Reaction Rate Regions Annotation
1 $$minDatp\overset{k_{\mathrm{Rate2}}}{\longrightarrow}minDm$$ 1.000 × 10-12 s-1  membrane Reaction2
2 $$minDatp + minDm\overset{k_{\mathrm{Rate3}}}{\longrightarrow}minDm + minDm$$ 9.000 × 106 M-1⋅s-1  membrane Reaction3
3 $$minDm + minE\overset{k_{\mathrm{Rate4}}}{\longrightarrow}minDEm$$ 5.560 × 107 M-1⋅s-1  membrane Reaction4
4 $$minDEm\overset{k_{\mathrm{Rate5}}}{\longrightarrow}minE + minDadp$$ 0.700 s-1  membrane Reaction5
In [18]:
with sim.construct():
    sim.transitionRate(sp.minDatp, reg.cytoplasm, reg.membrane, dc.d1Rate)
In [19]:
with sim.construct():
    sim.distributeNumber(sp.minDatp, reg.cytoplasm, 1758)
    sim.distributeNumber(sp.minDadp, reg.cytoplasm, 1758)
    sim.distributeNumber(sp.minE,    reg.cytoplasm, 914)
In [20]:
sim.simulationTime = ms(50)

write_interval = ms(10)
sim.latticeWriteInterval = int(write_interval / sim.timestep)
sim.speciesWriteInterval = int(write_interval / sim.timestep)
In [21]:
sim.finalize()
nodiffregion in finalize: [0]
In [22]:
sim.run(solver = lm.MpdRdmeSolver(), cudaDevices = [0], replicate = 1)
2025-09-02 15:57:57) Info: Using 32 processor(s) and 1 CUDA device(s) per process.
2025-09-02 15:57:57) Info: Assigning 1.00 processor(s) and 1.00 CUDA device(s) per replicate.
2025-09-02 15:57:57) Info: Data output thread running.
2025-09-02 15:57:57) Info: MPDRDME: Rng seed: top word 786354465, bottom word 1
2025-09-02 15:57:58) Info: Data output thread finished.
2025-09-02 15:57:58) Info: Simulation file closed.
Out[22]:

Minde Example

Key

  • default
  • cytoplasm
  • membrane

xy-plane; z-index=19

No description has been provided for this image
Simulation
Time step 50.000 µs
Simulation time 0.050 s
Lattice write interval 200.000 s
Particle count write interval 200.000 s
Number of replicates 1
Trajectory data
Replicate Simulated time Lattice times Count times Initial count Final count
0000001 0.050 s 6 6 4430 4430
Lattice
Dimensions 64 × 64 × 256
Particles per site 16
Bytes per particle 1
Lattice spacing 16.000 nm
Subvolume size 4.096 × 10-6 fl
Model summary
Output file minde.lm
Number of species 5
Number of reactions 5
Number of region types 3
Number of rate constants 5
Number of diffusion constants 3
Number of placed particles 0
Region summary
Region Subvolumes Volume Particles Concentration Occupancy
default 359917 1.474 fl 0 0.000 µM $0.00\,\%$
cytoplasm 596195 2.442 fl 2657 1.807 µM $0.03\,\%$
membrane 92464 0.379 fl 1773 7.774 µM $0.12\,\%$