/usr/share/nrn/demo/release/cabpump.mod is in neuron 7.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | TITLE Calcium ion accumulation and diffusion with pump
: The internal coordinate system is set up in PROCEDURE coord_cadifus()
: and must be executed before computing the concentrations.
: The scale factors set up in this procedure do not have to be recomputed
: when diam or DFree are changed.
: The amount of calcium in an annulus is ca[i]*diam^2*vol[i] with
: ca[0] being the second order correct concentration at the exact edge
: and ca[NANN-1] being the concentration at the exact center
? interface
NEURON {
SUFFIX cadifpmp
USEION ca READ cao, ica WRITE cai, ica
RANGE ica_pmp, ica_pmp_last
GLOBAL vol, pump0
}
DEFINE NANN 10
UNITS {
(mV) = (millivolt)
(molar) = (1/liter)
(mM) = (millimolar)
(um) = (micron)
(mA) = (milliamp)
(mol) = (1)
FARADAY = (faraday) (coulomb)
PI = (pi) (1)
R = (k-mole) (joule/degC)
}
PARAMETER {
DFree = .6 (um2/ms) <0,1e9>
beta = 50 <0, 1e9>
k1 = 5e8 (/mM-s) <0, 1e10>:optional mm formulation
k2 = .25e6 (/s) <0, 1e10>
k3 = .5e3 (/s) <0, 1e10>
k4 = 5e0 (/mM-s) <0, 1e10>
pump0 = 3e-14 (mol/cm2) <0, 1e9> : set to 0 in hoc if this pump not wanted
}
ASSIGNED {
celsius (degC)
diam (um)
v (millivolt)
cao (mM)
cai (mM)
ica (mA/cm2)
vol[NANN] (1) : gets extra cm2 when multiplied by diam^2
ica_pmp (mA/cm2)
area1 (um2)
c1 (1+8 um5/ms)
c2 (1-10 um2/ms)
c3 (1-10 um2/ms)
c4 (1+8 um5/ms)
ica_pmp_last (mA/cm2)
}
CONSTANT {
volo = 1 (liter)
}
STATE {
ca[NANN] (mM) <1e-6> : ca[0] is equivalent to cai
pump (mol/cm2) <1e-15>
pumpca (mol/cm2) <1e-15>
}
INITIAL {LOCAL total
parms()
FROM i=0 TO NANN-1 {
ca[i] = cai
}
pumpca = cai*pump*c1/c2
total = pumpca + pump
if (total > 1e-9) {
pump = pump*(pump/total)
pumpca = pumpca*(pump/total)
}
ica_pmp = 0
ica_pmp_last = 0
}
BREAKPOINT {
SOLVE state METHOD sparse
ica_pmp_last = ica_pmp
ica = ica_pmp
: printf("Breakpoint t=%g v=%g cai=%g ica=%g\n", t, v, cai, ica)
}
LOCAL frat[NANN] : gets extra cm when multiplied by diam
PROCEDURE coord() {
LOCAL r, dr2
: cylindrical coordinate system with constant annuli thickness to
: center of cell. Note however that the first annulus is half thickness
: so that the concentration is second order correct spatially at
: the membrane or exact edge of the cell.
: note ca[0] is at edge of cell
: ca[NANN-1] is at center of cell
r = 1/2 :starts at edge (half diam)
dr2 = r/(NANN-1)/2 :half thickness of annulus
vol[0] = 0
frat[0] = 2*r
FROM i=0 TO NANN-2 {
vol[i] = vol[i] + PI*(r-dr2/2)*2*dr2 :interior half
r = r - dr2
frat[i+1] = 2*PI*r/(2*dr2) :exterior edge of annulus
: divided by distance between centers
r = r - dr2
vol[i+1] = PI*(r+dr2/2)*2*dr2 :outer half of annulus
}
}
KINETIC state {
: printf("Solve begin t=%g v=%g cai=%g ica_pmp=%g\n", t, v, cai, ica_pmp)
COMPARTMENT i, (1+beta)*diam*diam*vol[i]*1(um) {ca}
COMPARTMENT (1e10)*area1 {pump pumpca}
COMPARTMENT volo*(1e15) {cao}
? kinetics
~ pumpca <-> pump + cao (c3, c4)
ica_pmp = (1e-4)*2*FARADAY*(f_flux - b_flux)/area1
: all currents except pump
~ ca[0] << (-(ica-ica_pmp_last)*PI*diam*1(um)*(1e4)*frat[0]/(2*FARADAY))
:diffusion
FROM i=0 TO NANN-2 {
~ ca[i] <-> ca[i+1] (DFree*frat[i+1]*1(um), DFree*frat[i+1]*1(um))
}
:pump
~ ca[0] + pump <-> pumpca (c1, c2)
cai = ca[0] : this assignment statement is used specially by cvode
: printf("Solve end cai=%g ica=%g ica_pmp=%g ica_pmp_last=%g\n",
: cai, ica, ica_pmp,ica_pmp_last)
}
PROCEDURE parms() {
coord()
area1 = 2*PI*(diam/2) * 1(um)
c1 = (1e7)*area1 * k1
c2 = (1e7)*area1 * k2
c3 = (1e7)*area1 * k3
c4 = (1e7)*area1 * k4
}
FUNCTION ss() (mM) {
SOLVE state STEADYSTATE sparse
ss = cai
}
COMMENT
At this time, conductances (and channel states and currents are
calculated at the midpoint of a dt interval. Membrane potential and
concentrations are calculated at the edges of a dt interval. With
secondorder=2 everything turns out to be second order correct.
ENDCOMMENT
|