41 #include "OdeSystemInformation.hpp"
42 #include "CorriasBuistSMCModified.hpp"
43 #include "HeartConfig.hpp"
51 pIntracellularStimulus)
147 const std::vector<double>& rY = *pStateVariables;
149 double ECa = 0.5*
RToF*log(
Ca_o/rY[13]);
155 double ICaL =
gCaL_max*rY[1]*rY[2]*rY[3]*(rY[0]-ECa);
158 double ILVA =
gLVA_max*rY[4]*rY[5]*(rY[0]-ECa);
161 double Po_BK = 1.0/(1.0+exp(-(rY[0]/17.0)-2.0*log(rY[13]/0.001)));
174 double hCa_nsCC = 1.0/(1.0+pow((rY[13]/0.0002),-4.0));
175 double rACh_nsCC = 1.0/(1.0+(0.01/
ACh));
182 double i_ionic = INa+ICaL+ILVA+IKr+IKA+IBK+IKb+InsCC+(JCaExt*2.0*
F*
VolCell/
Asurf);
184 assert(!std::isnan(i_ionic));
188 return i_ionic / 0.01;
209 double ECa = 0.5*
RToF*log(
Ca_o/rY[13]);
212 double inf_d_Na = 1.0/(1.0+exp(-(rY[0]+47.0)/4.8));
214 double inf_f_Na = 1.0/(1.0+exp((rY[0]+78.0)/3.0));
220 double inf_d_CaL = 1.0/(1.0+exp(-(rY[0]+17.0)/4.3));
223 double inf_f_CaL = 1.0/(1.0+exp((rY[0]+43.0)/8.9));
226 double inf_fCa_CaL = 1.0-(1.0/(1.0+exp(-((rY[13]-
CaiRest)-
hCa)/
sCa)));
228 double ICaL =
gCaL_max*rY[1]*rY[2]*rY[3]*(rY[0]-ECa);
231 double inf_d_LVA = 1.0/(1.0+exp(-(rY[0]+27.5)/10.9));
234 double inf_f_LVA = 1.0/(1.0+exp((rY[0]+15.8)/7.0));
235 double tau_f_LVA = 7.58*exp(rY[0]*0.00817)*
T_correct_Ca;
237 double ILVA =
gLVA_max*rY[4]*rY[5]*(rY[0]-ECa);
240 double Po_BK = 1.0/(1.0+exp(-(rY[0]/17.0)-2.0*log(rY[13]/0.001)));
244 double inf_xr1 = 1.0/(1.0+exp(-(rY[0]+27.0)/5.0));
247 double inf_xr2 = 0.2+0.8/(1.0+exp((rY[0]+58.0)/10.0));
248 double tau_xr2 = (-707.0+1481.0*exp((rY[0]+36.0)/95.0))*
T_correct_K;
253 double inf_xa1 = 1.0/(1.0+exp(-(rY[0]+26.5)/7.9));
254 double tau_xa1 = (31.8+175.0*exp(-0.5*pow(((rY[0]+44.4)/22.3),2.0)))*
T_correct_K;
256 double inf_xa2 = 0.1+0.9/(1.0+exp((rY[0]+65.0)/6.2));
265 double inf_m_nsCC = 1.0/(1.0+exp(-(rY[0]+25.0)/20.0));
266 double tau_m_nsCC = 150.0/(1.0+exp(-(rY[0]+66.0)/26.0));
267 double hCa_nsCC = 1.0/(1.0+pow((rY[13]/0.0002),-4.0));
268 double rACh_nsCC = 1.0/(1.0+(0.01/
ACh));
276 double t_ICCplateau = 7582.0;
277 double V_decay = 37.25;
278 double t_ICCpeak = 98.0;
280 double period = 20000.0;
281 double stim_start = ((time > (period * 1.0)) && (time <= (period * 2.0))) ? (period * 1.0) : ((time > (period * 2.0)) && (time <= (period * 3.0))) ? (period * 2.0) : ((time > (period * 3.0)) && (time <= (period * 4.0))) ? (period * 3.0) : ((time > (period * 4.0)) && (time <= (period * 5.0))) ? (period * 4.0) : 0.0;
282 double local_time = time - (stim_start + t_ICCpeak);
283 double t_ICC_stimulus = 10000.0;
284 double delta_VICC = 59.0;
291 i_stim = (local_time < t_ICCpeak) ? (gcouple * delta_VICC) : ((local_time >= t_ICCpeak) && (local_time <= t_ICCplateau)) ? (
gcouple * delta_VICC * (1.0 / (1.0 + exp((local_time - 8000.0) / 1000.0)))) : ((local_time > t_ICCplateau) && (local_time < t_ICC_stimulus)) ? (
gcouple * V_decay * (1.0 / (1.0 + exp((local_time - 8000.0) / 150.0)))) : 0.0;
299 double Iion = INa+ICaL+ILVA+IKr+IKA+IBK+IKb+InsCC+(JCaExt*2.0*
F*
VolCell/
Asurf);
301 double voltage_derivative;
304 voltage_derivative = 0.0;
308 voltage_derivative = (-1.0 / 0.01) * (-i_stim + Iion);
310 assert(!std::isnan(voltage_derivative));
313 rDY[0] = voltage_derivative;
314 rDY[1] = (inf_d_CaL - rY[1])/tau_d_CaL;
315 rDY[2] = (inf_f_CaL - rY[2])/tau_f_CaL;
316 rDY[3] = (inf_fCa_CaL - rY[3])/tau_fCa_CaL;
317 rDY[4] = (inf_d_LVA - rY[4])/tau_d_LVA;
318 rDY[5] = (inf_f_LVA - rY[5])/tau_f_LVA;
319 rDY[6] = (inf_d_Na - rY[6])/tau_d_Na;
320 rDY[7] = (inf_f_Na - rY[7])/tau_f_Na;
321 rDY[8] = (inf_m_nsCC - rY[8])/tau_m_nsCC;
322 rDY[9] = (inf_xr1 - rY[9])/tau_xr1;
323 rDY[10] = (inf_xr2 - rY[10])/tau_xr2;
324 rDY[11] = (inf_xa1 - rY[11])/tau_xa1;
325 rDY[12] = (inf_xa2 - rY[12])/tau_xa2;
334 this->mSystemName =
"SMC_model_Martincode";
336 this->mVariableNames.push_back(
"Vm_SM");
337 this->mVariableUnits.push_back(
"mV");
338 this->mInitialConditions.push_back(-69.8);
340 this->mVariableNames.push_back(
"d_CaL");
341 this->mVariableUnits.push_back(
"dim");
342 this->mInitialConditions.push_back(5.0e-6);
344 this->mVariableNames.push_back(
"f_CaL");
345 this->mVariableUnits.push_back(
"dim");
346 this->mInitialConditions.push_back(0.953);
348 this->mVariableNames.push_back(
"fCa_CaL");
349 this->mVariableUnits.push_back(
"dim");
350 this->mInitialConditions.push_back(1.0);
352 this->mVariableNames.push_back(
"d_LVA");
353 this->mVariableUnits.push_back(
"dim");
354 this->mInitialConditions.push_back(0.0202);
356 this->mVariableNames.push_back(
"f_LVA");
357 this->mVariableUnits.push_back(
"dim");
358 this->mInitialConditions.push_back(1.0);
360 this->mVariableNames.push_back(
"d_Na");
361 this->mVariableUnits.push_back(
"dim");
362 this->mInitialConditions.push_back(0.0086);
364 this->mVariableNames.push_back(
"f_Na");
365 this->mVariableUnits.push_back(
"dim");
366 this->mInitialConditions.push_back(0.061);
368 this->mVariableNames.push_back(
"m_nsCC");
369 this->mVariableUnits.push_back(
"dim");
370 this->mInitialConditions.push_back(0.096);
372 this->mVariableNames.push_back(
"xr1");
373 this->mVariableUnits.push_back(
"dim");
374 this->mInitialConditions.push_back(1.92e-4);
376 this->mVariableNames.push_back(
"xr2");
377 this->mVariableUnits.push_back(
"dim");
378 this->mInitialConditions.push_back(0.812);
380 this->mVariableNames.push_back(
"xa1");
381 this->mVariableUnits.push_back(
"dim");
382 this->mInitialConditions.push_back(0.00415);
384 this->mVariableNames.push_back(
"xa2");
385 this->mVariableUnits.push_back(
"dim");
386 this->mInitialConditions.push_back(0.716);
388 this->mVariableNames.push_back(
"Cai");
389 this->mVariableUnits.push_back(
"mM");
390 this->mInitialConditions.push_back(0.9e-04);
392 this->mInitialised =
true;
double mScaleFactorCarbonMonoxide
double SetCarbonMonoxideScaleFactor()
CorriasBuistSMCModified(boost::shared_ptr< AbstractIvpOdeSolver > pSolver, boost::shared_ptr< AbstractStimulusFunction > pIntracellularStimulus)
bool mSetVoltageDerivativeToZero
std::vector< double > & rGetStateVariables()
void EvaluateYDerivatives(double time, const std::vector< double > &rY, std::vector< double > &rDY)
bool mFakeIccStimulusPresent
double Asurf_in_cm_square
void VerifyStateVariables()
double GetStimulus(double time)
void SetFakeIccStimulusPresent(bool present)
bool GetFakeIccStimulusPresent()
double GetIIonic(const std::vector< double > *pStateVariables=NULL)
double GetCarbonMonoxideScaleFactor()
boost::shared_ptr< AbstractOdeSystemInformation > mpSystemInfo
double GetCapacitance() const
#define CHASTE_CLASS_EXPORT(T)
~CorriasBuistSMCModified()
static HeartConfig * Instance()