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")
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')
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)
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")
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])
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])
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
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 |
Replicate | Simulated time | Lattice times | Count times | Initial count | Final count |
---|---|---|---|---|---|
0000001 | 0.050 s | 6 | 6 | 4430 | 4430 |
Dimensions | 64 × 64 × 256 |
---|---|
Particles per site | 16 |
Bytes per particle | 1 |
Lattice spacing | 16.000 nm |
Subvolume size | 4.096 × 10-6 fl |
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 | 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\,\%$ |