Skip to content

Commit 1f561cd

Browse files
authored
Use equations directly (#59)
1 parent 74df039 commit 1f561cd

File tree

17 files changed

+557
-275
lines changed

17 files changed

+557
-275
lines changed

.vscode/settings.json

Lines changed: 0 additions & 15 deletions
This file was deleted.

Manifest.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -461,9 +461,9 @@ version = "1.15.1"
461461

462462
[[deps.DifferentiationInterface]]
463463
deps = ["ADTypes", "LinearAlgebra"]
464-
git-tree-sha1 = "f620da805b82bec64ab4d5f881c7592c82dbc08a"
464+
git-tree-sha1 = "54d7b8c74408048aea9c055ac8573b2b5c5ec11f"
465465
uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63"
466-
version = "0.7.3"
466+
version = "0.7.4"
467467

468468
[deps.DifferentiationInterface.extensions]
469469
DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore"
@@ -996,9 +996,9 @@ version = "3.1.1+0"
996996

997997
[[deps.JuliaFormatter]]
998998
deps = ["CommonMark", "Glob", "JuliaSyntax", "PrecompileTools", "TOML"]
999-
git-tree-sha1 = "7b3a1a49526f1549e24032520afd812790c37e5b"
999+
git-tree-sha1 = "f512fefd5fdc7dd1ca05778f08f91e9e4c9fdc37"
10001000
uuid = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
1001-
version = "2.1.5"
1001+
version = "2.1.6"
10021002

10031003
[[deps.JuliaSyntax]]
10041004
git-tree-sha1 = "937da4713526b96ac9a178e2035019d3b78ead4a"

src/ECMEDox.jl

Lines changed: 16 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -88,33 +88,18 @@ function build_model(; name=:ecmesys, bcl=0second, istim=-80μAcm⁻², tstart=0
8888
end
8989

9090
# Subsystems
91-
lccsys = get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm)
92-
ryrsys = get_ryr_sys(; ca_jsr, ca_ss)
93-
cksys = get_ck_sys(; atp_i, adp_i)
94-
forcesys = get_force_sys(; atp_i, adp_i, ca_i)
95-
jcasys = get_jca_sys(; atp_i, adp_i, ca_i, ca_nsr, ca_jsr, ca_ss, ca_o, na_i, na_o, vm)
96-
iksys = get_ik_sys(; na_i, na_o, k_i, k_o, mg_i, vm, atp_i, adp_i)
97-
inasys = get_ina_sys(; na_i, na_o, ca_i, ca_o, vm)
98-
inaksys = get_inak_sys(; atp_i, adp_i, vm, na_i, na_o, k_o)
99-
tcassys = get_tca_sys(; atp_m, adp_m, nad_m, nadh_m, h_m, ca_m, pi_m, mg_m, use_mg)
100-
@unpack suc, fum, oaa, vSL, vIDH, vKGDH, vMDH = tcassys
101-
etcsys = get_etc_sys(; h_i, h_m, DOX, MT_PROT, O2, nad_m, nadh_m, suc, fum, oaa)
102-
c5sys = get_c5_sys(; dpsi, h_i, h_m, atp_i, adp_i, atp_m, adp_m, pi_m, MT_PROT, mg_i, mg_m, use_mg)
103-
@unpack vROS, vNADHC1, vHres, vO2 = etcsys
104-
rossys = get_ros_sys(; dpsi, sox_m, nadph_i, V_MITO_V_MYO)
105-
mitocasys = get_mitoca_sys(; na_i, ca_m, ca_i, dpsi)
106-
107-
@unpack vTrROS, vIMAC, vSOD_i = rossys
108-
@unpack INa, INsNa, ICaB, INaB = inasys
109-
@unpack IPMCA, Jup, INaCa, Jtr, Jxfer = jcasys
110-
@unpack IK, IK1, IKp, IKatp = iksys
111-
@unpack INaK = inaksys
112-
@unpack ICaK, ICaL = lccsys
113-
@unpack vCK_mito = cksys
114-
@unpack vANT, vC5, vHu, vHleak = c5sys
115-
@unpack Jrel = ryrsys
116-
@unpack vAm, Jtrpn = forcesys
117-
@unpack vUni, vNaCa = mitocasys
91+
@unpack eqs_cicr16, ICaL, ICaK, Jrel, Jtr, Jxfer = get_cicr16_eqs(; vm, ca_ss, ca_i, ca_jsr, ca_nsr, k_i, ca_o, k_o)
92+
@unpack eqs_ck, vCK_mito, vCK_cyto, vTR_crp = get_ck_eqs(; atp_i, adp_i)
93+
@unpack eqs_force, vAm, Jtrpn = get_force_eqs(; atp_i, adp_i, ca_i)
94+
@unpack eqs_jca, IPMCA, Jup, INaCa = get_jca_eqs(; atp_i, adp_i, ca_i, ca_nsr, ca_o, na_i, na_o, vm)
95+
@unpack eqs_ik, IK1, IK, IKp, IKatp = get_ik_eqs(; na_i, na_o, k_i, k_o, vm, atp_i, adp_i, mg_i)
96+
@unpack eqs_ina, INa, INsNa, INaB, ICaB = get_ina_eqs(; na_i, na_o, ca_i, ca_o, vm)
97+
@unpack eqs_nak, INaK = get_inak_eqs(; atp_i, adp_i, vm, na_i, na_o, k_o)
98+
@unpack eqs_tca, vIDH, vKGDH, vMDH, vSL, suc, fum, oaa = get_tca_eqs(; atp_m, adp_m, nad_m, nadh_m, ca_m, h_m, pi_m, mg_m, use_mg)
99+
@unpack eqs_etc, vHres, vROS, vSDH, vNADHC1, vO2 = get_etc_eqs(; nad_m, nadh_m, dpsi, sox_m, suc, fum, oaa, DOX, MT_PROT, O2, h_i, h_m)
100+
@unpack eqs_c5, vANT, vC5, vHu, vHleak = get_c5_eqs(; dpsi, h_i, h_m, atp_i, adp_i, atp_m, adp_m, pi_m, MT_PROT, mg_i, mg_m)
101+
@unpack eqs_ros, vTrROS, vIMAC, vCAT, vGPX_i, vGR_i, vSOD_i = get_ros_eqs(; dpsi, sox_m, nadph_i, V_MITO_V_MYO)
102+
@unpack eqs_mitoca, vUni, vNaCa = get_mitoca_eqs(; na_i, ca_m, ca_i, dpsi)
118103

119104
eqs = [
120105
ΣA_i ~ atp_i + adp_i,
@@ -136,21 +121,19 @@ function build_model(; name=:ecmesys, bcl=0second, istim=-80μAcm⁻², tstart=0
136121
D(O2) ~ V_MT / (V_MYO + V_MT) * (-vROS - vO2) + kdiffO2 * (O2_o - O2),
137122
]
138123

124+
eqs = [eqs; eqs_cicr16; eqs_ck; eqs_force; eqs_jca; eqs_ik; eqs_ina; eqs_nak; eqs_tca; eqs_etc; eqs_c5; eqs_ros; eqs_mitoca]
125+
139126
if bcl > 0 && duty > 0 && istim != 0
140127
ts0 = collect(tstart:bcl:tend)
141128
ts1 = ts0 .+ duty
142129

143-
sstart = ModelingToolkit.SymbolicDiscreteCallback( ts0 => [iStim ~ istim], discrete_parameters = iStim, iv = t)
144-
send = ModelingToolkit.SymbolicDiscreteCallback( ts1 => [iStim ~ 0], discrete_parameters = iStim, iv = t)
130+
sstart = ModelingToolkit.SymbolicDiscreteCallback( ts0 => [iStim ~ istim]; discrete_parameters = [iStim], iv = t)
131+
send = ModelingToolkit.SymbolicDiscreteCallback( ts1 => [iStim ~ 0]; discrete_parameters = [iStim], iv = t)
145132
sys = System(eqs, t; name, discrete_events = [sstart, send])
146133
else
147134
sys = System(eqs, t; name)
148135
end
149136

150-
for s in (lccsys, ryrsys, cksys, forcesys, jcasys, iksys, inasys, inaksys, tcassys, etcsys, c5sys, rossys, mitocasys)
151-
sys = extend(s, sys; name)
152-
end
153-
154137
if simplify
155138
sys = mtkcompile(sys)
156139
end

src/cicr16.jl

Lines changed: 123 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
# Good old 16-state CICR (Cortassa 2006), including L-type calcium channel (LCC) and Ryanodine receptor (RyR)
2-
"LCC ODE system"
3-
function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
1+
# 16-state CICR from Cortassa et al. (2006), including L-type calcium channels (LCC) and Ryanodine receptors (RyR)
2+
function get_cicr16_eqs(; vm, ca_ss, ca_i, ca_jsr, ca_nsr, k_i, ca_o, k_o)
43
@parameters begin
4+
R_TR = inv(9.09ms) # Diffusion rate between JSR and NSR
5+
R_XFER= inv(0.5747ms) # Diffusion rate between subspace and cytosol
6+
## L-type calcium channels
57
A_LCC = 2
68
B_LCC = 1/2
79
ω_LCC = 0.01kHz
@@ -11,6 +13,114 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
1113
P_CA_LCC = 1E-3cm * Hz # 1.24E-3cm * Hz
1214
P_K_LCC = 1.11E-11cm * Hz
1315
I_CA_HALF_LCC = -0.4583μAcm⁻²
16+
## Ryanodine receptors
17+
R_RYR = 3.6kHz
18+
KA_P_RYR = 1.125E10 / (mM^4 * ms)
19+
KA_M_RYR = 0.576kHz
20+
KB_P_RYR = 4.05E6 / (mM^3 * ms)
21+
KB_M_RYR = 1.93kHz
22+
KC_P_RYR = 0.1kHz
23+
KC_M_RYR = 8E-4kHz
24+
end
25+
26+
@variables begin
27+
# State transition rates
28+
α_lcc(t)
29+
β_lcc(t)
30+
# Closed LCC state
31+
c0_lcc(t) # Conserved
32+
c1_lcc(t) = 0
33+
c2_lcc(t) = 0
34+
c3_lcc(t) = 0
35+
c4_lcc(t) = 0
36+
# Opened LCC state
37+
o_lcc(t) = 0
38+
# Ca-inhibited LCC states
39+
cca0_lcc(t) = 0
40+
cca1_lcc(t) = 0
41+
cca2_lcc(t) = 0
42+
cca3_lcc(t) = 0
43+
cca4_lcc(t) = 0
44+
# Voltage-gated LCC
45+
x_yca(t) = 1
46+
y_inf(t)
47+
τ_yca(t)
48+
# RyR
49+
po1_ryr(t) = 0
50+
po2_ryr(t) = 0
51+
pc1_ryr(t) ## Conserved
52+
pc2_ryr(t) = 0
53+
# Currents
54+
ICaMax(t)
55+
ICaK(t)
56+
ICaL(t)
57+
Jrel(t)
58+
Jtr(t)
59+
Jxfer(t)
60+
end
61+
62+
ω, f, g = ω_LCC, f_LCC, g_LCC
63+
α = α_lcc
64+
β = β_lcc
65+
α′ = A_LCC * α
66+
β′ = B_LCC * β
67+
γ = γ_LCC * ca_ss
68+
rs_lcc = Dict()
69+
add_rate!(rs_lcc, 4α, c0_lcc, β, c1_lcc)
70+
add_rate!(rs_lcc, 3α, c1_lcc, 2β, c2_lcc)
71+
add_rate!(rs_lcc, 2α, c2_lcc, 3β, c3_lcc)
72+
add_rate!(rs_lcc, α, c3_lcc, 4β, c4_lcc)
73+
add_rate!(rs_lcc, f, c4_lcc, g, o_lcc)
74+
add_rate!(rs_lcc, 4α′, cca0_lcc, β′, cca1_lcc)
75+
add_rate!(rs_lcc, 3α′, cca1_lcc, 2β′, cca2_lcc)
76+
add_rate!(rs_lcc, 2α′, cca2_lcc, 3β′, cca3_lcc)
77+
add_rate!(rs_lcc, α′, cca3_lcc, 4β′, cca4_lcc)
78+
add_rate!(rs_lcc, γ, c0_lcc, ω, cca0_lcc)
79+
add_rate!(rs_lcc, A_LCC * γ, c1_lcc, B_LCC * ω, cca1_lcc)
80+
add_rate!(rs_lcc, A_LCC^2 * γ, c2_lcc, B_LCC^2 * ω, cca2_lcc)
81+
add_rate!(rs_lcc, A_LCC^3 * γ, c3_lcc, B_LCC^3 * ω, cca3_lcc)
82+
add_rate!(rs_lcc, A_LCC^4 * γ, c4_lcc, B_LCC^4 * ω, cca4_lcc)
83+
lcceqs = [ D(x) ~ rs_lcc[x] for x in (c1_lcc, c2_lcc, c3_lcc, c4_lcc, o_lcc, cca0_lcc, cca1_lcc, cca2_lcc, cca3_lcc, cca4_lcc) ]
84+
85+
rs_ryr = Dict()
86+
add_rate!(rs_ryr, KA_P_RYR * ca_ss^4, pc1_ryr, KA_M_RYR, po1_ryr)
87+
add_rate!(rs_ryr, KB_P_RYR * ca_ss^3, po1_ryr, KB_M_RYR, po2_ryr)
88+
add_rate!(rs_ryr, KC_P_RYR, po1_ryr, KC_M_RYR, pc2_ryr)
89+
ryreqs = [D(x) ~ rs_ryr[x] for x in (po1_ryr, po2_ryr, pc2_ryr)]
90+
91+
eqs = [
92+
1 ~ c0_lcc + c1_lcc + c2_lcc + c3_lcc + c4_lcc + o_lcc + cca0_lcc + cca1_lcc + cca2_lcc + cca3_lcc + cca4_lcc,
93+
1 ~ pc1_ryr + po1_ryr + po2_ryr + pc2_ryr,
94+
α_lcc ~ 0.4kHz * exp((vm + 2mV) * inv(10mV)),
95+
β_lcc ~ 0.05kHz * exp(-(vm + 2mV) * inv(13mV)),
96+
y_inf ~ expit(-(vm + 55mV) * inv(7.5mV)) + 0.5 * expit((vm - 21mV) * inv(6mV)),
97+
τ_yca ~ 20ms + 600ms * expit(-(vm + 30mV) * inv(9.5mV)),
98+
D(x_yca) ~ (y_inf - x_yca) / τ_yca,
99+
ICaMax ~ ghk(P_CA_LCC, vm, 1μM, 0.341 * ca_o, 2) ,
100+
ICaL ~ 6 * x_yca * o_lcc * ICaMax,
101+
ICaK ~ hil(I_CA_HALF_LCC, ICaMax) * x_yca * o_lcc * ghk(P_K_LCC, vm, k_i, k_o),
102+
Jrel ~ R_RYR * (po1_ryr + po2_ryr) * (ca_jsr - ca_ss),
103+
Jtr ~ R_TR * (ca_nsr - ca_jsr),
104+
Jxfer ~ R_XFER * (ca_ss - ca_i),
105+
]
106+
107+
eqs_cicr16 = [ryreqs; lcceqs; eqs]
108+
109+
return (; eqs_cicr16, ICaL, ICaK, Jrel, Jtr, Jxfer)
110+
end
111+
112+
"LCC ODE system"
113+
function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
114+
@parameters begin
115+
A_LCC = 2
116+
B_LCC = 1/2
117+
ω_LCC = 10Hz
118+
f_LCC = 300Hz
119+
g_LCC = 2kHz
120+
γ_LCC = 0.1875 / (ms * mM)
121+
P_CA_LCC = 1E-3cm * Hz # 1.24E-3cm * Hz
122+
P_K_LCC = 1.11E-11cm * Hz
123+
I_CA_HALF_LCC = -0.4583μAcm⁻²
14124
end
15125

16126
@variables begin
@@ -35,13 +145,18 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
35145
x_yca(t) = 1
36146
y_inf(t)
37147
τ_yca(t)
148+
# RyR
149+
po1_ryr(t) = 0
150+
po2_ryr(t) = 0
151+
pc1_ryr(t) ## Conserved
152+
pc2_ryr(t) = 0
38153
# Currents
39154
ICaMax(t)
40155
ICaK(t)
41156
ICaL(t)
157+
Jrel(t)
42158
end
43159

44-
v = vm / mV
45160
ω, f, g = ω_LCC, f_LCC, g_LCC
46161
α = α_lcc
47162
β = β_lcc
@@ -64,8 +179,8 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
64179
vc4ca4 = 16γ * c4_lcc - ω / 16 * cca4_lcc
65180

66181
eqs = [
67-
α_lcc ~ 0.4kHz * exp((v + 2mV) * inv(10mV)),
68-
β_lcc ~ 0.05kHz * exp(-(v + 2mV) * inv(13mV)),
182+
α_lcc ~ 0.4kHz * exp((vm + 2mV) * inv(10mV)),
183+
β_lcc ~ 0.05kHz * exp(-(vm + 2mV) * inv(13mV)),
69184
1 ~ c0_lcc + c1_lcc + c2_lcc + c3_lcc + c4_lcc + o_lcc + cca0_lcc + cca1_lcc + cca2_lcc + cca3_lcc + cca4_lcc,
70185
# D(c0_lcc) ~ -vc0c1 - vc0ca0,
71186
D(c1_lcc) ~ vc0c1 - vc1c2 - vc1ca1,
@@ -78,8 +193,8 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
78193
D(cca2_lcc) ~ vc2ca2 + vca1ca2 - vca2ca3,
79194
D(cca3_lcc) ~ vc3ca3 + vca2ca3 - vca3ca4,
80195
D(cca4_lcc) ~ vca3ca4 + vc4ca4,
81-
y_inf ~ expit(-(v + 55mV) * inv(7.5mV)) + 0.5 * expit((v - 21mV) * inv(6mV)),
82-
τ_yca ~ 20ms + 600ms * expit(-(v + 30mV) * inv(9.5mV)),
196+
y_inf ~ expit(-(vm + 55mV) * inv(7.5mV)) + 0.5 * expit((vm - 21mV) * inv(6mV)),
197+
τ_yca ~ 20ms + 600ms * expit(-(vm + 30mV) * inv(9.5mV)),
83198
D(x_yca) ~ (y_inf - x_yca) / τ_yca,
84199
ICaMax ~ ghk(P_CA_LCC, vm, 1μM, 0.341 * ca_o, 2) ,
85200
ICaL ~ 6 * x_yca * o_lcc * ICaMax,

src/ck.jl

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
"Creatine kinase (CK)"
2-
function get_ck_sys(; atp_i, adp_i, name=:cksys)
1+
function get_ck_eqs(; atp_i, adp_i)
32
@parameters begin
43
KCK_IN = 0.14Hz # Rate constant of creatine kinase (cytosolic)
54
KCK_MT = 1.33E-3Hz # Rate constant of creatine kinase (juxta-mitochondrial)
@@ -9,7 +8,6 @@ function get_ck_sys(; atp_i, adp_i, name=:cksys)
98
ΣCR = 25mM # Pool of creatine and creatine phosphate
109
ΣA_ic = 8mM # Pool of cytosolic ATP + ADP
1110
end
12-
1311
@variables begin
1412
cr_ic(t) ## Conserved
1513
crp_ic(t) = 5.1291mM
@@ -21,7 +19,8 @@ function get_ck_sys(; atp_i, adp_i, name=:cksys)
2119
vCK_cyto(t)
2220
vTR_crp(t)
2321
end
24-
eqs = [
22+
23+
eqs_ck = [
2524
ΣCR ~ cr_ic + crp_ic,
2625
ΣCR ~ cr_i + crp_i,
2726
ΣA_ic ~ adp_ic + atp_ic,
@@ -32,5 +31,12 @@ function get_ck_sys(; atp_i, adp_i, name=:cksys)
3231
D(crp_i) ~ vCK_mito - vTR_crp,
3332
D(crp_ic) ~ vTR_crp + vCK_cyto
3433
]
35-
return System(eqs, t; name)
34+
35+
return (; eqs_ck, vCK_mito, vCK_cyto, vTR_crp)
36+
end
37+
38+
"Creatine kinase (CK)"
39+
function get_ck_sys(; atp_i, adp_i, name=:cksys)
40+
@unpack eqs_ck = get_ck_eqs(; atp_i, adp_i)
41+
return System(eqs_ck, t; name)
3642
end

src/force.jl

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
"Sarcomere force generation and ATP consumption"
2-
function get_force_sys(; atp_i, adp_i, ca_i, name=:forcesys)
1+
function get_force_eqs(; atp_i, adp_i, ca_i)
32
@parameters begin
43
ΣLTRPN = 70μM # Total pool of low affinity troponin ca binding sites
54
ΣHTRPN = 140μM # Total pool of high affinity troponin ca binding sites
@@ -36,7 +35,7 @@ function get_force_sys(; atp_i, adp_i, ca_i, name=:forcesys)
3635
G23_SL_AM = Φ_AM * G23_AM
3736
G01_OFF_AM = Φ_AM * G_OFF
3837
N_TROP = 3.5 * SL - 2.0 ## Hill coefficient ~ 5.525
39-
K_CA_TRPN = K_M_LTRPN / K_P_LTRPN # Activation factor for calcium of low affinity troponin sites
38+
K_CA_TRPN = K_M_LTRPN / K_P_LTRPN ## Activation factor for calcium of low affinity troponin sites
4039
K½_TRPN = hil((1.7 - 0.8 * (SL - 1.7) / 0.6), K_CA_TRPN)
4140
end
4241

@@ -58,13 +57,16 @@ function get_force_sys(; atp_i, adp_i, ca_i, name=:forcesys)
5857
end
5958

6059
k_np_trop = K_PN_TROP * NaNMath.pow(ltr_ca / (ΣLTRPN * K½_TRPN), N_TROP)
61-
v01 = F01_AM * x_p0 - G01_SL_AM * x_p1
62-
v12 = F12_AM * x_p1 - G12_SL_AM * x_p2
63-
v23 = F23_AM * x_p2 - G23_SL_AM * x_p3
64-
v04 = K_PN_TROP * x_p0 - k_np_trop * x_n0
65-
v15 = K_PN_TROP * x_p1 - k_np_trop * x_n1
66-
v54 = G01_OFF_AM * x_n1
6760

61+
rs = Dict()
62+
add_rate!(rs, F01_AM, x_p0, G01_SL_AM, x_p1)
63+
add_rate!(rs, F12_AM, x_p1, G12_SL_AM, x_p2)
64+
add_rate!(rs, F23_AM, x_p2, G23_SL_AM, x_p3)
65+
add_rate!(rs, K_PN_TROP, x_p0, k_np_trop, x_n0)
66+
add_rate!(rs, K_PN_TROP, x_p1, k_np_trop, x_n1)
67+
add_rate!(rs, G01_OFF_AM, x_n1, 0, x_n0)
68+
69+
des = [D(x) ~ rs[x] for x in (x_p0, x_p1, x_p2, x_p3, x_n1)]
6870
eqs = [
6971
force ~ ζ_AM * (x_p1 + x_n1 + 2 * x_p2 + 3 * x_p3) * iDEN_FORCE,
7072
force_normal ~ (x_p1 + x_p2 + x_p3 + x_n1) * iDEN_FORCE_N,
@@ -75,11 +77,13 @@ function get_force_sys(; atp_i, adp_i, ca_i, name=:forcesys)
7577
D(htr_ca) ~ K_P_HTRPN * ca_i * htr_free - K_M_HTRPN * htr_ca,
7678
Jtrpn ~ D(ltr_ca) + D(htr_ca),
7779
1 ~ x_p0 + x_p1 + x_p2 + x_p3 + x_n0 + x_n1,
78-
D(x_p0) ~ -v01 - v04,
79-
D(x_p1) ~ v01 - v12 - v15,
80-
D(x_p2) ~ v12 - v23,
81-
D(x_p3) ~ v23,
82-
D(x_n1) ~ v15 - v54,
8380
]
84-
return System(eqs, t; name)
81+
eqs_force = [des; eqs]
82+
return (; eqs_force, vAm, Jtrpn)
83+
end
84+
85+
"Sarcomere force generation and ATP consumption"
86+
function get_force_sys(; atp_i, adp_i, ca_i, name=:forcesys)
87+
@unpack eqs_force = get_force_eqs(; atp_i, adp_i, ca_i)
88+
return System(eqs_force, t; name)
8589
end

0 commit comments

Comments
 (0)