C C There are a total of 40 entries in the algebraic variable array. C There are a total of 7 entries in each of the rate and state variable arrays. C There are a total of 38 entries in the constant variable array. C C C VOI is time in component environment (second). C STATES(1) is V in component membrane (millivolt). C CONSTS(1) is V_T in component membrane (millivolt). C CONSTS(2) is V_S in component membrane (millivolt). C CONSTS(3) is C_m in component membrane (mF_per_cm_squared). C CONSTS(4) is F in component membrane (coulomb_per_mole). C CONSTS(5) is R in component membrane (joule_per_mole_per_kelvin). C CONSTS(6) is T in component membrane (kelvin). C ALGBRC(17) is I_leak in component I_leak (milliampere_per_cm_squared). C ALGBRC(22) is I_Na in component I_Na (milliampere_per_cm_squared). C ALGBRC(23) is I_KD in component I_KD (milliampere_per_cm_squared). C ALGBRC(24) is I_KM in component I_KM (milliampere_per_cm_squared). C ALGBRC(26) is I_CaL in component I_CaL (milliampere_per_cm_squared). C ALGBRC(40) is I_h in component I_h (milliampere_per_cm_squared). C ALGBRC(12) is I_app in component stimulus_protocol (milliampere_per_cm_squared). C CONSTS(7) is i_stimStart in component stimulus_protocol (second). C CONSTS(8) is i_stimEnd in component stimulus_protocol (second). C CONSTS(9) is i_stimAmplitude in component stimulus_protocol (milliampere_per_cm_squared). C ALGBRC(6) is tau in component stimulus_protocol (second). C CONSTS(10) is period in component stimulus_protocol (second). C CONSTS(11) is g_leak in component I_leak (millisiemens_per_cm_squared). C CONSTS(12) is E_leak in component I_leak (millivolt). C CONSTS(13) is g_Na in component I_Na (millisiemens_per_cm_squared). C CONSTS(14) is E_Na in component I_Na (millivolt). C STATES(2) is m in component Na_m_gate (dimensionless). C STATES(3) is h in component Na_h_gate (dimensionless). C ALGBRC(1) is alpha in component Na_m_gate (per_second). C ALGBRC(7) is beta in component Na_m_gate (per_second). C ALGBRC(13) is tau_m in component Na_m_gate (second). C ALGBRC(18) is m_inf in component Na_m_gate (dimensionless). C ALGBRC(2) is alpha_h in component Na_h_gate (per_second). C ALGBRC(8) is beta_h in component Na_h_gate (per_second). C ALGBRC(19) is h_inf in component Na_h_gate (dimensionless). C ALGBRC(14) is tau_h in component Na_h_gate (second). C CONSTS(15) is g_KD in component I_KD (millisiemens_per_cm_squared). C CONSTS(16) is E_K in component I_KD (millivolt). C STATES(4) is n in component KD_n_gate (dimensionless). C ALGBRC(3) is alpha_n in component KD_n_gate (per_second). C ALGBRC(9) is beta_n in component KD_n_gate (per_second). C ALGBRC(15) is tau_n in component KD_n_gate (second). C ALGBRC(20) is n_inf in component KD_n_gate (dimensionless). C CONSTS(17) is g_KM in component I_KM (millisiemens_per_cm_squared). C STATES(5) is p in component KM_p_gate (dimensionless). C ALGBRC(4) is p_inf in component KM_p_gate (dimensionless). C ALGBRC(10) is tau_p in component KM_p_gate (second). C CONSTS(18) is tau_max in component KM_p_gate (second). C CONSTS(19) is P_Ca in component I_CaL (cm_per_second). C ALGBRC(25) is G in component G_nonlin (coulomb_per_cm_cubed). C STATES(6) is q in component CaL_q_gate (dimensionless). C ALGBRC(5) is alpha_q in component CaL_q_gate (per_second). C ALGBRC(11) is beta_q in component CaL_q_gate (per_second). C ALGBRC(16) is tau_q in component CaL_q_gate (second). C ALGBRC(21) is q_inf in component CaL_q_gate (dimensionless). C CONSTS(20) is Z in component G_nonlin (dimensionless). C CONSTS(21) is Ca_o in component G_nonlin (mM). C STATES(7) is Ca_i in component dCa_i_dt (mM). C CONSTS(22) is Ca_inf in component dCa_i_dt (mM). C CONSTS(23) is tau_r in component dCa_i_dt (second). C CONSTS(24) is d in component dCa_i_dt (centimeter). C ALGBRC(27) is drive_channel in component dCa_i_dt (mM_per_second). C CONSTS(25) is k in component dCa_i_dt (fixer). C ALGBRC(39) is m in component I_h (dimensionless). C CONSTS(26) is E_h in component I_h (millivolt). C CONSTS(27) is g_hbar in component I_h (millisiemens_per_cm_squared). C CONSTS(28) is cac in component I_h (mM). C CONSTS(29) is V_S in component I_h (millivolt). C ALGBRC(36) is o_1 in component kinetic (dimensionless). C ALGBRC(37) is o_2 in component kinetic (dimensionless). C CONSTS(30) is g_inc in component I_h (dimensionless). C ALGBRC(33) is p_0 in component kinetic (dimensionless). C ALGBRC(34) is p_1 in component kinetic (dimensionless). C ALGBRC(38) is c_1 in component kinetic (dimensionless). C ALGBRC(30) is alpha in component rate_constants (dimensionless). C ALGBRC(31) is beta in component rate_constants (dimensionless). C ALGBRC(32) is k_1Ca in component rate_constants (per_second). C CONSTS(31) is k_2 in component rate_constants (per_second). C ALGBRC(35) is k_3p in component rate_constants (per_second). C CONSTS(32) is k_4 in component rate_constants (per_second). C ALGBRC(28) is h_inf in component rate_constants (second). C ALGBRC(29) is tau_s in component rate_constants (second). C CONSTS(33) is P_c in component rate_constants (dimensionless). C CONSTS(34) is n_Ca in component rate_constants (dimensionless). C CONSTS(35) is n_exp in component rate_constants (dimensionless). C CONSTS(36) is p_C in component rate_constants (dimensionless). C CONSTS(37) is Ca_c in component rate_constants (mM). C CONSTS(38) is tau_m in component rate_constants (second). C RATES(1) is d/dt V in component membrane (millivolt). C RATES(2) is d/dt m in component Na_m_gate (dimensionless). C RATES(3) is d/dt h in component Na_h_gate (dimensionless). C RATES(4) is d/dt n in component KD_n_gate (dimensionless). C RATES(5) is d/dt p in component KM_p_gate (dimensionless). C RATES(6) is d/dt q in component CaL_q_gate (dimensionless). C RATES(7) is d/dt Ca_i in component dCa_i_dt (mM). C SUBROUTINE initConsts(CONSTS, RATES, STATES) REAL CONSTS(*), RATES(*), STATES(*) STATES(1) = -70 CONSTS(1) = -55 CONSTS(2) = 0 CONSTS(3) = 1e-3 CONSTS(4) = 96489 CONSTS(5) = 8.314 CONSTS(6) = 296.65 CONSTS(7) = 5 CONSTS(8) = 9 CONSTS(9) = -0.3 CONSTS(10) = 9 CONSTS(11) = 1 CONSTS(12) = -70 CONSTS(13) = 70 CONSTS(14) = 50 STATES(2) = 0 STATES(3) = 0 CONSTS(15) = 7 CONSTS(16) = -95 STATES(4) = 0 CONSTS(17) = 0.004 STATES(5) = 0 CONSTS(18) = 4 CONSTS(19) = 2.76e-4 STATES(6) = 0.00247262 CONSTS(20) = 2 CONSTS(21) = 2 STATES(7) = 100e-6 CONSTS(22) = 100e-6 CONSTS(23) = 17e-3 CONSTS(24) = 1e-4 CONSTS(25) = 0.1 CONSTS(26) = -20 CONSTS(27) = 0.02 CONSTS(28) = 0.006 CONSTS(29) = 0 CONSTS(30) = 2 CONSTS(31) = 0.1 CONSTS(32) = 1 CONSTS(33) = 0.01 CONSTS(34) = 4 CONSTS(35) = 1 CONSTS(36) = 0.01 CONSTS(37) = 0.006 CONSTS(38) = 20e-3 RETURN END SUBROUTINE computeRates(VOI, CONSTS, RATES, STATES, ALGBRC) REAL VOI, CONSTS(*), RATES(*), STATES(*), ALGBRC(*) ALGBRC(4) = TERNRY(- (STATES(1)+35.0000)/10.0000.LT.25.0000.AND.- (STATES(1)+35.0000)/10.0000.GT.- 25.0000, 1.00000/(1.00000+EXP(- (STATES(1)+35.0000)/10.0000)), 1.00000) ALGBRC(10) = TERNRY((STATES(1)+35.0000)/20.0000.LT.25.0000.AND.(STATES(1)+35.0000)/20.0000.GT.- 25.0000, CONSTS(18)/( 3.30000*EXP((STATES(1)+35.0000)/20.0000)+EXP(- (STATES(1)+35.0000)/20.0000)), 1.00000) RATES(5) = (ALGBRC(4) - STATES(5))/ALGBRC(10) ALGBRC(1) = TERNRY(ABS(((13.0000+CONSTS(1)) - STATES(1))/4.00000).LT.1.00000e-06, 0.320000*4.00000*(1.00000 - ((13.0000+CONSTS(1)) - STATES(1))/( 2.00000*4.00000)), ( 0.320000*((13.0000+CONSTS(1)) - STATES(1)))/(EXP(((13.0000+CONSTS(1)) - STATES(1))/4.00000) - 1.00000)) ALGBRC(7) = TERNRY(ABS(- ((STATES(1) - CONSTS(1)) - 40.0000)/5.00000).LT.1.00000e-06, - 0.280000*5.00000*(1.00000 - - ((STATES(1) - CONSTS(1)) - 40.0000)/( 2.00000*5.00000)), ( - 0.280000*((STATES(1) - CONSTS(1)) - 40.0000))/(EXP(- ((STATES(1) - CONSTS(1)) - 40.0000)/5.00000) - 1.00000)) ALGBRC(13) = 1.00000/(ALGBRC(1)+ALGBRC(7)) ALGBRC(18) = ALGBRC(1)/(ALGBRC(1)+ALGBRC(7)) RATES(2) = (ALGBRC(18) - STATES(2))/ALGBRC(13) ALGBRC(2) = 0.128000*EXP(((17.0000+CONSTS(1)+CONSTS(2)) - STATES(1))/18.0000) ALGBRC(8) = 4.00000/(1.00000+EXP(((40.0000+CONSTS(2)+CONSTS(1)) - STATES(1))/5.00000)) ALGBRC(19) = ALGBRC(2)/(ALGBRC(2)+ALGBRC(8)) ALGBRC(14) = 1.00000/(ALGBRC(2)+ALGBRC(8)) RATES(3) = (ALGBRC(19) - STATES(3))/ALGBRC(14) ALGBRC(3) = TERNRY(ABS(((STATES(1) - CONSTS(1)) - 15.0000)/5.00000).LT.1.00000e-06, - 0.0320000*5.00000*(1.00000 - ((STATES(1) - CONSTS(1)) - 15.0000)/( 2.00000*5.00000)), ( - 0.0320000*((STATES(1) - CONSTS(1)) - 15.0000))/(EXP(((STATES(1) - CONSTS(1)) - 15.0000)/5.00000) - 1.00000)) ALGBRC(9) = TERNRY(ABS(- ((STATES(1) - CONSTS(1)) - 10.0000)/40.0000).LT.1.00000e-06, 0.500000*40.0000*(1.00000+((STATES(1) - CONSTS(1)) - 10.0000)/( 2.00000*40.0000)), ( 0.500000*- ((STATES(1) - CONSTS(1)) - 10.0000))/(EXP(- ((STATES(1) - CONSTS(1)) - 10.0000)/40.0000) - 1.00000)) ALGBRC(15) = 1.00000/(ALGBRC(3)+ALGBRC(9)) ALGBRC(20) = ALGBRC(3)/(ALGBRC(3)+ALGBRC(9)) RATES(4) = (ALGBRC(20) - STATES(4))/ALGBRC(15) ALGBRC(5) = 6.32000/(1.00000+EXP(- (STATES(1) - 5.00000)/13.8900)) ALGBRC(11) = TERNRY(ABS((1.31000 - STATES(1))/5.36000).LT.1.00000e-06, 0.0200000*(5.36000+(1.31000 - STATES(1))/2.00000), ( 0.0200000*(1.31000 - STATES(1)))/(1.00000 - EXP((STATES(1) - 1.31000)/5.36000))) ALGBRC(16) = 1.00000/(ALGBRC(5)+ALGBRC(11)) ALGBRC(21) = 1.00000/(1.00000+EXP((STATES(1)+10.0000)/- 10.0000)) RATES(6) = (ALGBRC(21) - STATES(6))/ALGBRC(16) ALGBRC(25) = ( (( CONSTS(20) ** 2.00000*CONSTS(4) ** 2.00000*0.00100000*STATES(1))/( CONSTS(5)*CONSTS(6)))*1.00000e-06*(STATES(7) - CONSTS(21)*EXP(( CONSTS(20)*CONSTS(4)*0.00100000*STATES(1))/( CONSTS(5)*CONSTS(6)))))/(1.00000 - EXP(( 0.00100000*CONSTS(20)*CONSTS(4)*STATES(1))/( CONSTS(5)*CONSTS(6)))) ALGBRC(26) = 1000.00*CONSTS(19)*STATES(6) ** 2.00000*ALGBRC(25) ALGBRC(27) = ( CONSTS(25)*ALGBRC(26))/( 2.00000*CONSTS(4)*CONSTS(24)) RATES(7) = TERNRY(ALGBRC(27).LE.0.00000, (CONSTS(22) - STATES(7))/CONSTS(23), ALGBRC(27)+(CONSTS(22) - STATES(7))/CONSTS(23)) ALGBRC(17) = 1000.00*CONSTS(11)*(STATES(1) - CONSTS(12)) ALGBRC(22) = 1000.00*CONSTS(13)*STATES(2) ** 3.00000*STATES(3)*(STATES(1) - CONSTS(14)) ALGBRC(23) = 1000.00*CONSTS(15)*STATES(4) ** 4.00000*(STATES(1) - CONSTS(16)) ALGBRC(24) = 1000.00*CONSTS(17)*STATES(5)*(STATES(1) - CONSTS(16)) ALGBRC(28) = 1.00000/(1.00000+EXP(((STATES(1)+75.0000) - CONSTS(29))/5.50000)) ALGBRC(29) = CONSTS(38)+1000.00/(EXP(((STATES(1)+71.5500) - CONSTS(29))/14.2000)+EXP(- ((STATES(1)+89.0000) - CONSTS(29))/11.6000)) ALGBRC(30) = ALGBRC(28)/ALGBRC(29) ALGBRC(31) = (1.00000 - ALGBRC(28))/ALGBRC(29) ALGBRC(32) = CONSTS(31)*STATES(7)/CONSTS(37) ** CONSTS(34) CALL minimize(minfunc_0, CONSTS, VARIABLES, ) ALGBRC(35) = CONSTS(32)*ALGBRC(34)/CONSTS(36) ** CONSTS(35) CALL minimize(minfunc_1, CONSTS, VARIABLES, ) ALGBRC(39) = ALGBRC(36)+CONSTS(30)+ALGBRC(37) ALGBRC(40) = 1000.00*CONSTS(27)*ALGBRC(39)*(STATES(1) - CONSTS(26)) ALGBRC(6) = VOI - CONSTS(10)*INT(VOI/CONSTS(10)) ALGBRC(12) = TERNRY(ALGBRC(6).GE.CONSTS(7).AND.ALGBRC(6).LE.CONSTS(8), CONSTS(9), 0.00000) RATES(1) = ( 0.00100000*((((((ALGBRC(12)+- ALGBRC(17)) - ALGBRC(22)) - ALGBRC(23)) - ALGBRC(24)) - ALGBRC(26)) - ALGBRC(40)))/CONSTS(3) RETURN END SUBROUTINE computeVariables(VOI, CONSTS, RATES, STATES, ALGBRC) REAL VOI, CONSTS(*), RATES(*), STATES(*), ALGBRC(*) ALGBRC(4) = TERNRY(- (STATES(1)+35.0000)/10.0000.LT.25.0000.AND.- (STATES(1)+35.0000)/10.0000.GT.- 25.0000, 1.00000/(1.00000+EXP(- (STATES(1)+35.0000)/10.0000)), 1.00000) ALGBRC(10) = TERNRY((STATES(1)+35.0000)/20.0000.LT.25.0000.AND.(STATES(1)+35.0000)/20.0000.GT.- 25.0000, CONSTS(18)/( 3.30000*EXP((STATES(1)+35.0000)/20.0000)+EXP(- (STATES(1)+35.0000)/20.0000)), 1.00000) ALGBRC(1) = TERNRY(ABS(((13.0000+CONSTS(1)) - STATES(1))/4.00000).LT.1.00000e-06, 0.320000*4.00000*(1.00000 - ((13.0000+CONSTS(1)) - STATES(1))/( 2.00000*4.00000)), ( 0.320000*((13.0000+CONSTS(1)) - STATES(1)))/(EXP(((13.0000+CONSTS(1)) - STATES(1))/4.00000) - 1.00000)) ALGBRC(7) = TERNRY(ABS(- ((STATES(1) - CONSTS(1)) - 40.0000)/5.00000).LT.1.00000e-06, - 0.280000*5.00000*(1.00000 - - ((STATES(1) - CONSTS(1)) - 40.0000)/( 2.00000*5.00000)), ( - 0.280000*((STATES(1) - CONSTS(1)) - 40.0000))/(EXP(- ((STATES(1) - CONSTS(1)) - 40.0000)/5.00000) - 1.00000)) ALGBRC(13) = 1.00000/(ALGBRC(1)+ALGBRC(7)) ALGBRC(18) = ALGBRC(1)/(ALGBRC(1)+ALGBRC(7)) ALGBRC(2) = 0.128000*EXP(((17.0000+CONSTS(1)+CONSTS(2)) - STATES(1))/18.0000) ALGBRC(8) = 4.00000/(1.00000+EXP(((40.0000+CONSTS(2)+CONSTS(1)) - STATES(1))/5.00000)) ALGBRC(19) = ALGBRC(2)/(ALGBRC(2)+ALGBRC(8)) ALGBRC(14) = 1.00000/(ALGBRC(2)+ALGBRC(8)) ALGBRC(3) = TERNRY(ABS(((STATES(1) - CONSTS(1)) - 15.0000)/5.00000).LT.1.00000e-06, - 0.0320000*5.00000*(1.00000 - ((STATES(1) - CONSTS(1)) - 15.0000)/( 2.00000*5.00000)), ( - 0.0320000*((STATES(1) - CONSTS(1)) - 15.0000))/(EXP(((STATES(1) - CONSTS(1)) - 15.0000)/5.00000) - 1.00000)) ALGBRC(9) = TERNRY(ABS(- ((STATES(1) - CONSTS(1)) - 10.0000)/40.0000).LT.1.00000e-06, 0.500000*40.0000*(1.00000+((STATES(1) - CONSTS(1)) - 10.0000)/( 2.00000*40.0000)), ( 0.500000*- ((STATES(1) - CONSTS(1)) - 10.0000))/(EXP(- ((STATES(1) - CONSTS(1)) - 10.0000)/40.0000) - 1.00000)) ALGBRC(15) = 1.00000/(ALGBRC(3)+ALGBRC(9)) ALGBRC(20) = ALGBRC(3)/(ALGBRC(3)+ALGBRC(9)) ALGBRC(5) = 6.32000/(1.00000+EXP(- (STATES(1) - 5.00000)/13.8900)) ALGBRC(11) = TERNRY(ABS((1.31000 - STATES(1))/5.36000).LT.1.00000e-06, 0.0200000*(5.36000+(1.31000 - STATES(1))/2.00000), ( 0.0200000*(1.31000 - STATES(1)))/(1.00000 - EXP((STATES(1) - 1.31000)/5.36000))) ALGBRC(16) = 1.00000/(ALGBRC(5)+ALGBRC(11)) ALGBRC(21) = 1.00000/(1.00000+EXP((STATES(1)+10.0000)/- 10.0000)) ALGBRC(25) = ( (( CONSTS(20) ** 2.00000*CONSTS(4) ** 2.00000*0.00100000*STATES(1))/( CONSTS(5)*CONSTS(6)))*1.00000e-06*(STATES(7) - CONSTS(21)*EXP(( CONSTS(20)*CONSTS(4)*0.00100000*STATES(1))/( CONSTS(5)*CONSTS(6)))))/(1.00000 - EXP(( 0.00100000*CONSTS(20)*CONSTS(4)*STATES(1))/( CONSTS(5)*CONSTS(6)))) ALGBRC(26) = 1000.00*CONSTS(19)*STATES(6) ** 2.00000*ALGBRC(25) ALGBRC(27) = ( CONSTS(25)*ALGBRC(26))/( 2.00000*CONSTS(4)*CONSTS(24)) ALGBRC(17) = 1000.00*CONSTS(11)*(STATES(1) - CONSTS(12)) ALGBRC(22) = 1000.00*CONSTS(13)*STATES(2) ** 3.00000*STATES(3)*(STATES(1) - CONSTS(14)) ALGBRC(23) = 1000.00*CONSTS(15)*STATES(4) ** 4.00000*(STATES(1) - CONSTS(16)) ALGBRC(24) = 1000.00*CONSTS(17)*STATES(5)*(STATES(1) - CONSTS(16)) ALGBRC(28) = 1.00000/(1.00000+EXP(((STATES(1)+75.0000) - CONSTS(29))/5.50000)) ALGBRC(29) = CONSTS(38)+1000.00/(EXP(((STATES(1)+71.5500) - CONSTS(29))/14.2000)+EXP(- ((STATES(1)+89.0000) - CONSTS(29))/11.6000)) ALGBRC(30) = ALGBRC(28)/ALGBRC(29) ALGBRC(31) = (1.00000 - ALGBRC(28))/ALGBRC(29) ALGBRC(32) = CONSTS(31)*STATES(7)/CONSTS(37) ** CONSTS(34) ALGBRC(35) = CONSTS(32)*ALGBRC(34)/CONSTS(36) ** CONSTS(35) ALGBRC(39) = ALGBRC(36)+CONSTS(30)+ALGBRC(37) ALGBRC(40) = 1000.00*CONSTS(27)*ALGBRC(39)*(STATES(1) - CONSTS(26)) ALGBRC(6) = VOI - CONSTS(10)*INT(VOI/CONSTS(10)) ALGBRC(12) = TERNRY(ALGBRC(6).GE.CONSTS(7).AND.ALGBRC(6).LE.CONSTS(8), CONSTS(9), 0.00000) RETURN END REAL FUNCTION minfunc_0(CONSTS, VARIABLES) REAL CONSTS(*), VARIABLES(*) minfunc_0[1] = abs(ALGBRC(33) - ( ALGBRC(34)*CONSTS(31))/ALGBRC(32)) minfunc_0[2] = abs(ALGBRC(34) - (1.00000 - ALGBRC(33))) RETURN END REAL FUNCTION minfunc_1(CONSTS, VARIABLES) REAL CONSTS(*), VARIABLES(*) minfunc_1[1] = abs(ALGBRC(38) - (ALGBRC(31)/ALGBRC(30))*ALGBRC(36)) minfunc_1[2] = abs(ALGBRC(36) - (CONSTS(32)/ALGBRC(35))*ALGBRC(37)) minfunc_1[3] = abs(ALGBRC(37) - ((1.00000 - ALGBRC(38)) - ALGBRC(36))) RETURN END REAL FUNCTION TERNRY(TEST, VALA, VALB) LOGICAL TEST REAL VALA, VALB IF (TEST) THEN TERNRY = VALA ELSE TERNRY = VALB ENDIF RETURN END