Chaste Release::3.1
CorriasBuistICCModified.cpp
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)