/* * Ionic mechanism of electrical alternans * * Model Status * * This model is known to run in OpenCell and COR to recreate the * published results. The units have been checked and they are * consistent. * * Model Structure * * ABSTRACT: Although alternans of action potential duration (APD) * is a robust feature of the rapidly paced canine ventricle, currently * available ionic models of cardiac myocytes do not recreate this * phenomenon. To address this problem, we developed a new ionic * model using formulations of currents based on previous models * and recent experimental data. Compared with existing models, * the inward rectifier K(+) current (I(K1)) was decreased at depolarized * potentials, the maximum conductance and rectification of the * rapid component of the delayed rectifier K(+) current (I(Kr)) * were increased, and I(Kr) activation kinetics were slowed. The * slow component of the delayed rectifier K(+) current (I(Ks)) * was increased in magnitude and activation shifted to less positive * voltages, and the L-type Ca(2+) current (I(Ca)) was modified * to produce a smaller, more rapidly inactivating current. Finally, * a simplified form of intracellular calcium dynamics was adopted. * In this model, APD alternans occurred at cycle lengths = 150-210 * ms, with a maximum alternans amplitude of 39 ms. APD alternans * was suppressed by decreasing I(Ca) magnitude or calcium-induced * inactivation and by increasing the magnitude of I(K1), I(Kr), * or I(Ks). These results establish an ionic basis for APD alternans, * which should facilitate the development of pharmacological approaches * to eliminating alternans. * * The original paper reference is cited below: * * Ionic mechanism of electrical alternans, Jeffrey J. Fox, Jennifer * L. McHarg, and Robert F. Gilmour Jr, 2002, American Journal * of Physiology: Heart and Circulatory Physiology, 282, H516-H530. * PubMed ID: 11788399 * * cell diagram * * [[Image file: fox_2001.png]] * * A schematic diagram describing the current flows across the * cell membrane and the calcium fluxes between the cytoplasm and * the sarcoplasmic reticulum that are captured in the Fox et al. * canine ventricular cell model. */ import nsrunit; unit conversion on; // unit millisecond predefined unit per_millisecond=1E3 second^(-1); // unit centimeter predefined // unit millivolt predefined unit per_millivolt=1E3 kilogram^(-1)*meter^(-2)*second^3*ampere^1; unit per_millivolt_millisecond=1E6 kilogram^(-1)*meter^(-2)*second^2*ampere^1; unit milliS_per_microF=1E3 second^(-1); unit microF_per_cm2=.01 kilogram^(-1)*meter^(-4)*second^4*ampere^2; unit microA_per_microF=1 kilogram^1*meter^2*second^(-4)*ampere^(-1); // unit millimolar predefined // unit micromolar predefined unit uM_mM=.001 dimensionless; unit nM_mM=1E-6 dimensionless; unit micromolar_per_millisecond=1 meter^(-3)*second^(-1)*mole^1; unit joule_per_mole_kelvin=1 kilogram^1*meter^2*second^(-2)*kelvin^(-1)*mole^(-1); unit coulomb_per_millimole=1E3 second^1*ampere^1*mole^(-1); unit cm_per_millisecond=10 meter^1*second^(-1); unit cm2=1E-4 meter^2; // unit microlitre predefined math main { realDomain time millisecond; time.min=0; extern time.max; extern time.delta; real V(time) millivolt; when(time=time.min) V=-94.7; real R joule_per_mole_kelvin; R=8.314; real T kelvin; T=310; real F coulomb_per_millimole; F=96.5; real i_Na(time) microA_per_microF; real i_Ca(time) microA_per_microF; real i_CaK(time) microA_per_microF; real i_Kr(time) microA_per_microF; real i_Ks(time) microA_per_microF; real i_to(time) microA_per_microF; real i_K1(time) microA_per_microF; real i_Kp(time) microA_per_microF; real i_NaCa(time) microA_per_microF; real i_NaK(time) microA_per_microF; real i_p_Ca(time) microA_per_microF; real i_Ca_b(time) microA_per_microF; real i_Na_b(time) microA_per_microF; real i_Stim(time) microA_per_microF; real stim_start millisecond; stim_start=50; real stim_end millisecond; stim_end=9000; real stim_period millisecond; stim_period=1000; real stim_duration millisecond; stim_duration=1; real stim_amplitude microA_per_microF; stim_amplitude=-80; real E_Na millivolt; real g_Na milliS_per_microF; g_Na=12.8; real Na_o millimolar; Na_o=138; real Na_i millimolar; Na_i=10; real m(time) dimensionless; when(time=time.min) m=0.00024676; real h(time) dimensionless; when(time=time.min) h=0.99869; real j(time) dimensionless; when(time=time.min) j=0.99887; real alpha_m(time) per_millisecond; real beta_m(time) per_millisecond; real fast_sodium_current_m_gate.E0_m(time) millivolt; real alpha_h(time) per_millisecond; real beta_h(time) per_millisecond; real shift_h millivolt; shift_h=0; real alpha_j(time) per_millisecond; real beta_j(time) per_millisecond; real shift_j millivolt; shift_j=0; real g_K1 milliS_per_microF; g_K1=2.8; real K_mK1 millimolar; K_mK1=13; real E_K millivolt; real K_o millimolar; K_o=4; real K1_infinity(time) dimensionless; real g_Kr milliS_per_microF; g_Kr=0.0136; real R_V(time) dimensionless; real K_i millimolar; K_i=149.4; real X_kr(time) dimensionless; when(time=time.min) X_kr=0.229; real X_kr_inf(time) dimensionless; real tau_X_kr(time) millisecond; real g_Ks milliS_per_microF; g_Ks=0.0245; real E_Ks millivolt; real X_ks(time) dimensionless; when(time=time.min) X_ks=0.0001; real tau_X_ks(time) millisecond; real X_ks_infinity(time) dimensionless; real g_to milliS_per_microF; g_to=0.23815; real X_to(time) dimensionless; when(time=time.min) X_to=0.00003742; real Y_to(time) dimensionless; when(time=time.min) Y_to=1; real alpha_X_to(time) per_millisecond; real beta_X_to(time) per_millisecond; real alpha_Y_to(time) per_millisecond; real beta_Y_to(time) per_millisecond; real g_Kp milliS_per_microF; g_Kp=0.002216; real Kp_V(time) dimensionless; real i_NaK_max microA_per_microF; i_NaK_max=0.693; real f_NaK(time) dimensionless; real K_mNai millimolar; K_mNai=10; real K_mKo millimolar; K_mKo=1.5; real sigma dimensionless; real K_mCa micromolar; K_mCa=1380; real K_mNa millimolar; K_mNa=87.5; real K_NaCa microA_per_microF; K_NaCa=1500; real K_sat dimensionless; K_sat=0.2; real eta dimensionless; eta=0.35; real Ca_i(time) micromolar; when(time=time.min) Ca_i=0.0472; real Ca_o micromolar; Ca_o=2000; real K_mpCa micromolar; K_mpCa=0.05; real i_pCa_max microA_per_microF; i_pCa_max=0.05; real g_Cab milliS_per_microF; g_Cab=0.0003842; real E_Ca(time) millivolt; real g_Nab milliS_per_microF; g_Nab=0.0031; real P_Ca cm_per_millisecond; P_Ca=0.0000226; real P_CaK cm_per_millisecond; P_CaK=0.000000579; real i_Ca_half microA_per_microF; i_Ca_half=-0.265; real i_Ca_max(time) microA_per_microF; real C_sc microF_per_cm2; C_sc=1; real f(time) dimensionless; when(time=time.min) f=0.983; real d(time) dimensionless; when(time=time.min) d=0.0001; real f_Ca(time) dimensionless; when(time=time.min) f_Ca=0.942; real f_infinity(time) dimensionless; real tau_f(time) millisecond; real d_infinity(time) dimensionless; real tau_d(time) millisecond; real L_type_Ca_current_d_gate.E0_m(time) millivolt; real tau_f_Ca millisecond; real f_Ca_infinity(time) dimensionless; real K_mfCa micromolar; K_mfCa=0.18; real beta_i(time) dimensionless; real K_mCMDN micromolar; K_mCMDN=2; real CMDN_tot micromolar; CMDN_tot=10; real V_myo microlitre; V_myo=0.00002584; real A_Cap cm2; A_Cap=0.0001534; real J_rel(time) micromolar_per_millisecond; real J_leak(time) micromolar_per_millisecond; real J_up(time) micromolar_per_millisecond; real Ca_SR(time) micromolar; when(time=time.min) Ca_SR=320; real P_rel per_millisecond; P_rel=6; real P_leak per_millisecond; P_leak=0.000001; real K_mCSQN micromolar; K_mCSQN=600; real CSQN_tot micromolar; CSQN_tot=10000; real V_SR microlitre; V_SR=0.000002; real V_up micromolar_per_millisecond; V_up=0.1; real K_mup micromolar; K_mup=0.32; real gamma(time) dimensionless; real beta_SR(time) dimensionless; // // i_Stim=(if (((time>=stim_start) and (time<=stim_end)) and ((time-stim_start-floor((time-stim_start)/stim_period)*stim_period)<=stim_duration)) stim_amplitude else (0 microA_per_microF)); V:time=((-1)*(i_Na+i_Ca+i_CaK+i_Kr+i_Ks+i_to+i_K1+i_Kp+i_NaCa+i_NaK+i_p_Ca+i_Na_b+i_Ca_b+i_Stim)); // E_Na=(R*T/F*ln(Na_o/Na_i)); i_Na=(g_Na*m^3*h*j*(V-E_Na)); // fast_sodium_current_m_gate.E0_m=(V+(47.13 millivolt)); alpha_m=((.32 per_millivolt_millisecond)*fast_sodium_current_m_gate.E0_m/(1-exp((-1)*(.1 per_millivolt)*fast_sodium_current_m_gate.E0_m))); beta_m=((.08 per_millisecond)*exp((-1)*V/(11 millivolt))); m:time=(alpha_m*(1-m)-beta_m*m); // alpha_h=((.135 per_millisecond)*exp((V+(80 millivolt)-shift_h)/((-1)*(6.8 millivolt)))); beta_h=((7.5 per_millisecond)/(1+exp((-1)*(.1 per_millivolt)*(V+(11 millivolt)-shift_h)))); h:time=(alpha_h*(1-h)-beta_h*h); // alpha_j=((.175 per_millisecond)*exp((V+(100 millivolt)-shift_j)/((-1)*(23 millivolt)))/(1+exp((.15 per_millivolt)*(V+(79 millivolt)-shift_j)))); beta_j=((.3 per_millisecond)/(1+exp((-1)*(.1 per_millivolt)*(V+(32 millivolt)-shift_j)))); j:time=(alpha_j*(1-j)-beta_j*j); // i_K1=(g_K1*K1_infinity*K_o/(K_o+K_mK1)*(V-E_K)); // K1_infinity=(1/(2+exp(1.62*F/(R*T)*(V-E_K)))); // E_K=(R*T/F*ln(K_o/K_i)); R_V=(1/(1+2.5*exp((.1 per_millivolt)*(V+(28 millivolt))))); i_Kr=(g_Kr*R_V*X_kr*sqrt(K_o/(4 millimolar))*(V-E_K)); // X_kr_inf=(1/(1+exp((-1)*2.182-(.1819 per_millivolt)*V))); tau_X_kr=((43 millisecond)+(1 millisecond)/(exp((-1)*5.495+(.1691 per_millivolt)*V)+exp((-1)*7.677-(.0128 per_millivolt)*V))); X_kr:time=((X_kr_inf-X_kr)/tau_X_kr); // E_Ks=(R*T/F*ln((K_o+.01833*Na_o)/(K_i+.01833*Na_i))); i_Ks=(g_Ks*X_ks^2*(V-E_Ks)); // X_ks_infinity=(1/(1+exp((V-(16 millivolt))/((-1)*(13.6 millivolt))))); tau_X_ks=((1 millisecond)/((7.19E-5 per_millivolt)*(V-(10 millivolt))/(1-exp((-1)*(.148 per_millivolt)*(V-(10 millivolt))))+(1.31E-4 per_millivolt)*(V-(10 millivolt))/(exp((.0687 per_millivolt)*(V-(10 millivolt)))-1))); X_ks:time=((X_ks_infinity-X_ks)/tau_X_ks); // i_to=(g_to*X_to*Y_to*(V-E_K)); // alpha_X_to=((.04516 per_millisecond)*exp((.03577 per_millivolt)*V)); beta_X_to=((.0989 per_millisecond)*exp((-1)*(.06237 per_millivolt)*V)); X_to:time=(alpha_X_to*(1-X_to)-beta_X_to*X_to); // alpha_Y_to=((.005415 per_millisecond)*exp((V+(33.5 millivolt))/((-1)*(5 millivolt)))/(1+.051335*exp((V+(33.5 millivolt))/((-1)*(5 millivolt))))); beta_Y_to=((.005415 per_millisecond)*exp((V+(33.5 millivolt))/(5 millivolt))/(1+.051335*exp((V+(33.5 millivolt))/(5 millivolt)))); Y_to:time=(alpha_Y_to*(1-Y_to)-beta_Y_to*Y_to); // i_Kp=(g_Kp*Kp_V*(V-E_K)); // Kp_V=(1/(1+exp(((7.488 millivolt)-V)/(5.98 millivolt)))); // f_NaK=(1/(1+.1245*exp((-1)*.1*V*F/(R*T))+.0365*sigma*exp((-1)*V*F/(R*T)))); sigma=(1/7*(exp(Na_o/(67.3 millimolar))-1)); i_NaK=(i_NaK_max*f_NaK/(1+(K_mNai/Na_i)^1.5)*K_o/(K_o+K_mKo)); // i_NaCa=(K_NaCa/((K_mNa^3+Na_o^3)*(K_mCa+Ca_o)*(1+K_sat*exp((eta-1)*V*F/(R*T))))*(exp(eta*V*F/(R*T))*Na_i^3*Ca_o-exp((eta-1)*V*F/(R*T))*Na_o^3*Ca_i)); // i_p_Ca=(i_pCa_max*Ca_i/(K_mpCa+Ca_i)); // E_Ca=(R*T/(2*F)*ln(Ca_o/Ca_i)); i_Ca_b=(g_Cab*(V-E_Ca)); // i_Na_b=(g_Nab*(V-E_Na)); // i_Ca=(i_Ca_max*f*d*f_Ca); i_Ca_max=(P_Ca/C_sc*(4 uM_mM)*V*F^2/(R*T)*(Ca_i*exp(2*V*F/(R*T))-.341*Ca_o)/(exp(2*V*F/(R*T))-1)); i_CaK=(P_CaK/C_sc*f*d*f_Ca/(1+i_Ca_max/i_Ca_half)*(1E3 nM_mM)*V*F^2/(R*T)*(K_i*exp(V*F/(R*T))-K_o)/(exp(V*F/(R*T))-1)); // f_infinity=(1/(1+exp((V+(12.5 millivolt))/(5 millivolt)))); tau_f=((30 millisecond)+(200 millisecond)/(1+exp((V+(20 millivolt))/(9.5 millivolt)))); f:time=((f_infinity-f)/tau_f); // d_infinity=(1/(1+exp((V+(10 millivolt))/((-1)*(6.24 millivolt))))); L_type_Ca_current_d_gate.E0_m=(V+(40 millivolt)); tau_d=((1 millisecond)/(.25*exp((-1)*(.01 per_millivolt)*V)/(1+exp((-1)*(.07 per_millivolt)*V))+.07*exp((-1)*(.05 per_millivolt)*L_type_Ca_current_d_gate.E0_m)/(1+exp((.05 per_millivolt)*L_type_Ca_current_d_gate.E0_m)))); d:time=((d_infinity-d)/tau_d); // f_Ca_infinity=(1/(1+(Ca_i/K_mfCa)^3)); tau_f_Ca=(30 millisecond); f_Ca:time=((f_Ca_infinity-f_Ca)/tau_f_Ca); // J_up=(V_up/(1+(K_mup/Ca_i)^2)); gamma=(1/(1+((2E3 micromolar)/Ca_SR)^3)); J_rel=(P_rel*f*d*f_Ca*(gamma*Ca_SR-Ca_i)/(1+1.65*exp(V/(20 millivolt)))); J_leak=(P_leak*(Ca_SR-Ca_i)); beta_SR=(1/(1+CSQN_tot*K_mCSQN/(K_mCSQN+Ca_SR)^2)); Ca_SR:time=(beta_SR*(J_up-J_leak-J_rel)*V_myo/V_SR); beta_i=(1/(1+CMDN_tot*K_mCMDN/(K_mCMDN+Ca_i)^2)); Ca_i:time=(beta_i*(J_rel+J_leak-J_up-A_Cap*C_sc/(2*F*V_myo)*(i_Ca+i_Ca_b+i_p_Ca-2*i_NaCa))); // }