/********************************************************************* shiffox.c Program integrates combination of Yohannes Shiferaw's calcium model (Y. Shiferaw, M. A. Watanabe, A. Garfinkel, J. N. Weiss, and A. Karma, Model of Intracellular Calcium Cycling in Ventricular Myocytes, Biophys J 2003; 85: 3666-3686) and Jeff Fox's canine ventricular cell ionic model (J. J. Fox, J. L. McHarg, and R. F. Gilmour Jr, Ionic mechanism of electrical alternans, Am J Physiol Heart Circ Physiol 2002; 282: 516-530) according to Yohannes Shiferaw (personal communications and Y. Shiferaw, D. Sato, and A. Karma, Coupled dynamics of voltage and calcium in paced cardiac cells, Phys Rev E 2005; 71: 021903). Trine Krogh-Madsen, October 2004 **********************************************************************/ #include #include const double Bsr = 47.0; const double Ksr = 0.6; const double Bcd = 24.0; const double Kcd = 7.0; const double k_on = 37.7*0.001; const double k_off = 19.6*0.001; const double KT = 0.5199; //koff/kon; const double BT = 70.0; const double vivs = 10.0; const double ts = 2.0; const double tr = 20.0; const double ta = 50.0; const double g = 250.0*0.3; const double F = 96490.0; const double F2 = 96.490; const double R = 8.315; const double Temp = 308.0; const double C_sc = 1.0; const double Ca_o = 1.8; const double Ica_bar = 3.5; const double Pca = 0.00000054; const double td = 5.0; const double tf = 30.0; const double gama = 0.2; const double tq = 20.0; const double cup = 0.5; const double vup = 250.0*0.001; const double INACA = 8.0; const double Km_Na = 87.5; const double Km_Ca = 1.380; const double ksat = 0.1; const double xi = 0.35; const double Na_i = 10.0; const double Na_o = 140.0; const double K_i = 149.4; const double K_o = 4.0; const double g_Na = 12.0; const double g_K1 = 2.8; const double Km_K1 = 13.0; const double g_Kr = 0.0136; const double g_Ks = 0.0245; const double g_Kp = 0.002216; const double g_to = 0.1; const double cst = 1.0; const double u = 9.0; const double dt = 0.01; const double T = 340.; //BCL const double t_end = 34000.; const double stim_dur = 1.0; const double stim_amp = -50.0; const int N_BCL = 34000; // BCL/dt const int N_stim = 100; // stim_dur/dt /******* Shiferaw functions ******/ double Q(double cjp) { double s, Q; s = 1.5*(110.0-50.0)-u*110.0; if (cjp < 50.0) Q = 0.0; else if (cjp >= 110.0) Q = u*cjp+s; else Q = 1.5*(cjp-50.0); Q*=(0.001); return Q; } double beta_ci(double ci) { return 1.0/(1.0+(Bsr*Ksr/((ci+Ksr)*(ci+Ksr)))+(Bcd*Kcd/((ci+Kcd)*(ci+Kcd)))+(BT*KT/((ci+KT)*(ci+KT)))); } double beta_cs(double cs) { return 1.0/(1.0+(Bsr*Ksr/((cs+Ksr)*(cs+Ksr)))+(Bcd*Kcd/((cs+Kcd)*(cs+Kcd)))+(BT*KT/((cs+KT)*(cs+KT)))); } double INaCa(double cs,double V) { V/=1000.0; cs/=1000.0; double a = V*F/(R*Temp); return INACA/(Km_Na*Km_Na*Km_Na+Na_o*Na_o*Na_o)/(Km_Ca+Ca_o)*(exp(xi*a)*Na_i*Na_i*Na_i*Ca_o-exp((xi-1.0)*a)*Na_o*Na_o*Na_o*cs)/(1.0+ksat*exp((xi-1.0)*a)); } double Iup(double ci) { return vup*ci*ci/(ci*ci+cup*cup); } double qinf(double cs) { return 1.0/(1.0+pow((cs/cst),gama)); } double Ica(double d, double f, double q, double cs, double V) { V/=1000.0; cs/=1000.0; return d*f*q*Ica_bar*Pca*(4.0*V*F*F/R/Temp)*(cs*exp(2.0*V*F/R/Temp)-0.341*Ca_o)/(exp(2.0*V*F/R/Temp)-1.0); } int main() { /* files */ FILE *output; output = fopen("shiffox.dat","w"); /* variables */ double t = 0.0; double m, h, j, Xr, Xs, Xto, Yto, d, f, q, cs[2], ci[2], cj[2], cjp[2], Irel[2], V; double E_Na, E_K, K1_inf, RV, E_Ks, K_Kp; double I_Na, I_K1, I_Kr, I_Ks, I_to, I_Kp, I_NaCa, I_Ca, I_stim, I_total; double V_min = -120.0; int ilow, tl = 1800; double linext; double alpha_m, beta_m, alpha_h, beta_h, alpha_j, beta_j, Xr_inf, Xr_tau, Xs_inf, Xs_tau, alpha_Xto, beta_Xto, alpha_Yto, beta_Yto, d_inf, f_inf; double tau_m, tau_h, tau_j, tau_Xto, tau_Yto; double v; double vt[tl], alpha_mt[tl], beta_mt[tl], alpha_ht[tl], beta_ht[tl], alpha_jt[tl], beta_jt[tl], Xr_inft[tl], Xr_taut[tl], Xs_inft[tl], Xs_taut[tl], alpha_Xtot[tl], beta_Xtot[tl], alpha_Ytot[tl], beta_Ytot[tl], d_inft[tl], f_inft[tl]; int n = 0; int i = 0; int n_BCL = 1; int n_stim = 1; int stim_on = 0; /* make look-up tables */ for (i=0; i t_end-4.*T) { fprintf(output,"%.5f\t%.5f\t%.5f\n",t,ci[0],V); i=0; } t = t+dt; n_BCL++; if (t > t_end-4.*T) i++; } fclose(output); return 0; }