36 #include "CorriasBuistICCModified.hpp"
41 #include "OdeSystemInformation.hpp"
42 #include "HeartConfig.hpp"
49 pIntracellularStimulus)
219 const std::vector<double>& rY = *pStateVariables;
240 double E_Ca = 0.5*
RToF*log(
Ca_o/rY[1]);
244 double I_Ltype =
G_max_Ltype*rY[13]*rY[8]*rY[16]*(rY[0]-E_Ca);
246 double I_VDDR =
G_max_VDDR*rY[15]*rY[11]*(rY[0]-E_Ca);
252 double d_BK = 1.0/(1.0+((exp(rY[0]/-17.0))/((rY[1]/0.001)*(rY[1]/0.001))));
261 double J_PMCA =
J_max_PMCA*1.0/(1.0+(0.000298/rY[1]));
264 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));
265 assert(!std::isnan(i_ionic));
269 return i_ionic / 0.01;
297 double E_Ca = 0.5*
RToF*log(
Ca_o/rY[1]);
300 double d_inf_Na = 1.0/(1.0+exp((rY[0]+47.0)/-4.8));
301 double f_inf_Na = 1.0/(1.0+exp((rY[0]+78.0)/7.0));
305 double d_inf_Ltype = 1.0/(1.0+exp((rY[0]+17.0)/-4.3));
306 double f_inf_Ltype = 1.0/(1.0+exp((rY[0]+43.0)/8.9));
307 double f_ca_inf_Ltype = 1.0-1.0/(1.0+exp((rY[1]-0.0001-0.000214)/-0.0000131));
308 double I_Ltype =
G_max_Ltype*rY[13]*rY[8]*rY[16]*(rY[0]-E_Ca);
311 double d_inf_VDDR = 1.0/(1.0+exp((rY[0]+26.0)/-6.0));
312 double f_inf_VDDR = 1.0/(1.0+exp((rY[0]+66.0)/6.0));
313 double I_VDDR =
G_max_VDDR*rY[15]*rY[11]*(rY[0]-E_Ca);
316 double d_inf_kv11 = 1.0/(1.0+exp((rY[0]+25.0)/-7.7));
317 double f_inf_kv11 = 0.5+0.5/(1.0+exp((rY[0]+44.8)/4.4));
321 double d_inf_ERG = 0.2+0.8/(1.0+exp((rY[0]+20.0)/-1.8));
326 double d_BK = 1.0/(1.0+((exp(rY[0]/-17.0))/((rY[1]/0.001)*(rY[1]/0.001))));
333 double tmp1 = 0.00014/rY[1];
334 double d_inf_CaCl = 1.0/(1.0+(tmp1*tmp1*tmp1));
338 double d_inf_NSCC = 1.0/(1.0+pow(0.0000745/rY[3], -85.0));
342 double J_PMCA =
J_max_PMCA*1.0/(1.0+(0.000298/rY[1]));
350 double tmp2 = rY[3]/(rY[3]+
d_ACT);
351 double J_ERout = (
Jmax_IP3*tmp1*tmp1*tmp1*tmp2*tmp2*tmp2*rY[5]*rY[5]*rY[5]+
J_ERleak)*(rY[2]-rY[3]);
360 double MWC =
conc*(rY[3]/
K_trans)*tmp1*tmp1*tmp1/(tmp1*tmp1*tmp1*tmp1+
L/pow(1.0+rY[3]/
K_act,
na));
376 double E_Ca_PU = 0.5*
RToF*log(
Ca_o/rY[3]);
377 double I_VDDR_PU =
G_max_VDDR*rY[11]*rY[15]*(rY[0]-E_Ca_PU);
379 double J_PMCA_PU =
J_max_PMCA_PU*1.0/(1.0+exp(-(rY[3]-0.0001)/0.000015));
391 double voltage_derivative;
394 voltage_derivative = 0.0;
398 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));
399 assert(!std::isnan(voltage_derivative));
402 rDY[0] = voltage_derivative;
403 rDY[1] =
fc*((-I_Ltype-I_VDDR)*
Asurf/(2.0*
F*
V_cyto)+J_leak-J_PMCA);
404 rDY[2] =
fe*(J_SERCA-J_ERout);
407 rDY[4] =
fm*(J_uni-J_NaCa);
413 rDY[10] = (d_inf_Na-rY[10])/
tau_d_Na;
417 rDY[14] = (f_inf_Na-rY[14])/
tau_f_Na;
427 this->mSystemName =
"ICC_model_Martincode";
429 this->mVariableNames.push_back(
"Vm");
430 this->mVariableUnits.push_back(
"mV");
431 this->mInitialConditions.push_back(-67.53988);
433 this->mVariableNames.push_back(
"Ca_i");
434 this->mVariableUnits.push_back(
"mM");
435 this->mInitialConditions.push_back(0.00001);
437 this->mVariableNames.push_back(
"Ca_ER");
438 this->mVariableUnits.push_back(
"mM");
439 this->mInitialConditions.push_back(0.00695);
441 this->mVariableNames.push_back(
"Ca_PU");
442 this->mVariableUnits.push_back(
"mM");
443 this->mInitialConditions.push_back(0.000095);
445 this->mVariableNames.push_back(
"Ca_m");
446 this->mVariableUnits.push_back(
"mM");
447 this->mInitialConditions.push_back(0.000138);
449 this->mVariableNames.push_back(
"h");
450 this->mVariableUnits.push_back(
"dimensionless");
451 this->mInitialConditions.push_back(0.939443);
453 this->mVariableNames.push_back(
"d_CaCl");
454 this->mVariableUnits.push_back(
"dimensionless");
455 this->mInitialConditions.push_back(0.00038);
457 this->mVariableNames.push_back(
"d_ERG");
458 this->mVariableUnits.push_back(
"dimensionless");
459 this->mInitialConditions.push_back(0.2);
461 this->mVariableNames.push_back(
"d_Ltype");
462 this->mVariableUnits.push_back(
"dimensionless");
463 this->mInitialConditions.push_back(0.000008);
465 this->mVariableNames.push_back(
"d_NSCC");
466 this->mVariableUnits.push_back(
"dimensionless");
467 this->mInitialConditions.push_back(0.0);
469 this->mVariableNames.push_back(
"d_Na");
470 this->mVariableUnits.push_back(
"dimensionless");
471 this->mInitialConditions.push_back(0.013778);
473 this->mVariableNames.push_back(
"d_VDDR");
474 this->mVariableUnits.push_back(
"dimensionless");
475 this->mInitialConditions.push_back(0.00099);
477 this->mVariableNames.push_back(
"d_kv11");
478 this->mVariableUnits.push_back(
"dimensionless");
479 this->mInitialConditions.push_back(0.003992);
481 this->mVariableNames.push_back(
"f_Ltype");
482 this->mVariableUnits.push_back(
"dimensionless");
483 this->mInitialConditions.push_back( 0.940072);
485 this->mVariableNames.push_back(
"f_Na");
486 this->mVariableUnits.push_back(
"dimensionless");
487 this->mInitialConditions.push_back(0.182426);
489 this->mVariableNames.push_back(
"f_VDDR");
490 this->mVariableUnits.push_back(
"dimensionless");
491 this->mInitialConditions.push_back(0.562177);
493 this->mVariableNames.push_back(
"f_ca_Ltype");
494 this->mVariableUnits.push_back(
"dimensionless");
495 this->mInitialConditions.push_back(1.0);
497 this->mVariableNames.push_back(
"f_kv11");
498 this->mVariableUnits.push_back(
"dimensionless");
499 this->mInitialConditions.push_back(0.997143);
501 this->mInitialised =
true;
void SetIP3Concentration(double concentration)
~CorriasBuistICCModified()
void SetFractionOfVDDRInPU(double fraction)
double GetIIonic(const std::vector< double > *pStateVariables=NULL)
bool mSetVoltageDerivativeToZero
std::vector< double > & rGetStateVariables()
double mFractionOfVDDRInPU
CorriasBuistICCModified(boost::shared_ptr< AbstractIvpOdeSolver > pSolver, boost::shared_ptr< AbstractStimulusFunction > pIntracellularStimulus)
void SetCarbonMonoxideScaleFactor(double scaleFactor)
double mScaleFactorCarbonMonoxide
void EvaluateYDerivatives(double time, const std::vector< double > &rY, std::vector< double > &rDY)
double GetStimulus(double time)
void VerifyStateVariables()
double GetCarbonMonoxideScaleFactor()
boost::shared_ptr< AbstractOdeSystemInformation > mpSystemInfo
double GetCapacitance() const
#define CHASTE_CLASS_EXPORT(T)
double Asurf_in_cm_square
static HeartConfig * Instance()
void SetSercaPumpScaleFactor(double scaleFactor)