Chaste Release::3.1
|
00001 /* 00002 00003 Copyright (c) 2005-2012, University of Oxford. 00004 All rights reserved. 00005 00006 University of Oxford means the Chancellor, Masters and Scholars of the 00007 University of Oxford, having an administrative office at Wellington 00008 Square, Oxford OX1 2JD, UK. 00009 00010 This file is part of Chaste. 00011 00012 Redistribution and use in source and binary forms, with or without 00013 modification, are permitted provided that the following conditions are met: 00014 * Redistributions of source code must retain the above copyright notice, 00015 this list of conditions and the following disclaimer. 00016 * Redistributions in binary form must reproduce the above copyright notice, 00017 this list of conditions and the following disclaimer in the documentation 00018 and/or other materials provided with the distribution. 00019 * Neither the name of the University of Oxford nor the names of its 00020 contributors may be used to endorse or promote products derived from this 00021 software without specific prior written permission. 00022 00023 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00024 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00025 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00026 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 00027 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00028 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 00029 GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00030 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00031 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 00032 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 00034 */ 00035 00036 #include "CorriasBuistICCModified.hpp" 00037 #include <cmath> 00038 #include <cassert> 00039 #include <memory> 00040 #include "Exception.hpp" 00041 #include "OdeSystemInformation.hpp" 00042 #include "HeartConfig.hpp" 00043 00044 CorriasBuistICCModified::CorriasBuistICCModified(boost::shared_ptr<AbstractIvpOdeSolver> pSolver, boost::shared_ptr<AbstractStimulusFunction> pIntracellularStimulus) 00045 : AbstractCardiacCell( 00046 pSolver, 00047 18,//reduced by 3 from original 00048 0, 00049 pIntracellularStimulus) 00050 { 00051 00052 mpSystemInfo = OdeSystemInformation<CorriasBuistICCModified>::Instance(); 00053 mFractionOfVDDRInPU = 0.0; 00054 mIP3Concentration = 0.0006; 00055 mScaleFactorSerca = 1.0; 00056 mScaleFactorCarbonMonoxide = 1.0; //initialise to 1 --> no effect 00057 //IP3 = 0.00065;// mM *** no longer used *** 00058 00060 //Constants 00062 00063 /* Concentrations */ 00064 Ca_o = 2.5 ;// mM 00065 Cl_o =134.0 ;// mM 00066 K_o =7.0 ;// mM 00067 Na_o =137.0 ;// mM 00068 00069 /* Nernst parameters */ 00070 R = 8314.4 ;// pJ/nmol/K 00071 T = 310.0 ;// degK 00072 F = 96484.6;// nC/nmol 00073 FoRT = 0.03743;// 1/mV 00074 RToF = 26.7137;// mV 00075 00076 Cm = 25.0*1e-6;// 25 pF --> microF 00077 00078 Asurf_in_cm_square = Cm / HeartConfig::Instance()->GetCapacitance(); 00079 Asurf = Asurf_in_cm_square / 0.01;//cm2 --> mm2 00080 00081 Cl_i = 88.0 ;// mM 00082 K_i = 120.0 ;// mM 00083 Na_i = 30.0 ;// mM 00084 P_cyto = 0.7;// dim 00085 Vol = 1.0e-6 ;// mm3 00086 fc = 0.01 ;// dim 00087 fe = 0.01 ;// dim 00088 fm = 0.0003 ;// dim 00089 Q10Ca = 2.1;// dim 00090 Q10K = 1.5;// dim 00091 Q10Na = 2.45 ;// dim 00092 T_exp = 297.0 ;// degK 00093 00094 G_max_BK = 23.0 * 1e-6 / Asurf;// 9.2e-3 mS/mm2 (23.0 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00095 G_max_CaCl = 10.1 * 1e-6 / Asurf; //4.04e-3 mS/mm2 (10.1 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00096 G_max_ERG = 2.5 * 1e-6 / Asurf; //1.0e-3 mS/mm2 ( 2.5 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00097 G_max_Ltype = 2.0 * 1e-6 / Asurf;//0.8e-3 mS/mm2 ( 2.0 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00098 G_max_NSCC = 12.15 * 1e-6 / Asurf;//4.86e-3 mS/mm2 (12.15nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00099 G_max_Na = 20.0 * 1e-6 / Asurf;//8.0e-3 mS/mm2 (20.0 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00100 G_max_VDDR = 3.0 * 1e-6 / Asurf;//1.2e-3 mS/mm2 ( 3.0 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00101 G_max_bk = 0.15 * 1e-6 / Asurf;//0.06e-3 mS/mm2 (0.15 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00102 G_max_kv11 = 6.3 * 1e-6 / Asurf;//2.52e-3 mS/mm2 ( 6.3 nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00103 00104 J_max_PMCA = 0.088464e-3 ;// mM/ms (mM/s) * 1/1000 (s/ms) = mM/ms 00105 J_max_PMCA_PU = 0.33e-3;// mM/ms (mM/s) * 1/1000 (s/ms) = mM/ms 00106 J_ERleak = 1.666667e-3 ;// 1/ms (1/s) * 1/1000 (ms/s) = 1/ms 00107 J_max_leak = 0.0;// 1/ms (1/s) * 1/1000 (ms/s) = 1/ms 00108 Jmax_IP3 = 50000.0e-3 ;// 1/ms (1/s) * 1/1000 (ms/s) = 1/ms 00109 Jmax_NaCa = 0.05e-3;// mM/ms (mM/s) * 1/1000 (s/ms) = mM/ms 00110 Jmax_serca = 1.8333e-3 ;// mM/ms (mM/s) * 1/1000 (s/ms) = mM/ms 00111 Jmax_uni = 5000.0e-3 ;// 1/ms (1/s) * 1/1000 (ms/s) = 1/ms 00112 00113 NaPerm_o_Kperm = 1.056075 ;// dim 00114 L = 50.0 ;// dim 00115 P_ER = 0.1;// dim 00116 P_PU = 0.001 ;// dim 00117 P_mito = 0.12871;// dim 00118 b = 0.5;// dim 00119 na = 2.8;// dim 00120 00121 K_Ca = 0.003 ;// mM 00122 K_Na = 9.4;// mM 00123 K_act = 0.00038;// mM 00124 K_trans = 0.006 ;// mM 00125 k_serca = 0.00042;// mM 00126 conc = 0.001 ;// mM 00127 d_ACT = 0.001 ;// mM 00128 d_IP3 = 0.00025;// mM 00129 d_INH = 0.0014 ;// mM 00130 00131 tau_d_CaCl = 0.03e3 ;// ms(s) * 1000 (ms/s) = ms 00132 tau_d_NSCC = 0.35e3 ;// ms(s) * 1000 (ms/s) = ms 00133 tauh = 4.0e3 ;// ms(s ) * 1000 (ms/s) = ms 00134 00135 deltaPsi_B = 50.0 ;// mV 00136 deltaPsi_star = 91.0 ;// mV 00137 deltaPsi = 164.000044 ;// mV 00138 00140 //Calculated constants 00142 00143 /* Volumes */ 00144 V_cyto = Vol*P_cyto; 00145 V_MITO = Vol*P_mito; 00146 V_PU = Vol*P_PU; 00147 V_ER = Vol*P_ER; 00148 00149 /* Temperature corrections */ 00150 T_correction_Ca = pow(Q10Ca, (T-T_exp)/10.0); 00151 T_correction_K = pow(Q10K, (T-T_exp)/10.0); 00152 T_correction_Na = pow(Q10Na, (T-T_exp)/10.0); 00153 T_correction_BK = 1.1*(T-T_exp)*1e-6/Asurf; //(nS) * 1e-6 (mS/nS) / Asurf (mm2) = mS/mm2 00154 00155 /* Nernst potentials */ 00156 E_Na = RToF*log(Na_o/Na_i); 00157 E_K = RToF*log(K_o/K_i); 00158 E_Cl = RToF*log(Cl_i/Cl_o); 00159 E_NSCC = RToF*log((K_o+Na_o*NaPerm_o_Kperm)/(K_i+Na_i*NaPerm_o_Kperm)); 00160 00161 /* Activation gate time constants s->ms */ 00162 tau_d_ERG = T_correction_K*0.003*1000.0; 00163 tau_d_Ltype = T_correction_Ca*0.001*1000.0; 00164 tau_d_Na = T_correction_Na*0.003*1000.0; 00165 tau_d_VDDR = T_correction_Ca*0.006*1000.0; 00166 tau_d_kv11 = T_correction_K*0.005*1000.0; 00167 00168 /* Inactivation gate time constants s->ms */ 00169 tau_f_Ltype = T_correction_Ca*0.086*1000.0; 00170 tau_f_Na = T_correction_Na*0.0016*1000.0; 00171 tau_f_VDDR = T_correction_Ca*0.04*1000.0; 00172 tau_f_ca_Ltype = T_correction_Ca*0.002*1000.0; 00173 tau_f_kv11 = T_correction_K*0.005*1000.0; 00174 00175 /* Speed ups */ 00176 e2FoRTdPsiMdPsiS = exp(-2.0*FoRT*(deltaPsi-deltaPsi_star)); 00177 ebFoRTdPsiMdPsiS = exp(b*FoRT*(deltaPsi-deltaPsi_star)); 00178 00179 00180 Init(); 00181 00182 } 00183 00184 CorriasBuistICCModified::~CorriasBuistICCModified() 00185 { 00186 } 00187 00188 void CorriasBuistICCModified::VerifyStateVariables() 00189 {} 00190 00191 void CorriasBuistICCModified::SetSercaPumpScaleFactor(double scaleFactor) 00192 { 00193 mScaleFactorSerca = scaleFactor; 00194 } 00195 00196 void CorriasBuistICCModified::SetFractionOfVDDRInPU(double fraction) 00197 { 00198 mFractionOfVDDRInPU = fraction; 00199 } 00200 00201 void CorriasBuistICCModified::SetIP3Concentration(double concentration) 00202 { 00203 mIP3Concentration = concentration; 00204 } 00205 00206 void CorriasBuistICCModified::SetCarbonMonoxideScaleFactor(double scaleFactor) 00207 { 00208 mScaleFactorCarbonMonoxide = scaleFactor; 00209 } 00210 00211 double CorriasBuistICCModified::GetCarbonMonoxideScaleFactor() 00212 { 00213 return mScaleFactorCarbonMonoxide; 00214 } 00215 00216 double CorriasBuistICCModified::GetIIonic(const std::vector<double>* pStateVariables) 00217 { 00218 if (!pStateVariables) pStateVariables = &rGetStateVariables(); 00219 const std::vector<double>& rY = *pStateVariables; 00220 00221 // index 0: Vm (mV) 00222 // index 1: Ca_i (mM) 00223 // index 2: Ca_ER (mM) 00224 // index 3: Ca_PU (mM) 00225 // index 4: Ca_m (mM) 00226 // index 5: h (dim) 00227 // index 6: d_CaCl (dim) 00228 // index 7: d_ERG (dim) 00229 // index 8: d_Ltype (dim) 00230 // index 9: d_NSCC (dim) 00231 // index 10: d_Na (dim) 00232 // index 11: d_VDDR (dim) 00233 // index 12: d_kv11 (dim) 00234 // index 13: f_Ltype (dim) 00235 // index 14: f_Na (dim) 00236 // index 15: f_VDDR (dim) 00237 // index 16: f_ca_Ltype (dim) 00238 // index 17: f_kv11 (dim) 00239 00240 double E_Ca = 0.5*RToF*log(Ca_o/rY[1]); 00241 /* --- INa --- */ 00242 double I_Na = G_max_Na*rY[14]*rY[10]*(rY[0]-E_Na); 00243 /* --- ILtype --- */ 00244 double I_Ltype = G_max_Ltype*rY[13]*rY[8]*rY[16]*(rY[0]-E_Ca); 00245 /* --- IVDDR --- */ 00246 double I_VDDR = G_max_VDDR*rY[15]*rY[11]*(rY[0]-E_Ca); 00247 /* --- IKv1.1 --- */ 00248 double I_kv11 = mScaleFactorCarbonMonoxide*G_max_kv11*rY[17]*rY[12]*(rY[0]-E_K); 00249 /* --- IERG --- */ 00250 double I_ERG = mScaleFactorCarbonMonoxide*G_max_ERG*rY[7]*(rY[0]-E_K); 00251 /* --- IBK --- */ 00252 double d_BK = 1.0/(1.0+((exp(rY[0]/-17.0))/((rY[1]/0.001)*(rY[1]/0.001)))); 00253 double I_BK = (G_max_BK+T_correction_BK)*d_BK*(rY[0]-E_K); 00254 /* --- IKb --- */ 00255 double I_bk = mScaleFactorCarbonMonoxide*G_max_bk*(rY[0]-E_K); 00256 /* --- ICaCL --- */ 00257 double I_CaCl = G_max_CaCl*rY[6]*(rY[0]-E_Cl); 00258 /* --- INSCC --- */ 00259 double I_NSCC = G_max_NSCC*rY[9]*(rY[0]-E_NSCC); 00260 /* --- JpmCa --- */ 00261 double J_PMCA = J_max_PMCA*1.0/(1.0+(0.000298/rY[1])); 00262 00263 //i_ionic_in microA/mm2 00264 double i_ionic = (I_Na+I_Ltype+I_VDDR+I_kv11+I_ERG+I_BK+I_CaCl+I_NSCC+I_bk+(J_PMCA*2.0*F*V_cyto/Asurf)); 00265 assert(!std::isnan(i_ionic)); 00269 return i_ionic / 0.01; 00270 } 00271 00272 void CorriasBuistICCModified::EvaluateYDerivatives(double time, const std::vector<double>& rY, std::vector<double>& rDY) 00273 { 00274 // index 0: Vm (mV) 00275 // index 1: Ca_i (mM) 00276 // index 2: Ca_ER (mM) 00277 // index 3: Ca_PU (mM) 00278 // index 4: Ca_m (mM) 00279 // index 5: h (dim) 00280 // index 6: d_CaCl (dim) 00281 // index 7: d_ERG (dim) 00282 // index 8: d_Ltype (dim) 00283 // index 9: d_NSCC (dim) 00284 // index 10: d_Na (dim) 00285 // index 11: d_VDDR (dim) 00286 // index 12: d_kv11 (dim) 00287 // index 13: f_Ltype (dim) 00288 // index 14: f_Na (dim) 00289 // index 15: f_VDDR (dim) 00290 // index 16: f_ca_Ltype (dim) 00291 // index 17: f_kv11 (dim) 00292 00293 /* ----------------- */ 00294 /* Membrane currents */ 00295 /* ----------------- */ 00296 00297 double E_Ca = 0.5*RToF*log(Ca_o/rY[1]); 00298 00299 /* --- INa --- */ 00300 double d_inf_Na = 1.0/(1.0+exp((rY[0]+47.0)/-4.8)); 00301 double f_inf_Na = 1.0/(1.0+exp((rY[0]+78.0)/7.0)); 00302 double I_Na = G_max_Na*rY[14]*rY[10]*(rY[0]-E_Na); 00303 00304 /* --- ILtype --- */ 00305 double d_inf_Ltype = 1.0/(1.0+exp((rY[0]+17.0)/-4.3)); 00306 double f_inf_Ltype = 1.0/(1.0+exp((rY[0]+43.0)/8.9)); 00307 double f_ca_inf_Ltype = 1.0-1.0/(1.0+exp((rY[1]-0.0001-0.000214)/-0.0000131)); 00308 double I_Ltype = G_max_Ltype*rY[13]*rY[8]*rY[16]*(rY[0]-E_Ca); 00309 00310 /* --- IVDDR --- */ 00311 double d_inf_VDDR = 1.0/(1.0+exp((rY[0]+26.0)/-6.0)); 00312 double f_inf_VDDR = 1.0/(1.0+exp((rY[0]+66.0)/6.0)); 00313 double I_VDDR = G_max_VDDR*rY[15]*rY[11]*(rY[0]-E_Ca); 00314 00315 /* --- IKv1.1 --- */ 00316 double d_inf_kv11 = 1.0/(1.0+exp((rY[0]+25.0)/-7.7)); 00317 double f_inf_kv11 = 0.5+0.5/(1.0+exp((rY[0]+44.8)/4.4)); 00318 double I_kv11 = mScaleFactorCarbonMonoxide*G_max_kv11*rY[17]*rY[12]*(rY[0]-E_K); 00319 00320 /* --- IERG --- */ 00321 double d_inf_ERG = 0.2+0.8/(1.0+exp((rY[0]+20.0)/-1.8)); 00322 double I_ERG = mScaleFactorCarbonMonoxide*G_max_ERG*rY[7]*(rY[0]-E_K); 00323 00324 /* --- IBK --- */ 00325 //LUT d_BK = 1.0/(1.0+exp((rY[0]/-17.0)-2.0*log(rY[1]/0.001))); 00326 double d_BK = 1.0/(1.0+((exp(rY[0]/-17.0))/((rY[1]/0.001)*(rY[1]/0.001)))); 00327 double I_BK = (G_max_BK+T_correction_BK)*d_BK*(rY[0]-E_K); 00328 00329 /* --- IKb --- */ 00330 double I_bk = mScaleFactorCarbonMonoxide*G_max_bk*(rY[0]-E_K); 00331 00332 /* --- ICaCL --- */ 00333 double tmp1 = 0.00014/rY[1]; 00334 double d_inf_CaCl = 1.0/(1.0+(tmp1*tmp1*tmp1)); 00335 double I_CaCl = G_max_CaCl*rY[6]*(rY[0]-E_Cl); 00336 00337 /* --- INSCC --- */ 00338 double d_inf_NSCC = 1.0/(1.0+pow(0.0000745/rY[3], -85.0)); 00339 double I_NSCC = G_max_NSCC*rY[9]*(rY[0]-E_NSCC); 00340 00341 /* --- JpmCa --- */ 00342 double J_PMCA = J_max_PMCA*1.0/(1.0+(0.000298/rY[1])); 00343 00344 /* ----------------- */ 00345 /* ER fluxes */ 00346 /* ----------------- */ 00347 00348 //tmp1 = IP3/(IP3+d_IP3); 00349 tmp1 = mIP3Concentration/(mIP3Concentration+d_IP3); 00350 double tmp2 = rY[3]/(rY[3]+d_ACT); 00351 double J_ERout = (Jmax_IP3*tmp1*tmp1*tmp1*tmp2*tmp2*tmp2*rY[5]*rY[5]*rY[5]+J_ERleak)*(rY[2]-rY[3]); 00352 double J_SERCA = mScaleFactorSerca*Jmax_serca*rY[3]*rY[3]/(k_serca*k_serca+rY[3]*rY[3]); 00353 00354 /* ----------------- */ 00355 /* Mito fluxes */ 00356 /* ----------------- */ 00357 00358 /* Uniporter */ 00359 tmp1 = 1.0+rY[3]/K_trans; 00360 double MWC = conc*(rY[3]/K_trans)*tmp1*tmp1*tmp1/(tmp1*tmp1*tmp1*tmp1+L/pow(1.0+rY[3]/K_act, na)); 00361 double J_uni = Jmax_uni*(MWC-rY[4]*e2FoRTdPsiMdPsiS)*2.0*FoRT*(deltaPsi-deltaPsi_star)/(1.0-e2FoRTdPsiMdPsiS); 00362 00363 /* NaCa Exchanger */ 00364 double J_NaCa = Jmax_NaCa*ebFoRTdPsiMdPsiS/((1.0+K_Na*K_Na/(Na_i*Na_i))*(1.0+K_Ca/rY[4])); 00365 00366 /* ----------------- */ 00367 /* Cyto fluxes */ 00368 /* ----------------- */ 00369 00370 double J_leak = J_max_leak*(rY[3]-rY[1]); /* P.U.->Cai */ 00371 00372 /* ----------------- */ 00373 /* Entrainment */ 00374 /* ----------------- */ 00375 00376 double E_Ca_PU = 0.5*RToF*log(Ca_o/rY[3]); 00377 double I_VDDR_PU = G_max_VDDR*rY[11]*rY[15]*(rY[0]-E_Ca_PU); 00378 //J_PMCA_PU = J_max_PMCA_PU*1.0/(1.0+exp(-(rY[3]-0.0001)/0.000015)); 00379 double J_PMCA_PU = J_max_PMCA_PU*1.0/(1.0+exp(-(rY[3]-0.0001)/0.000015)); 00380 00381 double i_stim = GetStimulus(time); 00382 00383 /* -------------------- */ 00384 /* Resting Membrane, CO */ 00385 /* -------------------- */ 00386 00387 //tmp1 = 2.8*spatVar[1]-0.1; 00388 //I_kv11 = I_kv11*tmp1; 00389 //I_ERG = I_ERG*tmp1; 00390 //I_bk = I_bk*tmp1; 00391 double voltage_derivative; 00392 if (mSetVoltageDerivativeToZero) 00393 { 00394 voltage_derivative = 0.0; 00395 } 00396 else 00397 { 00398 voltage_derivative = (-1.0 / 0.01) * (i_stim + I_Na+I_Ltype+I_VDDR+I_kv11+I_ERG+I_BK+I_CaCl+I_NSCC+I_bk+(J_PMCA*2.0*F*V_cyto/Asurf)); 00399 assert(!std::isnan(voltage_derivative)); 00400 } 00401 00402 rDY[0] = voltage_derivative;/* Vm */ 00403 rDY[1] = fc*((-I_Ltype-I_VDDR)*Asurf/(2.0*F*V_cyto)+J_leak-J_PMCA); 00404 rDY[2] = fe*(J_SERCA-J_ERout); 00405 rDY[3] = fc*((J_NaCa-J_uni)*V_MITO/V_PU+(J_ERout-J_SERCA)*V_ER/V_PU-J_leak*V_cyto/V_PU); 00406 rDY[3]-= fc*(((mFractionOfVDDRInPU*I_VDDR_PU*Asurf)/(2.0*F*V_PU))+J_PMCA_PU); // *** new, 4% IVDDR *** 00407 rDY[4] = fm*(J_uni-J_NaCa); 00408 rDY[5] = 1.0*(d_INH-rY[5]*(rY[3]+d_INH))/tauh; 00409 rDY[6] = (d_inf_CaCl-rY[6])/tau_d_CaCl; 00410 rDY[7] = (d_inf_ERG-rY[7])/tau_d_ERG; 00411 rDY[8] = (d_inf_Ltype-rY[8])/tau_d_Ltype; 00412 rDY[9] = (d_inf_NSCC-rY[9])/tau_d_NSCC; 00413 rDY[10] = (d_inf_Na-rY[10])/tau_d_Na; 00414 rDY[11] = (d_inf_VDDR-rY[11])/tau_d_VDDR; 00415 rDY[12] = (d_inf_kv11-rY[12])/tau_d_kv11; 00416 rDY[13] = (f_inf_Ltype-rY[13])/tau_f_Ltype; 00417 rDY[14] = (f_inf_Na-rY[14])/tau_f_Na; 00418 rDY[15] = (f_inf_VDDR-rY[15])/tau_f_VDDR; 00419 rDY[16] = (f_ca_inf_Ltype-rY[16])/tau_f_ca_Ltype; 00420 rDY[17] = (f_inf_kv11-rY[17])/tau_f_kv11; 00421 } 00422 00423 template<> 00424 void OdeSystemInformation<CorriasBuistICCModified>::Initialise(void) 00425 { 00426 00427 this->mSystemName = "ICC_model_Martincode"; 00428 00429 this->mVariableNames.push_back("Vm"); 00430 this->mVariableUnits.push_back("mV"); 00431 this->mInitialConditions.push_back(-67.53988); // Vm (mV); 00432 00433 this->mVariableNames.push_back("Ca_i"); 00434 this->mVariableUnits.push_back("mM"); 00435 this->mInitialConditions.push_back(0.00001); // Ca_i (mM)); 00436 00437 this->mVariableNames.push_back("Ca_ER"); 00438 this->mVariableUnits.push_back("mM"); 00439 this->mInitialConditions.push_back(0.00695); // Ca_ER (mM)); 00440 00441 this->mVariableNames.push_back("Ca_PU"); 00442 this->mVariableUnits.push_back("mM"); 00443 this->mInitialConditions.push_back(0.000095); // Ca_PU (mM)); 00444 00445 this->mVariableNames.push_back("Ca_m"); 00446 this->mVariableUnits.push_back("mM"); 00447 this->mInitialConditions.push_back(0.000138); // Ca_m (mM)); 00448 00449 this->mVariableNames.push_back("h"); 00450 this->mVariableUnits.push_back("dimensionless"); 00451 this->mInitialConditions.push_back(0.939443); // h (dim)); 00452 00453 this->mVariableNames.push_back("d_CaCl"); 00454 this->mVariableUnits.push_back("dimensionless"); 00455 this->mInitialConditions.push_back(0.00038); // d_CaCl (dim)); 00456 00457 this->mVariableNames.push_back("d_ERG"); 00458 this->mVariableUnits.push_back("dimensionless"); 00459 this->mInitialConditions.push_back(0.2); // d_ERG (dim)); 00460 00461 this->mVariableNames.push_back("d_Ltype"); 00462 this->mVariableUnits.push_back("dimensionless"); 00463 this->mInitialConditions.push_back(0.000008); // d_Ltype (dim)); 00464 00465 this->mVariableNames.push_back("d_NSCC"); 00466 this->mVariableUnits.push_back("dimensionless"); 00467 this->mInitialConditions.push_back(0.0); // d_NSCC (dim)); 00468 00469 this->mVariableNames.push_back("d_Na"); 00470 this->mVariableUnits.push_back("dimensionless"); 00471 this->mInitialConditions.push_back(0.013778); // d_Na (dim)); 00472 00473 this->mVariableNames.push_back("d_VDDR"); 00474 this->mVariableUnits.push_back("dimensionless"); 00475 this->mInitialConditions.push_back(0.00099); // d_VDDR (dim)); 00476 00477 this->mVariableNames.push_back("d_kv11"); 00478 this->mVariableUnits.push_back("dimensionless"); 00479 this->mInitialConditions.push_back(0.003992); // d_kv11 (dim)); 00480 00481 this->mVariableNames.push_back("f_Ltype"); 00482 this->mVariableUnits.push_back("dimensionless"); 00483 this->mInitialConditions.push_back( 0.940072); // f_Ltype (dim)); 00484 00485 this->mVariableNames.push_back("f_Na"); 00486 this->mVariableUnits.push_back("dimensionless"); 00487 this->mInitialConditions.push_back(0.182426); // f_Na (dim)); 00488 00489 this->mVariableNames.push_back("f_VDDR"); 00490 this->mVariableUnits.push_back("dimensionless"); 00491 this->mInitialConditions.push_back(0.562177); // f_VDDR (dim)); 00492 00493 this->mVariableNames.push_back("f_ca_Ltype"); 00494 this->mVariableUnits.push_back("dimensionless"); 00495 this->mInitialConditions.push_back(1.0); // f_ca_Ltype (dim)); 00496 00497 this->mVariableNames.push_back("f_kv11"); 00498 this->mVariableUnits.push_back("dimensionless"); 00499 this->mInitialConditions.push_back(0.997143); // f_kv11 (dim)); 00500 00501 this->mInitialised = true; 00502 } 00503 00504 00505 // Serialization for Boost >= 1.36 00506 #include "SerializationExportWrapperForCpp.hpp" 00507 CHASTE_CLASS_EXPORT(CorriasBuistICCModified)