There is a limit of 64 species in eion.cpp, see comment in the code:
/* an embarassing hack */
/* up to 32 possible ions */
/* continuously compute a bitmap that allows determination
of which models WRITE which ion concentrations */
OS + Version: Linux debian-gnu-linux-11 5.10.0-30-arm64 #1 SMP Debian 5.10.218-1 (2024-06-01) aarch64 GNU/Linux
Minimal working example - MWE
import neuron
from neuron import h
import neuron.crxd as rxd
soma = h.Section(name="soma")
soma.L = soma.diam = 10
species_list = []
print("Creating regions")
region = rxd.Region(soma, nrn_region="i")
print("Creating species")
for idx in range(0,200):
species_name = f"species{idx}"
spec = rxd.Species(region,
d=0,
initial=1,
charge=0,
name=species_name)
species_list.append(spec)
print("Inserting channels")
soma.insert("caldyn_ms")
print("Init")
h.finitialize()
neuron.run(100)
caldyn_ms.mod
TITLE Calcium dynamics for L and T calcium pool
NEURON {
SUFFIX caldyn_ms
USEION cal READ ical, cali WRITE cali VALENCE 2
RANGE pump, cainf, taur, drive, depth
}
UNITS {
(molar) = (1/liter)
(mM) = (millimolar)
(um) = (micron)
(mA) = (milliamp)
(msM) = (ms mM)
FARADAY = (faraday) (coulomb)
}
PARAMETER {
drive = 10000 (1)
depth = 0.2 (um)
cainf = 70e-6 (mM)
taur = 43 (ms)
kt = 1e-4 (mM/ms)
kd = 1e-4 (mM)
pump = 0.02
}
STATE { cali (mM) }
INITIAL { cali = cainf }
ASSIGNED {
ical (mA/cm2)
drive_channel (mM/ms)
drive_pump (mM/ms)
}
BREAKPOINT {
SOLVE state METHOD cnexp
}
DERIVATIVE state {
: force concentration to stay above cainf by only pumping if larger
drive_channel = -drive*ical/(2*FARADAY*depth)
drive_pump = -kt*(cali-cainf)/(cali+kd)
if (drive_channel <= 0.) { drive_channel = 0. }
cali' = drive_channel + pump*drive_pump + (cainf-cali)/taur
}
COMMENT
Original NEURON model by Wolf (2005) and Destexhe (1992). Adaptation by
Alexander Kozlov <akozlov@kth.se>. Updated by Robert Lindroos <robert.lindroos@ki.se>.
Updates by RL:
-cainf changed from 10 to 70 nM (sabatini et al., 2002 The Life Cycle of Ca 2+ Ions in Dendritic Spines)
-pump updated to only be active if cai > cainf (neutralized by adding reversed entity)
[1] Wolf JA, Moyer JT, Lazarewicz MT, Contreras D, Benoit-Marand M,
O'Donnell P, Finkel LH (2005) NMDA/AMPA ratio impacts state transitions
and entrainment to oscillations in a computational model of the nucleus
accumbens medium spiny projection neuron. J Neurosci 25(40):9080-95.
ENDCOMMENT
Logs
Creating regions
Creating species
Inserting channels
Assertion failed: file /root/nrn/src/nrnoc/eion.cpp, line 437
NEURON: k < sizeof(long) * 8
near line 0
objref hoc_obj_[2]
^
Context
There is a limit of 64 species in eion.cpp, see comment in the code:
https://github.com/neuronsimulator/nrn/blob/8ffa1fa3acfbb4f91d070312617d83d64634adfb/src/nrnoc/eion.cpp#L406C1-L409C58
failing on line: https://github.com/neuronsimulator/nrn/blob/8ffa1fa3acfbb4f91d070312617d83d64634adfb/src/nrnoc/eion.cpp#L429
Overview of the issue
Unable to have more than 64 species in eion.cpp https://github.com/neuronsimulator/nrn/blob/8ffa1fa3acfbb4f91d070312617d83d64634adfb/src/nrnoc/eion.cpp#L429
Expected result/behavior
Should be able to have more than 64 species.
NEURON setup
Minimal working example - MWE
caldyn_ms.mod
Logs